Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index
От | Alexander Korotkov |
---|---|
Тема | Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index |
Дата | |
Msg-id | CAPpHfdvx-dQzWae81A9Hpdd1BWh1D0yiRMqRG6KaUQtRzM1AUQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index (Andrew Borodin <amborodin86@gmail.com>) |
Ответы |
Re: [HACKERS] GSoC 2017 : Patch for predicate locking in Gist index
|
Список | pgsql-hackers |
Hi, Andrew!
On Mon, Oct 2, 2017 at 1:40 PM, Andrew Borodin <amborodin86@gmail.com> wrote:
Thanks for looking into the patch!On Thu, Sep 28, 2017 at 3:59 PM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote:In gistdoinsert() you do CheckForSerializableConflictIn() only if page wasn't exclusively locked before (xlocked is false). However, page might be exclusively locked before. And in this case CheckForSerializableConflictInif (!xlocked)
{
LockBuffer(stack->buffer, GIST_UNLOCK);
LockBuffer(stack->buffer, GIST_EXCLUSIVE);
CheckForSerializableConflictIn(r, NULL, stack->buffer);
xlocked = true;() would be skipped. That happens very rarely (someone fixes incomplete split before we did), but nevertheless. if xlocked = true, page was already checked for conflict after setting exclusive lock on it's buffer. I still do not see any problem here...
What happen if exactly this "continue" fires?
if (GistFollowRight(stack->page))
{
if (!xlocked)
{
LockBuffer(stack->buffer, GIST_UNLOCK);
LockBuffer(stack->buffer, GIST_EXCLUSIVE);
xlocked = true;
/* someone might've completed the split when we unlocked */
if (!GistFollowRight(stack->page))
continue;
In this case we might get xlocked == true without calling CheckForSerializableConflictIn(). This is very rare codepath, but still...
I think it would be rather safe and easy for understanding to more CheckForSerializableConflictIn() directly before gistinserttuple().
------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
В списке pgsql-hackers по дате отправления: