diff --git a/src/gausskernel/process/postmaster/pgarch.cpp b/src/gausskernel/process/postmaster/pgarch.cpp index f2a51255f4a60740e3c2856ca3ebe893147497b4..8753fd07db0c291b64d39c183d76f5782d1bfb64 100755 --- a/src/gausskernel/process/postmaster/pgarch.cpp +++ b/src/gausskernel/process/postmaster/pgarch.cpp @@ -1196,9 +1196,11 @@ static WalSnd* pgarch_chooseWalsnd(XLogRecPtr targetLsn) if (t_thrd.arch.sync_walsender_idx >= 0) { walsnd = &t_thrd.walsender_cxt.WalSndCtl->walsnds[t_thrd.arch.sync_walsender_idx]; SpinLockAcquire(&walsnd->mutex); + volatile int *slotIdx = &walsnd->slot_idx; + ReplicationSlot *slot = &t_thrd.slot_cxt.ReplicationSlotCtl->replication_slots[*slotIdx]; if (walsnd->pid != 0 && ((walsnd->sendRole & SNDROLE_PRIMARY_STANDBY) == walsnd->sendRole) && !XLogRecPtrIsInvalid(walsnd->flush) && XLByteLE(targetLsn, walsnd->flush) && - walsnd->is_cross_cluster == false) { + walsnd->is_cross_cluster == false && slot->archive_config != NULL) { SpinLockRelease(&walsnd->mutex); if (g_instance.roach_cxt.isXLogForceRecycled) { ereport(LOG, (errmsg("pgarch choose walsender index:%d and pid is %ld, when force advance slot", @@ -1215,8 +1217,11 @@ static WalSnd* pgarch_chooseWalsnd(XLogRecPtr targetLsn) SpinLockAcquire(&walsnd->mutex); + volatile int *slotIdx = &walsnd->slot_idx; + ReplicationSlot *slot = &t_thrd.slot_cxt.ReplicationSlotCtl->replication_slots[*slotIdx]; + if (walsnd->pid != 0 && ((walsnd->sendRole & SNDROLE_PRIMARY_STANDBY) == walsnd->sendRole) && - walsnd->is_cross_cluster == false) { + walsnd->is_cross_cluster == false && slot->archive_config != NULL) { if (XLByteLE(targetLsn, walsnd->flush)) { SpinLockRelease(&walsnd->mutex); ArchiveTaskStatus *archive_status = NULL;