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 по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pg_ctl status with nonexistent data directory
Следующее
От: "naman.iitb"
Дата:
Сообщение: Creating Empty Index