Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]

Поиск
Список
Период
Сортировка
От Florian Pflug
Тема Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]
Дата
Msg-id 99A6ACCB-A4A3-42EF-9D10-0F5B402A631A@phlo.org
обсуждение исходный текст
Ответ на Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Dec14, 2010, at 21:18 , Tom Lane wrote:
> Florian Pflug <fgp@phlo.org> writes:
>> In the process of re-verifying my serializable lock consistency patch, I ran
>> the fk_concurrency testsuite against *unpatched* HEAD for comparison.
>
>> My build of HEAD had asserts enabled, and I promptly triggered
>>    Assert(!(tp.t_data->t_infomask & HEAP_XMAX_INVALID))
>> in heap_delete().
>
>> The seems wrong, if result was set to HeapTupleUpdated because the tuple was invisible
>> to the crosscheck snapshot, its xmax may very well be invalid.
>
> This patch seems certainly wrong.  Please provide an actual test case
> rather than just asserting we should change this.


Running my FK concurrency test suite against HEAD as of today with 100 transaction / client triggers this within a few
secondsor so. The test suite can be found at https://github.com/fgp/fk_concurrency. 

./fk_concurrency.sh <tx/client> native <path to pg> <host or patch to socket>

Could you explain what seems to be wrong with my patch? If you believe that it's impossible for a tuple to be visible
underthe query's snapshot but invisible to the crosscheck snapshot, unless it was deleted, that's *not* the case! For
RIchecks in serializable transactions, the *crosscheck* snapshot is the serializable snapshot, while the query's
snapshotis obtained with GetLatetsSnapshot(). This is the relevant snippet from ri_trigger.c, ri_PerformCheck(): 
 if (IsolationUsesXactSnapshot() && detectNewRows) {   CommandCounterIncrement();        /* be sure all my own work is
visible*/   test_snapshot = GetLatestSnapshot();   crosscheck_snapshot = GetTransactionSnapshot(); } else {   /* the
defaultSPI behavior is okay */   test_snapshot = InvalidSnapshot;   crosscheck_snapshot = InvalidSnapshot; } 

best regards,
Florian Pflug



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Triggered assertion "!(tp.t_data->t_infomask & HEAP_XMAX_INVALID)" in heap_delete() on HEAD [PATCH]