From e54711814b12cf632a2b6617c710b9040926cd40 Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Wed, 3 Nov 2021 17:42:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=A4=87=E6=9C=BA=E5=BD=92?= =?UTF-8?q?=E6=A1=A3=E5=A4=8D=E5=88=B6=E6=A7=BD=E5=88=B7=E7=9B=98=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/storage/replication/slot.cpp | 21 ++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/gausskernel/storage/replication/slot.cpp b/src/gausskernel/storage/replication/slot.cpp index 3ba3997c3..e147a0ae8 100644 --- a/src/gausskernel/storage/replication/slot.cpp +++ b/src/gausskernel/storage/replication/slot.cpp @@ -1918,6 +1918,18 @@ ReplicationSlot *getObsReplicationSlot() return NULL; } +static inline void flushSlot(long current) +{ + ReplicationSlotMarkDirty(); + ReplicationSlotsComputeRequiredXmin(false); + ReplicationSlotsComputeRequiredLSN(NULL); + ReplicationSlotSave(); + if (!RecoveryInProgress()) { + log_slot_advance(&t_thrd.slot_cxt.MyReplicationSlot->data); + t_thrd.arch.last_advance_slot_time = current; + } +} + void advanceObsSlot(XLogRecPtr restart_pos) { volatile int *slot_idx = &g_instance.archive_obs_cxt.obs_slot_idx; @@ -1929,10 +1941,11 @@ void advanceObsSlot(XLogRecPtr restart_pos) SpinLockRelease(&slot->mutex); struct timeval tv; gettimeofday(&tv, NULL); - long diff = TIME_GET_MILLISEC(tv) - t_thrd.arch.last_advance_slot_time; - if (!RecoveryInProgress() && diff > t_thrd.arch.advance_slot_wait_interval) { - log_slot_advance(&slot->data); - t_thrd.arch.last_advance_slot_time = TIME_GET_MILLISEC(tv); + long current = TIME_GET_MILLISEC(tv); + long diff = current - t_thrd.arch.last_advance_slot_time; + if (diff > t_thrd.arch.advance_slot_wait_interval) { + t_thrd.slot_cxt.MyReplicationSlot = slot; + flushSlot(current); } } else { ereport(WARNING,