From ea0a5061e9524a08fdca73a41b0333c5a41f0a64 Mon Sep 17 00:00:00 2001 From: openGaussDev Date: Thu, 10 Mar 2022 20:36:29 +0800 Subject: [PATCH] primary must update the targetBarrier incrementally. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Offering: openGaussDev More detail: targetBarrier更新必须递增 Match-id-be34323f18803bbe8851773fc97170ec8b73be02 --- src/gausskernel/storage/replication/walsender.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gausskernel/storage/replication/walsender.cpp b/src/gausskernel/storage/replication/walsender.cpp index 7c8844fe2..87d685a58 100755 --- a/src/gausskernel/storage/replication/walsender.cpp +++ b/src/gausskernel/storage/replication/walsender.cpp @@ -4213,6 +4213,11 @@ static void InitWalSnd(void) rc = memset_s(g_instance.streaming_dr_cxt.targetBarrierId, MAX_BARRIER_ID_LENGTH, 0, sizeof(g_instance.streaming_dr_cxt.targetBarrierId)); securec_check(rc, "\0", "\0"); + SpinLockAcquire(&g_instance.streaming_dr_cxt.mutex); + rc = memset_s(g_instance.streaming_dr_cxt.currentBarrierId, MAX_BARRIER_ID_LENGTH, 0, + sizeof(g_instance.streaming_dr_cxt.currentBarrierId)); + SpinLockRelease(&g_instance.streaming_dr_cxt.mutex); + securec_check(rc, "\0", "\0"); } walsnd->isTermChanged = false; walsnd->peer_state = NORMAL_STATE; @@ -6877,9 +6882,11 @@ static void ProcessHadrReplyMessage() HadrReplyMessage hadrReply; pq_copymsgbytes(t_thrd.walsender_cxt.reply_message, (char*)&hadrReply, sizeof(HadrReplyMessage)); SpinLockAcquire(&g_instance.streaming_dr_cxt.mutex); - int rc = strncpy_s((char *)g_instance.streaming_dr_cxt.targetBarrierId, MAX_BARRIER_ID_LENGTH, - hadrReply.targetBarrierId, MAX_BARRIER_ID_LENGTH - 1); - securec_check(rc, "\0", "\0"); + if (BARRIER_LT((char *)g_instance.streaming_dr_cxt.targetBarrierId, (char *)hadrReply.targetBarrierId)) { + int rc = strncpy_s((char *)g_instance.streaming_dr_cxt.targetBarrierId, MAX_BARRIER_ID_LENGTH, + hadrReply.targetBarrierId, MAX_BARRIER_ID_LENGTH - 1); + securec_check(rc, "\0", "\0"); + } SpinLockRelease(&g_instance.streaming_dr_cxt.mutex); }