diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h index b4c52fbc5632d9403f8a58d84f4c5d8979a25d1b..b1fc0462118bfe28ca6e3e3fbd1e34e4aa9dd20c 100644 --- a/include/libs/sync/sync.h +++ b/include/libs/sync/sync.h @@ -272,6 +272,8 @@ SSyncState syncGetState(int64_t rid); void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet); const char* syncStr(ESyncState state); +SSyncCfg syncNodeGetConfig(int64_t rid); + #ifdef __cplusplus } #endif diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c index fd701d7b959fa26f06d2c9dc2c480f7e6b0711a4..a54297af85cd7b83cc7e79199f6088733c97d9a7 100644 --- a/source/dnode/vnode/src/vnd/vnodeCommit.c +++ b/source/dnode/vnode/src/vnd/vnodeCommit.c @@ -15,6 +15,7 @@ #include "vnd.h" #include "vnodeInt.h" +#include "sync.h" extern int32_t tsdbPreCommit(STsdb *pTsdb); extern int32_t tsdbCommitBegin(STsdb *pTsdb, SCommitInfo *pInfo); @@ -287,6 +288,8 @@ static int32_t vnodePrepareCommit(SVnode *pVnode, SCommitInfo *pInfo) { tsem_wait(&pVnode->canCommit); + pVnode->config.syncCfg = syncNodeGetConfig(pVnode->sync); + pVnode->state.commitTerm = pVnode->state.applyTerm; pInfo->info.config = pVnode->config; diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index ace4a7c9c582266b07a6a23d5b7183e8aaa20c85..9c903dcbf87569af54af4e09174b1f5bc0fff3b8 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -106,6 +106,22 @@ _err: return -1; } +SSyncCfg syncNodeGetConfig(int64_t rid){ + SSyncNode* pSyncNode = syncNodeAcquire(rid); + + SSyncCfg cfg = {0}; + if (pSyncNode == NULL) { + sError("failed to acquire rid:%" PRId64 " of tsNodeReftId for pSyncNode", rid); + return cfg; + } + + cfg = pSyncNode->raftCfg.cfg; + + syncNodeRelease(pSyncNode); + + return cfg; +} + void syncStop(int64_t rid) { SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode != NULL) {