From f0fdc58c528bbc626f19c6c682c182e827b15d31 Mon Sep 17 00:00:00 2001 From: Minghao Li Date: Wed, 30 Nov 2022 20:56:58 +0800 Subject: [PATCH] refactor(sync): help to display leader** --- include/libs/sync/sync.h | 5 +++++ source/libs/sync/inc/syncInt.h | 1 + source/libs/sync/src/syncMain.c | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h index 1b65d95cb1..c85c0d79c7 100644 --- a/include/libs/sync/sync.h +++ b/include/libs/sync/sync.h @@ -210,9 +210,14 @@ typedef struct SSyncInfo { int32_t (*syncEqCtrlMsg)(const SMsgCb* msgcb, SRpcMsg* pMsg); } SSyncInfo; +// if state == leader +// if restored, display "leader" +// if !restored && canRead, display "leader*" +// if !restored && !canRead, display "leader**" typedef struct SSyncState { ESyncState state; bool restored; + bool canRead; } SSyncState; int32_t syncInit(); diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h index 145880fa3e..04ee7c16c1 100644 --- a/source/libs/sync/inc/syncInt.h +++ b/source/libs/sync/inc/syncInt.h @@ -244,6 +244,7 @@ int32_t syncCacheEntry(SSyncLogStore* pLogStore, SSyncRaftEntry* pEntry, LRUHa bool syncNodeHeartbeatReplyTimeout(SSyncNode* pSyncNode); bool syncNodeSnapshotSending(SSyncNode* pSyncNode); bool syncNodeSnapshotRecving(SSyncNode* pSyncNode); +bool syncNodeIsReadyForRead(SSyncNode* pSyncNode); // raft state change -------------- void syncNodeUpdateTerm(SSyncNode* pSyncNode, SyncTerm term); diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index 44abf3c5e9..9d85943c36 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -381,15 +381,13 @@ int32_t syncStepDown(int64_t rid, SyncTerm newTerm) { return 0; } -bool syncIsReadyForRead(int64_t rid) { - SSyncNode* pSyncNode = syncNodeAcquire(rid); +bool syncNodeIsReadyForRead(SSyncNode* pSyncNode) { if (pSyncNode == NULL) { sError("sync ready for read error"); return false; } if (pSyncNode->state == TAOS_SYNC_STATE_LEADER && pSyncNode->restoreFinish) { - syncNodeRelease(pSyncNode); return true; } @@ -443,6 +441,18 @@ bool syncIsReadyForRead(int64_t rid) { } } + return ready; +} + +bool syncIsReadyForRead(int64_t rid) { + SSyncNode* pSyncNode = syncNodeAcquire(rid); + if (pSyncNode == NULL) { + sError("sync ready for read error"); + return false; + } + + bool ready = syncNodeIsReadyForRead(pSyncNode); + syncNodeRelease(pSyncNode); return ready; } @@ -521,6 +531,7 @@ SSyncState syncGetState(int64_t rid) { if (pSyncNode != NULL) { state.state = pSyncNode->state; state.restored = pSyncNode->restoreFinish; + state.canRead = syncNodeIsReadyForRead(pSyncNode); syncNodeRelease(pSyncNode); }