From d088d7596c0bade037ea14249ea43c6ae93de5fc Mon Sep 17 00:00:00 2001 From: Georgy Moshkin <gmoshkin@picodata.io> Date: Fri, 28 Apr 2023 17:04:07 +0300 Subject: [PATCH] fix: used to wait for applied index but check commit index in raft_sync --- src/traft/event.rs | 2 +- src/traft/node.rs | 4 ++-- src/traft/rpc/sync.rs | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/traft/event.rs b/src/traft/event.rs index 8a688d6800..de47502499 100644 --- a/src/traft/event.rs +++ b/src/traft/event.rs @@ -25,7 +25,7 @@ pub type BoxResult<T> = std::result::Result<T, Box<dyn std::error::Error>>; JointStateLeave = "raft.joint-state-leave", JointStateDrop = "raft.joint-state-drop", RaftLoopNeeded = "raft.loop-needed", - RaftEntryApplied = "raft.entry-applied", + CommitIndexPersisted = "raft.commit-index-persisted", MigrateDone = "picodata.migrate-done", } } diff --git a/src/traft/node.rs b/src/traft/node.rs index 9f3efc6911..23153a1ee1 100644 --- a/src/traft/node.rs +++ b/src/traft/node.rs @@ -685,8 +685,6 @@ impl NodeImpl { "error persisting applied index: {e}"; "index" => entry_index ); - } else { - event::broadcast(Event::RaftEntryApplied); } Ok(()) @@ -1161,6 +1159,7 @@ impl NodeImpl { // Raft HardState changed, and we need to persist it. if let Some(hs) = ready.hs() { self.raft_storage.persist_hard_state(hs).unwrap(); + event::broadcast(Event::CommitIndexPersisted); if let Err(e) = self.status.send_modify(|s| s.term = hs.term) { tlog!(Warning, "failed updating current term: {e}"; "term" => hs.term) } @@ -1186,6 +1185,7 @@ impl NodeImpl { // Update commit index. if let Some(commit) = light_rd.commit_index() { self.raft_storage.persist_commit(commit).unwrap(); + event::broadcast(Event::CommitIndexPersisted); } // Apply committed entries. diff --git a/src/traft/rpc/sync.rs b/src/traft/rpc/sync.rs index 3960f1a701..2e6a711258 100644 --- a/src/traft/rpc/sync.rs +++ b/src/traft/rpc/sync.rs @@ -36,9 +36,7 @@ pub fn wait_for_index_timeout( } if let Some(timeout) = deadline.checked_duration_since(Instant::now()) { - // TODO: this assumes applied index is updated after committe index, - // maybe we should be more explicit about what we're waiting for - event::wait_timeout(event::Event::RaftEntryApplied, timeout)?; + event::wait_timeout(event::Event::CommitIndexPersisted, timeout)?; } else { return Err(Error::Timeout); } -- GitLab