From: | Andrey Borodin <x4mmm(at)yandex-team(dot)ru> |
---|---|
To: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
Cc: | Peter Geoghegan <pg(at)bowt(dot)ie>, Thomas Munro <thomas(dot)munro(at)enterprisedb(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: amcheck verification for GiST |
Date: | 2019-03-28 17:08:29 |
Message-ID: | 250A39F1-29F1-4275-AE4E-ADE8324820B2@yandex-team.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> 28 марта 2019 г., в 18:35, Andrey Borodin <x4mmm(at)yandex-team(dot)ru> написал(а):
>>
>> Is this really needed? Isn't the ShareLock on the index sufficient? If so, why?
> There may be concurrent inserts? In GiST they can reorder items on page.
Looks like I've tried to cope with same problem twice:
v3 of the patch used AccessShareLock and many locks with incorrect order.
We could use one of possible solutions: either use ShareLock, or rewrite scan to correct locking order.
But patches v4-v7 use both.
I think we should use AccessShareLock, as long as we implemented tricky logic with gist_refind_parent().
>>> + stack->parenttup = gist_refind_parent(rel, stack->parentblk, stack->blkno, strategy);
>>
>> If the gistplacetopage() stuff is truly necessary, then is it okay to
>> call gist_refind_parent() with the original buffer lock still held
>> like this?
> When we call gist_refind_parent() we hold lock for a child and lock parent.
> We exclude concurrent VACUUM, thus parent cannot become a child for current child, because it has to be recycled for such coincidence.
That's merely hard form of paranoia, internal pages are never deleted. gist_index_parent_check() would work just fine with concurrent VACUUM, INSERTs and SELECTs.
Best regards, Andrey Borodin.
From | Date | Subject | |
---|---|---|---|
Next Message | Simon Riggs | 2019-03-28 17:10:23 | Re: propagating replica identity to partitions |
Previous Message | Alvaro Herrera | 2019-03-28 16:46:33 | Re: propagating replica identity to partitions |