fix(sync): wal write from middle
This commit is contained in:
parent
e4f04491df
commit
ac90f61b63
|
@ -20,6 +20,7 @@
|
|||
#include "syncRaftStore.h"
|
||||
#include "syncUtil.h"
|
||||
#include "syncVoteMgr.h"
|
||||
#include "wal.h"
|
||||
|
||||
// TLA+ Spec
|
||||
// HandleAppendEntriesRequest(i, j, m) ==
|
||||
|
@ -687,7 +688,10 @@ int32_t syncNodeOnAppendEntriesSnapshotCb(SSyncNode* ths, SyncAppendEntries* pMs
|
|||
// execute fsm
|
||||
if (ths->pFsm != NULL) {
|
||||
for (SyncIndex i = beginIndex; i <= endIndex; ++i) {
|
||||
if (i != SYNC_INDEX_INVALID) {
|
||||
// notice! wal maybe deleted, update firstVer
|
||||
SyncIndex walFirstVer = walGetFirstVer(ths->pWal);
|
||||
|
||||
if (i != SYNC_INDEX_INVALID && i >= walFirstVer) {
|
||||
SSyncRaftEntry* pEntry = ths->pLogStore->getEntry(ths->pLogStore, i);
|
||||
assert(pEntry != NULL);
|
||||
|
||||
|
|
|
@ -208,9 +208,13 @@ cJSON* logStore2Json(SSyncLogStore* pLogStore) {
|
|||
cJSON_AddItemToObject(pRoot, "pEntries", pEntries);
|
||||
SyncIndex lastIndex = logStoreLastIndex(pLogStore);
|
||||
for (SyncIndex i = 0; i <= lastIndex; ++i) {
|
||||
SSyncRaftEntry* pEntry = logStoreGetEntry(pLogStore, i);
|
||||
cJSON_AddItemToArray(pEntries, syncEntry2Json(pEntry));
|
||||
syncEntryDestory(pEntry);
|
||||
SyncIndex walFirstVer = walGetFirstVer(pData->pWal);
|
||||
|
||||
if (i != SYNC_INDEX_INVALID && i >= walFirstVer) {
|
||||
SSyncRaftEntry* pEntry = logStoreGetEntry(pLogStore, i);
|
||||
cJSON_AddItemToArray(pEntries, syncEntry2Json(pEntry));
|
||||
syncEntryDestory(pEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "syncSnapshot.h"
|
||||
#include "syncRaftStore.h"
|
||||
#include "syncUtil.h"
|
||||
#include "wal.h"
|
||||
|
||||
static void snapshotSenderDoStart(SSyncSnapshotSender *pSender);
|
||||
static void snapshotReceiverDoStart(SSyncSnapshotReceiver *pReceiver);
|
||||
|
@ -434,6 +435,10 @@ int32_t syncNodeOnSnapshotSendCb(SSyncNode *pSyncNode, SyncSnapshotSend *pMsg) {
|
|||
// end, finish FSM
|
||||
pSyncNode->pFsm->FpSnapshotDoWrite(pSyncNode->pFsm, pReceiver->pWriter, pMsg->data, pMsg->dataLen);
|
||||
pSyncNode->pFsm->FpSnapshotStopWrite(pSyncNode->pFsm, pReceiver->pWriter, true);
|
||||
|
||||
walRestoreFromSnapshot(pSyncNode->pWal, pMsg->lastIndex);
|
||||
sInfo("walRestoreFromSnapshot lastIndex:%ld", pMsg->lastIndex);
|
||||
|
||||
pReceiver->pWriter = NULL;
|
||||
snapshotReceiverStop(pReceiver);
|
||||
pReceiver->ack = pMsg->seq;
|
||||
|
|
Loading…
Reference in New Issue