From 54e06fe8172c36eb14c5bc97e677ac3a5a32e82e Mon Sep 17 00:00:00 2001 From: Elizaveta Reutt Date: Fri, 7 Aug 2026 14:52:47 +0300 Subject: [PATCH 1/3] assert expression misprint --- src/backend/executor/nodeLockRows.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/executor/nodeLockRows.c b/src/backend/executor/nodeLockRows.c index f84b093d9cd..4912de845a7 100644 --- a/src/backend/executor/nodeLockRows.c +++ b/src/backend/executor/nodeLockRows.c @@ -165,7 +165,7 @@ ExecLockRows(PlanState *pstate) } else { - Assert(erm->refType = ROW_REF_ROWID); + Assert(erm->refType == ROW_REF_ROWID); datum = datumCopy(datum, false, -1); } switch (erm->markType) From 46d53edcff188f7ac98e42ee63c5eb0363be44fb Mon Sep 17 00:00:00 2001 From: Elizaveta Reutt Date: Fri, 7 Aug 2026 15:03:10 +0300 Subject: [PATCH 2/3] Stop check custom wal-record after hook alredy done the checks Code bellow hook on custom record have to be execute only for RM_XACT_ID. Otherwise flags checking is inconsist to record resource manager. --- src/backend/access/transam/xlogrecovery.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index db1ffd43bf6..f1a3cf45d22 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -2675,9 +2675,11 @@ recoveryStopsBefore(XLogReaderState *record) timestamptz_to_str(recoveryStopTime)))); return true; } + return false; } + /* Otherwise we only consider stopping before COMMIT or ABORT records. */ - else if (XLogRecGetRmid(record) != RM_XACT_ID) + if (XLogRecGetRmid(record) != RM_XACT_ID) return false; xact_info = XLogRecGetInfo(record) & XLOG_XACT_OPMASK; From 87341b9db14fb951ad0461df3dea4ffc36a3148f Mon Sep 17 00:00:00 2001 From: Elizaveta Reutt Date: Fri, 7 Aug 2026 15:18:54 +0300 Subject: [PATCH 3/3] invoke RecoveryInProgress outside SpinLock in GetEffectiveXlogReplayRecPtr --- src/backend/access/transam/xlogrecovery.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index f1a3cf45d22..6a4abbcb6f1 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -4651,9 +4651,10 @@ XLogRecPtr GetEffectiveXlogReplayRecPtr(void) { XLogRecPtr recptr = InvalidXLogRecPtr; + bool useHook = GetReplayXlogPtrHook != NULL && RecoveryInProgress(); SpinLockAcquire(&XLogRecoveryCtl->info_lck); - if (GetReplayXlogPtrHook) + if (useHook) recptr = GetReplayXlogPtrHook(); if (recptr == InvalidXLogRecPtr) recptr = XLogRecoveryCtl->lastReplayedEndRecPtr;