diff --git a/src/gausskernel/process/postmaster/barrier_preparse.cpp b/src/gausskernel/process/postmaster/barrier_preparse.cpp index b06e024fe..26b4ebe0c 100644 --- a/src/gausskernel/process/postmaster/barrier_preparse.cpp +++ b/src/gausskernel/process/postmaster/barrier_preparse.cpp @@ -261,7 +261,8 @@ void BarrierPreParseMain(void) startLSN = XLogFindNextRecord(xlogreader, startLSN); if (XLogRecPtrIsInvalid(startLSN)) { startLSN = preStartLSN; - if (!XLByteEQ(walrcv->receiver_flush_location, startLSN)) { + if (!XLByteEQ(walrcv->receiver_flush_location, startLSN) && + !XLByteEQ(walrcv->lastRecoveredBarrierLSN, startLSN)) { /* reset startLSN */ startLSN = walrcv->lastRecoveredBarrierLSN; ereport(LOG, (errmsg("[BarrierPreParse] reset startLSN with lastRecoveredBarrierLSN: %08X/%08X", diff --git a/src/gausskernel/process/postmaster/pgarch.cpp b/src/gausskernel/process/postmaster/pgarch.cpp index 285c81e19..fa0266749 100755 --- a/src/gausskernel/process/postmaster/pgarch.cpp +++ b/src/gausskernel/process/postmaster/pgarch.cpp @@ -425,6 +425,7 @@ static void pgarch_MainLoop(void) XLogRecPtr replayPtr; bool got_recptr = false; bool amSync = false; + int retryTimes = 3; /* FlushPtr <= ConsensusPtr on DCF mode */ if (IS_PGXC_COORDINATOR || g_instance.attr.attr_storage.dcf_attr.enable_dcf) { flushPtr = GetFlushRecPtr(); @@ -441,8 +442,16 @@ static void pgarch_MainLoop(void) "and init last lsn is %08X%08X", (uint32)(t_thrd.arch.pitr_task_last_lsn >> 32), (uint32)t_thrd.arch.pitr_task_last_lsn))); } - got_recptr = SyncRepGetSyncRecPtr(&receivePtr, &writePtr, &flushPtr, &replayPtr, &amSync, false); - if (got_recptr != true) { + while (retryTimes--) { + got_recptr = + SyncRepGetSyncRecPtr(&receivePtr, &writePtr, &flushPtr, &replayPtr, &amSync, false); + if (got_recptr == true) { + break; + } else { + pg_usleep(1000000L); + } + } + if (got_recptr == false) { ereport(ERROR, (errmsg("pgarch_ArchiverObsCopyLoop failed when call SyncRepGetSyncRecPtr"))); }