From 33cb9dce780fd71a039a8b28b2575fc247f0e934 Mon Sep 17 00:00:00 2001 From: Benguang Zhao Date: Wed, 16 Aug 2023 09:57:26 +0800 Subject: [PATCH] enh: set roleTimeMs default as statusReq.rebootTime for both of vnodes and mnodes --- source/dnode/mnode/impl/src/mndDnode.c | 28 ++++++++++++++++---------- source/dnode/mnode/impl/src/mndMnode.c | 11 ++-------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 7fbfdfbfb1..25e7ff0158 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -500,8 +500,15 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { for (int32_t vg = 0; vg < pVgroup->replica; ++vg) { SVnodeGid *pGid = &pVgroup->vnodeGid[vg]; if (pGid->dnodeId == statusReq.dnodeId) { - bool roleChanged = - pGid->syncState != pVload->syncState || (pVload->syncTerm != -1 && pGid->syncTerm != pVload->syncTerm); + if (pVload->startTimeMs == 0) { + pVload->startTimeMs = statusReq.rebootTime; + } + if (pVload->roleTimeMs == 0) { + pVload->roleTimeMs = statusReq.rebootTime; + } + bool roleChanged = pGid->syncState != pVload->syncState || + (pVload->syncTerm != -1 && pGid->syncTerm != pVload->syncTerm) || + pGid->roleTimeMs != pVload->roleTimeMs; if (reboot || roleChanged || pGid->syncRestore != pVload->syncRestore || pGid->syncCanRead != pVload->syncCanRead) { mInfo( "vgId:%d, state changed by status msg, old state:%s restored:%d canRead:%d new state:%s restored:%d " @@ -512,12 +519,10 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { pGid->syncTerm = pVload->syncTerm; pGid->syncRestore = pVload->syncRestore; pGid->syncCanRead = pVload->syncCanRead; - pGid->startTimeMs = (pVload->startTimeMs != 0) ? pVload->startTimeMs : statusReq.rebootTime; + pGid->startTimeMs = pVload->startTimeMs; + pGid->roleTimeMs = pVload->roleTimeMs; stateChanged = true; } - if (roleChanged) { - pGid->roleTimeMs = (pVload->roleTimeMs != 0) ? pVload->roleTimeMs : taosGetTimestampMs(); - } break; } } @@ -537,8 +542,12 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { SMnodeObj *pObj = mndAcquireMnode(pMnode, pDnode->id); if (pObj != NULL) { + if (statusReq.mload.roleTimeMs == 0) { + statusReq.mload.roleTimeMs = statusReq.rebootTime; + } bool roleChanged = pObj->syncState != statusReq.mload.syncState || - (statusReq.mload.syncTerm != -1 && pObj->syncTerm != statusReq.mload.syncTerm); + (statusReq.mload.syncTerm != -1 && pObj->syncTerm != statusReq.mload.syncTerm) || + pObj->roleTimeMs != statusReq.mload.roleTimeMs; if (roleChanged || pObj->syncRestore != statusReq.mload.syncRestore) { mInfo("dnode:%d, mnode syncState from %s to %s, restoreState from %d to %d, syncTerm from %" PRId64 " to %" PRId64, @@ -547,11 +556,8 @@ static int32_t mndProcessStatusReq(SRpcMsg *pReq) { pObj->syncState = statusReq.mload.syncState; pObj->syncTerm = statusReq.mload.syncTerm; pObj->syncRestore = statusReq.mload.syncRestore; + pObj->roleTimeMs = statusReq.mload.roleTimeMs; } - if (roleChanged) { - pObj->roleTimeMs = (statusReq.mload.roleTimeMs != 0) ? statusReq.mload.roleTimeMs : taosGetTimestampMs(); - } - mndReleaseMnode(pMnode, pObj); } diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index 4ee2bc159b..8912d15553 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -859,15 +859,8 @@ static int32_t mndRetrieveMnodes(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock *pB colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->createdTime, false); pColInfo = taosArrayGet(pBlock->pDataBlock, cols++); - if (pObj->syncTerm != pSelfObj->syncTerm || !isDnodeOnline) { - // state of old term / no status report => use dummyTimeMs - if (pObj->syncTerm > pSelfObj->syncTerm) { - mError("mnode:%d has a newer term:%" PRId64 " than me:%" PRId64, pObj->id, pObj->syncTerm, pSelfObj->syncTerm); - } - colDataSetVal(pColInfo, numOfRows, (const char *)&dummyTimeMs, false); - } else { - colDataSetVal(pColInfo, numOfRows, (const char *)&pObj->roleTimeMs, false); - } + colDataSetVal(pColInfo, numOfRows, (isDnodeOnline) ? (const char *)&pObj->roleTimeMs : (const char *)&dummyTimeMs, + false); numOfRows++; sdbRelease(pSdb, pObj);