fix(sync): snapshot maybe change when sending

This commit is contained in:
Minghao Li 2022-06-07 14:35:20 +08:00
parent 44a893a1c1
commit 326714a077
3 changed files with 16 additions and 17 deletions

View File

@ -50,6 +50,8 @@ typedef struct SSyncSnapshotSender {
bool finish;
} SSyncSnapshotSender;
void snapshotSenderDoStart(SSyncSnapshotSender *pSender);
SSyncSnapshotSender *snapshotSenderCreate(SSyncNode *pSyncNode, int32_t replicaIndex);
void snapshotSenderDestroy(SSyncSnapshotSender *pSender);
void snapshotSenderStart(SSyncSnapshotSender *pSender);

View File

@ -174,18 +174,15 @@ int32_t syncNodeOnAppendEntriesReplySnapshotCb(SSyncNode* ths, SyncAppendEntries
}
ASSERT(pSender != NULL);
// calculate sentryIndex
SyncIndex sentryIndex;
if (pSender->start) {
if (pSender->start && pSender->term == ths->pRaftStore->currentTerm) {
// already start
sentryIndex = pSender->snapshot.lastApplyIndex;
} else {
// start send snapshot
if (!(pSender->term == ths->pRaftStore->currentTerm && pSender->finish == true)) {
snapshotSenderStart(pSender);
} else {
sInfo("snapshot send finish, send_term:%lu, current_term:%lu", pSender->term, ths->pRaftStore->currentTerm);
}
// start send snapshot, first time
snapshotSenderDoStart(pSender);
pSender->start = true;
sentryIndex = pSender->snapshot.lastApplyIndex;
}

View File

@ -19,7 +19,7 @@
#include "syncUtil.h"
#include "wal.h"
static void snapshotSenderDoStart(SSyncSnapshotSender *pSender);
// static void snapshotSenderDoStart(SSyncSnapshotSender *pSender);
static void snapshotReceiverDoStart(SSyncSnapshotReceiver *pReceiver);
SSyncSnapshotSender *snapshotSenderCreate(SSyncNode *pSyncNode, int32_t replicaIndex) {
@ -59,7 +59,7 @@ void snapshotSenderDestroy(SSyncSnapshotSender *pSender) {
}
// begin send snapshot (current term, seq begin)
static void snapshotSenderDoStart(SSyncSnapshotSender *pSender) {
void snapshotSenderDoStart(SSyncSnapshotSender *pSender) {
pSender->term = pSender->pSyncNode->pRaftStore->currentTerm;
pSender->seq = SYNC_SNAPSHOT_SEQ_BEGIN;
pSender->ack = SYNC_SNAPSHOT_SEQ_INVALID;