Re: SP-GiST bug and fix
От | Tom Lane |
---|---|
Тема | Re: SP-GiST bug and fix |
Дата | |
Msg-id | 13867.1383423992@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | SP-GiST bug and fix (Teodor Sigaev <teodor@sigaev.ru>) |
Список | pgsql-hackers |
Teodor Sigaev <teodor@sigaev.ru> writes: > SP-GiST has a bug during creation: > % create table ranges as select int4range( (random()*5)::int, > (random()*5)::int+5) as range > from generate_series(1,1000000) x; > % create index ranges_range_spgist_idx on ranges using spgist(range); > ERROR: unexpected spgdoinsert() failure > Bug is discovered by Jonathan S. Katz <jonathan.katz@excoventures.com> > When it was found deadlock possibility it was fixed by using > ConditionalLockBuffer() instead of LockBuffer(EXCLUSIVE) and retrying insertion > from the scratch. Build index method doesn't believe in concurrent access and > throws an error if ConditionalLockBuffer() fails. But I missed that > checkpointer process could take a share lock on buffer to write it on disk. > Attached patch just intoduces retrying during index creation. The comments could use some work (both here and in spgdoinsert), but I agree this is a real bug and the fix is sane. Will fix the comments and commit. regards, tom lane
В списке pgsql-hackers по дате отправления: