Skip to content

Commit 5c53844

Browse files
committed
Fix broken Assert() introduced by 8e9a16a
Don't assert MultiXactIdIsRunning if the multi came from a tuple that had been share-locked and later copied over to the new cluster by pg_upgrade. Doing that causes an error to be raised unnecessarily: MultiXactIdIsRunning is not open to the possibility that its argument came from a pg_upgraded tuple, and all its other callers are already checking; but such multis cannot, obviously, have transactions still running, so the assert is pointless. Noticed while investigating the bogus pg_multixact/offsets/0000 file left over by pg_upgrade, as reported by Andres Freund in http://www.postgresql.org/message-id/20140530121631.GE25431@alap3.anarazel.de Backpatch to 9.3, as the commit that introduced the buglet.
1 parent a2db7b7 commit 5c53844

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/backend/access/heap/heapam.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5326,8 +5326,14 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
53265326
* was a locker only, it can be removed without any further
53275327
* consideration; but if it contained an update, we might need to
53285328
* preserve it.
5329+
*
5330+
* Don't assert MultiXactIdIsRunning if the multi came from a
5331+
* pg_upgrade'd share-locked tuple, though, as doing that causes an
5332+
* error to be raised unnecessarily.
53295333
*/
5330-
Assert(!MultiXactIdIsRunning(multi));
5334+
Assert((!(t_infomask & HEAP_LOCK_MASK) &&
5335+
HEAP_XMAX_IS_LOCKED_ONLY(t_infomask)) ||
5336+
!MultiXactIdIsRunning(multi));
53315337
if (HEAP_XMAX_IS_LOCKED_ONLY(t_infomask))
53325338
{
53335339
*flags |= FRM_INVALIDATE_XMAX;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy