From 75e0936a2d70c118e7820261bea0eecdd739f1d1 Mon Sep 17 00:00:00 2001 From: Richard Walters Date: Mon, 8 Mar 2021 12:10:42 -0800 Subject: [PATCH] Fix issues with follower committing log entries * Do not advance commit index if appending entries is not successful. * Even if successful, only advance commit index as far as the last matching entry. --- src/server/inner.rs | 7 +++++-- src/server/tests/replication_response.rs | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/server/inner.rs b/src/server/inner.rs index 07b3a59..569ccd9 100644 --- a/src/server/inner.rs +++ b/src/server/inner.rs @@ -802,8 +802,11 @@ impl Inner { append_entries, ) }; - if leader_commit > self.commit_index { - self.commit_log(leader_commit); + if success { + let new_commit_index = leader_commit.min(next_log_index - 1); + if new_commit_index > self.commit_index { + self.commit_log(new_commit_index); + } } let message = Message { content: MessageContent::AppendEntriesResponse { diff --git a/src/server/tests/replication_response.rs b/src/server/tests/replication_response.rs index d377974..b866e1c 100644 --- a/src/server/tests/replication_response.rs +++ b/src/server/tests/replication_response.rs @@ -320,7 +320,7 @@ fn follower_match_appended_entries() { Message { content: MessageContent::AppendEntries( AppendEntriesContent { - leader_commit: 0, + leader_commit: 3, prev_log_index: 0, prev_log_term: 0, log: vec![ @@ -343,7 +343,7 @@ fn follower_match_appended_entries() { .await; fixture .expect_append_entries_response(&AwaitAppendEntriesResponseArgs { - commit_index: None, + commit_index: Some(2), expect_state_change: false, success: true, next_log_index: 3, @@ -483,7 +483,7 @@ fn follower_rejects_appended_entries_with_mismatched_previous_term() { Message { content: MessageContent::AppendEntries( AppendEntriesContent { - leader_commit: 0, + leader_commit: 3, prev_log_index: 2, prev_log_term: 3, log: vec![