From 5ee5433c5b1645510d795631c0ae7a56ebbcbdc0 Mon Sep 17 00:00:00 2001 From: openGaussDev Date: Tue, 8 Mar 2022 10:27:59 +0800 Subject: [PATCH] fix bug for barrier preparse Offering: openGaussDev More detail: Match-id-478a97c2593006ff511072ea037227fb26f9d5a4 --- .../process/postmaster/barrier_preparse.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gausskernel/process/postmaster/barrier_preparse.cpp b/src/gausskernel/process/postmaster/barrier_preparse.cpp index 26b4ebe0c..7ab25c93a 100644 --- a/src/gausskernel/process/postmaster/barrier_preparse.cpp +++ b/src/gausskernel/process/postmaster/barrier_preparse.cpp @@ -173,10 +173,11 @@ void BarrierPreParseMain(void) XLogReaderState *xlogreader = NULL; char *errormsg = NULL; XLogPageReadPrivate readprivate; - XLogRecPtr startLSN; - XLogRecPtr preStartLSN; + XLogRecPtr startLSN = InvalidXLogRecPtr; + XLogRecPtr preStartLSN = InvalidXLogRecPtr; + XLogRecPtr lastReadLSN = InvalidXLogRecPtr; bool found = false; - XLogRecPtr barrierLSN; + XLogRecPtr barrierLSN = InvalidXLogRecPtr; char *xLogBarrierId = NULL; char barrierId[MAX_BARRIER_ID_LENGTH] = {0}; const uint32 shiftSize = 32; @@ -258,6 +259,8 @@ void BarrierPreParseMain(void) found = false; preStartLSN = startLSN; + ereport(DEBUG1, (errmsg("[BarrierPreParse] start to preparse at: %08X/%08X", + (uint32)(startLSN >> shiftSize), (uint32)startLSN))); startLSN = XLogFindNextRecord(xlogreader, startLSN); if (XLogRecPtrIsInvalid(startLSN)) { startLSN = preStartLSN; @@ -276,6 +279,7 @@ void BarrierPreParseMain(void) if (record == NULL) { break; } + lastReadLSN = xlogreader->EndRecPtr; uint8 info = XLogRecGetInfo(xlogreader) & ~XLR_INFO_MASK; if (NEED_INSERT_INTO_HASH) { xLogBarrierId = XLogRecGetData(xlogreader); @@ -305,7 +309,7 @@ void BarrierPreParseMain(void) SetBarrieID(barrierId, barrierLSN); } - startLSN = XLogRecPtrIsInvalid(xlogreader->ReadRecPtr) ? preStartLSN : xlogreader->ReadRecPtr; + startLSN = XLogRecPtrIsInvalid(lastReadLSN) ? preStartLSN : lastReadLSN; if (XLogRecPtrIsInvalid(xlogreader->ReadRecPtr) && errormsg) { ereport(LOG, (errmsg("[BarrierPreParse] preparse thread get an error info %s", errormsg)));