SP-GiST bug and fix - Mailing list pgsql-hackers

From Teodor Sigaev
Subject SP-GiST bug and fix
Date
Msg-id 5272723E.8070308@sigaev.ru
Whole thread Raw
Responses Re: SP-GiST bug and fix  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
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.


--
Teodor Sigaev                                   E-mail: teodor@sigaev.ru
                                                    WWW: http://www.sigaev.ru/

Attachment

pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Get more from indices.
Next
From: Antonin Houska
Date:
Subject: Reference to parent query from ANY sublink