Re: [HACKERS] SP-GiST bug and fix

2013-11-02 Thread Tom Lane
Teodor Sigaev teo...@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,100) x;

 %  create index ranges_range_spgist_idx on ranges using spgist(range);
 ERROR: unexpected spgdoinsert() failure

 Bug is discovered by Jonathan S. Katz jonathan.k...@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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


[HACKERS] SP-GiST bug and fix

2013-10-31 Thread Teodor Sigaev

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,100) x;

%  create index ranges_range_spgist_idx on ranges using spgist(range);
ERROR: unexpected spgdoinsert() failure

Bug is discovered by Jonathan S. Katz jonathan.k...@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: teo...@sigaev.ru
   WWW: http://www.sigaev.ru/


spgist_build.patch.gz
Description: Unix tar archive

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers