Content-Length: 264531 | pFad | http://github.com/postgrespro/postgres_cluster/commit/6737aa72ba7621d4db8e09210c65eecafc42b616

ED Fix HeapTupleSatisfiesVacuum on aborted updater xacts · postgrespro/postgres_cluster@6737aa7 · GitHub
Skip to content

Commit 6737aa7

Browse files
committed
Fix HeapTupleSatisfiesVacuum on aborted updater xacts
By using only the macro that checks infomask bits HEAP_XMAX_IS_LOCKED_ONLY to verify whether a multixact is not an updater, and not the full HeapTupleHeaderIsOnlyLocked, it would come to the wrong result in case of a multixact containing an aborted update; therefore returning the wrong result code. This would cause predicate.c to break completely (as in bug report #8273 from David Leverton), and certain index builds would misbehave. As far as I can tell, other callers of the bogus routine would make harmless mistakes or not be affected by the difference at all; so this was a pretty narrow case. Also, no other user of the HEAP_XMAX_IS_LOCKED_ONLY macro is as careless; they all check specifically for the HEAP_XMAX_IS_MULTI case, and they all verify whether the updater is InvalidXid before concluding that it's a valid updater. So there doesn't seem to be any similar bug.
1 parent c8fb821 commit 6737aa7

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/backend/utils/time/tqual.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,9 @@ HeapTupleSatisfiesVacuum(HeapTupleHeader tuple, TransactionId OldestXmin,
12871287
{
12881288
if (tuple->t_infomask & HEAP_XMAX_INVALID) /* xid invalid */
12891289
return HEAPTUPLE_INSERT_IN_PROGRESS;
1290-
if (HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask))
1290+
/* only locked? run infomask-only check first, for performance */
1291+
if (HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask) ||
1292+
HeapTupleHeaderIsOnlyLocked(tuple))
12911293
return HEAPTUPLE_INSERT_IN_PROGRESS;
12921294
/* inserted and then deleted by same xact */
12931295
return HEAPTUPLE_DELETE_IN_PROGRESS;

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/postgrespro/postgres_cluster/commit/6737aa72ba7621d4db8e09210c65eecafc42b616

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy