summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2022-08-18 16:15:55 +0000
committerRobert Haas2022-08-18 16:22:20 +0000
commitec97db399f1eccda6652d44b99d5363728832eb7 (patch)
tree8242d59df85da1e1ee515d97d983c8f306745174
parente6dbb48487faf47c1436d26064736a906f885a03 (diff)
Adjust assertion in XLogDecodeNextRecord.
As written, if you use XLogBeginRead() to position an xlogreader at the beginning of a WAL page and then try to read WAL, this assertion will fail. However, the header comment for XLogBeginRead() claims that positioning an xlogreader at the beginning of a page is valid, and the code here is perfectly able to cope with it. It's only the assertion that causes trouble. So relax it. This is formally a bug in all supported branches, but as it doesn't seem to have any consequences for current uses of the xlogreader facility, no back-patch, at least for now. Dilip Kumar and Robert Haas Discussion: http://postgr.es/m/CA+TgmoaJSs2_7WHW2GzFYe9+zfPtxBKvT3GW47+x=ptUE=cULw@mail.gmail.com
-rw-r--r--src/backend/access/transam/xlogreader.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c
index 06e91547dd3..f17e80948d1 100644
--- a/src/backend/access/transam/xlogreader.c
+++ b/src/backend/access/transam/xlogreader.c
@@ -576,10 +576,11 @@ XLogDecodeNextRecord(XLogReaderState *state, bool nonblocking)
/*
* Caller supplied a position to start at.
*
- * In this case, NextRecPtr should already be pointing to a valid
- * record starting position.
+ * In this case, NextRecPtr should already be pointing either to a
+ * valid record starting position or alternatively to the beginning of
+ * a page. See the header comments for XLogBeginRead.
*/
- Assert(XRecOffIsValid(RecPtr));
+ Assert(RecPtr % XLOG_BLCKSZ == 0 || XRecOffIsValid(RecPtr));
randAccess = true;
}