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