diff --git a/source/common/src/tmisce.c b/source/common/src/tmisce.c index c3e2846d9a..1606b45eed 100644 --- a/source/common/src/tmisce.c +++ b/source/common/src/tmisce.c @@ -82,6 +82,13 @@ void epsetSort(SEpSet* pDst) { if (pDst->numOfEps <= 1) { return; } + int validIdx = false; + SEp ep = {0}; + if (pDst->inUse >= 0 && pDst->inUse < pDst->numOfEps) { + validIdx = true; + epAssign(&ep, &pDst->eps[pDst->inUse]); + } + for (int i = 0; i < pDst->numOfEps - 1; i++) { for (int j = 0; j < pDst->numOfEps - 1 - i; j++) { SEp* f = &pDst->eps[j]; @@ -95,6 +102,14 @@ void epsetSort(SEpSet* pDst) { } } } + if (validIdx == true) + for (int i = 0; i < pDst->numOfEps; i++) { + int cmp = strncmp(ep.fqdn, pDst->eps[i].fqdn, sizeof(ep.fqdn)); + if (cmp == 0 && ep.port == pDst->eps[i].port) { + pDst->inUse = i; + break; + } + } } void updateEpSet_s(SCorEpSet* pEpSet, SEpSet* pNewEpSet) { diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index 385f20d39e..af6ae8c5a0 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -241,7 +241,6 @@ void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet) { } void *pIter = NULL; - // pEpSet->inUse = 0; while (1) { SMnodeObj *pObj = NULL; pIter = sdbFetch(pSdb, SDB_MNODE, pIter, (void **)&pObj); @@ -252,7 +251,7 @@ void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet) { pEpSet->inUse = pEpSet->numOfEps; } else { pEpSet->inUse = (pEpSet->numOfEps + 1) % totalMnodes; - //pEpSet->inUse = 0; + // pEpSet->inUse = 0; } } if (pObj->pDnode != NULL) { @@ -268,6 +267,7 @@ void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet) { if (pEpSet->inUse >= pEpSet->numOfEps) { pEpSet->inUse = 0; } + epsetSort(pEpSet); } static int32_t mndSetCreateMnodeRedoLogs(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index b60b3c96ca..f26a38ee1d 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -36,6 +36,7 @@ #include "syncUtil.h" #include "syncVoteMgr.h" #include "tglobal.h" +#include "tmisce.h" #include "tref.h" static void syncNodeEqPingTimer(void* param, void* tmrId); @@ -593,6 +594,7 @@ void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { pEpSet->inUse = (pSyncNode->raftCfg.cfg.myIndex + 1) % pEpSet->numOfEps; pEpSet->inUse = 0; } + epsetSort(pEpSet); sInfo("vgId:%d, sync get retry epset numOfEps:%d inUse:%d", pSyncNode->vgId, pEpSet->numOfEps, pEpSet->inUse); syncNodeRelease(pSyncNode);