(unnamed)

text/plain

Filename: (unnamed)
Type: text/plain
Part: 0
Message: [BUG?] lag of minRecoveryPont in archive recovery
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 09d4dff..cf73b58 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -5759,9 +5759,6 @@ StartupXLOG(void)
 				/* Handle interrupt signals of startup process */
 				HandleStartupProcInterrupts();
 
-				/* Allow read-only connections if we're consistent now */
-				CheckRecoveryConsistency();
-
 				/*
 				 * Have we reached our recovery target?
 				 */
@@ -5833,6 +5830,9 @@ StartupXLOG(void)
 				/* Pop the error context stack */
 				error_context_stack = errcallback.previous;
 
+				/* Allow read-only connections if we're consistent now */
+				CheckRecoveryConsistency();
+
 				if (!XLogRecPtrIsInvalid(ControlFile->backupStartPoint) &&
 					XLByteLE(ControlFile->backupEndPoint, EndRecPtr))
 				{
diff --git a/src/backend/catalog/storage.c b/src/backend/catalog/storage.c
index 993bc49..d34ab65 100644
--- a/src/backend/catalog/storage.c
+++ b/src/backend/catalog/storage.c
@@ -519,6 +519,12 @@ smgr_redo(XLogRecPtr lsn, XLogRecord *record)
 			visibilitymap_truncate(rel, xlrec->blkno);
 
 		FreeFakeRelcacheEntry(rel);
+		
+		/*
+		 * Xlogs before this record is unrepeatable, so winding
+		 * minRecoveryPoint to here.
+		 */
+		XLogFlush(lsn);
 	}
 	else
 		elog(PANIC, "smgr_redo: unknown op code %u", info);