TransactionIdIsInProgress(members[i].xid))
{
/* running locker cannot possibly be older than the cutoff */
- Assert(!TransactionIdPrecedes(members[i].xid, cutoff_xid));
+ if (TransactionIdPrecedes(members[i].xid, cutoff_xid))
+ {
+ /* temporary on-bf debugging */
+ elog(PANIC, "too old alive locker: multi: %u, member xid: %u, memb-current: %d, memb-progress: %d, cutoff: %u, cutoff-multi: %u, relfrozenxid: %u, relminmxid: %u",
+ multi, members[i].xid,
+ TransactionIdIsCurrentTransactionId(members[i].xid),
+ TransactionIdIsInProgress(members[i].xid),
+ cutoff_xid, cutoff_multi,
+ relfrozenxid, relminmxid);
+ }
newmembers[nnewmembers++] = members[i];
has_lockers = true;
}
if (HeapTupleIsHotUpdated(&tuple) ||
HeapTupleIsHeapOnly(&tuple) ||
params->index_cleanup == VACOPT_TERNARY_DISABLED)
+ {
+ /* temporary on-bf debugging */
+ elog(LOG, "treating dead HOT tuple (updated %d, heap only: %d, index cleanup: %d) as alive",
+ HeapTupleIsHotUpdated(&tuple), HeapTupleIsHeapOnly(&tuple),
+ params->index_cleanup == VACOPT_TERNARY_DISABLED);
+
nkeep += 1;
+ }
else
tupgone = true; /* we can delete the tuple */
all_visible = false;