issue: nbtpage.c,_bt_pagedel may get wrong result

Поиск
Список
Период
Сортировка
От Pengfei Wang
Тема issue: nbtpage.c,_bt_pagedel may get wrong result
Дата
Msg-id CALsf3S3YU43Km==Faya5MPugPo=GE4-akae8oj6pgw_xEh_cEA@mail.gmail.com
обсуждение исходный текст
Ответы Re: issue: nbtpage.c,_bt_pagedel may get wrong result
Список pgsql-bugs
# issue
/*
* To avoid deadlocks, we'd better drop the leaf page lock
* before going further.
*/
_bt_unlockbuf(rel, leafbuf);

/*
* Check that the left sibling of leafbuf (if any) is not
* marked with INCOMPLETE_SPLIT flag before proceeding
*/
Assert(leafblkno == scanblkno);
if (_bt_leftsib_splitflag(rel, leftsib, leafblkno))
{
    ReleaseBuffer(leafbuf);
    return;
}
After unlocking leaf, but before call _bt_leftsib_splitflag, leftsib may be already split, and leafbuf's current left sibling is in INCOMPLETE_SPLIT status.

# how to fix
In function _bt_leftsib_splitflag, after lock leftsib, we should lock leafbuf again, then recheck if leafbuf's leftsib is still leftsib, if check passed, keep lock on leafbuf.
--
Regards
Wang Pengfei

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Waka Ranai
Дата:
Сообщение: Re: Bug report - pg_upgrade tool seems to have a race condition when trying to delete a pg_wal file
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: Re: issue: nbtpage.c,_bt_pagedel may get wrong result