0009-xlog.c-Make-xlog_redo-not-depend-on-ThisTimeLineID-g.patch
application/octet-stream
Filename: 0009-xlog.c-Make-xlog_redo-not-depend-on-ThisTimeLineID-g.patch
Type: application/octet-stream
Part: 6
Patch
Format: format-patch
Series: patch 0009
Subject: xlog.c: Make xlog_redo() not depend on ThisTimeLineID global variable.
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 12 | 8 |
From 17d9c1e75fb233ba64b135696f005a85d04ca814 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Mon, 1 Nov 2021 12:58:15 -0400
Subject: [PATCH 09/11] xlog.c: Make xlog_redo() not depend on ThisTimeLineID
global variable.
The same value is available in shared memory as XLogCtl->replayEndTLI
so use that instead.
---
src/backend/access/transam/xlog.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 054241403c..b6f30382eb 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -10349,6 +10349,10 @@ xlog_redo(XLogReaderState *record)
{
uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
XLogRecPtr lsn = record->EndRecPtr;
+ TimeLineID replayTLI;
+
+ /* No other process can change this, so we can read it without a lock. */
+ replayTLI = XLogCtl->replayEndTLI;
/*
* In XLOG rmgr, backup blocks are only used by XLOG_FPI and
@@ -10462,10 +10466,10 @@ xlog_redo(XLogReaderState *record)
* We should've already switched to the new TLI before replaying this
* record.
*/
- if (checkPoint.ThisTimeLineID != ThisTimeLineID)
+ if (checkPoint.ThisTimeLineID != replayTLI)
ereport(PANIC,
(errmsg("unexpected timeline ID %u (should be %u) in checkpoint record",
- checkPoint.ThisTimeLineID, ThisTimeLineID)));
+ checkPoint.ThisTimeLineID, replayTLI)));
RecoveryRestartPoint(&checkPoint);
}
@@ -10518,10 +10522,10 @@ xlog_redo(XLogReaderState *record)
SpinLockRelease(&XLogCtl->info_lck);
/* TLI should not change in an on-line checkpoint */
- if (checkPoint.ThisTimeLineID != ThisTimeLineID)
+ if (checkPoint.ThisTimeLineID != replayTLI)
ereport(PANIC,
(errmsg("unexpected timeline ID %u (should be %u) in checkpoint record",
- checkPoint.ThisTimeLineID, ThisTimeLineID)));
+ checkPoint.ThisTimeLineID, replayTLI)));
RecoveryRestartPoint(&checkPoint);
}
@@ -10548,10 +10552,10 @@ xlog_redo(XLogReaderState *record)
* We should've already switched to the new TLI before replaying this
* record.
*/
- if (xlrec.ThisTimeLineID != ThisTimeLineID)
+ if (xlrec.ThisTimeLineID != replayTLI)
ereport(PANIC,
(errmsg("unexpected timeline ID %u (should be %u) in checkpoint record",
- xlrec.ThisTimeLineID, ThisTimeLineID)));
+ xlrec.ThisTimeLineID, replayTLI)));
}
else if (info == XLOG_NOOP)
{
@@ -10621,7 +10625,7 @@ xlog_redo(XLogReaderState *record)
if (ControlFile->minRecoveryPoint < lsn)
{
ControlFile->minRecoveryPoint = lsn;
- ControlFile->minRecoveryPointTLI = ThisTimeLineID;
+ ControlFile->minRecoveryPointTLI = replayTLI;
}
ControlFile->backupStartPoint = InvalidXLogRecPtr;
ControlFile->backupEndRequired = false;
@@ -10662,7 +10666,7 @@ xlog_redo(XLogReaderState *record)
if (minRecoveryPoint != InvalidXLogRecPtr && minRecoveryPoint < lsn)
{
ControlFile->minRecoveryPoint = lsn;
- ControlFile->minRecoveryPointTLI = ThisTimeLineID;
+ ControlFile->minRecoveryPointTLI = replayTLI;
}
CommitTsParameterChange(xlrec.track_commit_timestamp,
--
2.24.3 (Apple Git-128)