From c5b6f16387bde8f21b1ab5fd4e5d7473664ed4ce Mon Sep 17 00:00:00 2001 From: zhouwenbin_db <506739837@qq.com> Date: Thu, 2 Mar 2023 01:37:40 +0000 Subject: [PATCH] =?UTF-8?q?=E7=81=BE=E5=A4=87=E9=9B=86=E7=BE=A4=E4=B8=8D?= =?UTF-8?q?=E8=B5=B0=E5=8F=8C=E4=B8=BB=E5=8F=8C=E9=87=8D=E5=90=AF=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cm_server/cms_arbitrate_datanode_pms.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cm_server/cms_arbitrate_datanode_pms.cpp b/src/cm_server/cms_arbitrate_datanode_pms.cpp index 5411235..ab2e0b5 100644 --- a/src/cm_server/cms_arbitrate_datanode_pms.cpp +++ b/src/cm_server/cms_arbitrate_datanode_pms.cpp @@ -404,6 +404,14 @@ static void GetDnStaticRoleFromDdb(const DnArbCtx *ctx) } else { GetDatanodeDynamicConfigChangeFromDdb(ctx->groupIdx); } + if (g_needIncTermToDdbAgain) { + (void)pthread_rwlock_wrlock(&term_update_rwlock); + /* Prevent multiple worker threads from increasing term at the same time. */ + if (g_needIncTermToDdbAgain) { + (void)IncrementTermToDdb(); + } + (void)pthread_rwlock_unlock(&term_update_rwlock); + } } static void ResetHeartbeat(const DnArbCtx *ctx) @@ -1436,7 +1444,9 @@ static bool MoreDyPrimary(DnArbCtx *ctx, const char *typeName) if (ctx->cond.igPrimaryCount >= 1 && ctx->instId != ctx->repGroup->lastFailoverDn) { SendRestartMsg(ctx, typeName); write_runlog(LOG, "Dynamic primary %u is not last failover dn, restart to cascade_standby.\n", ctx->instId); + return true; } + return false; } /* restart dn instance */