From 110f2057ac957de8f7f25b387e5adaf8520f2424 Mon Sep 17 00:00:00 2001 From: Georgy Moshkin <gmoshkin@picodata.io> Date: Thu, 17 Nov 2022 18:20:23 +0300 Subject: [PATCH] fix(governor): used to synchronize with wrong commit index sometimes --- src/traft/node.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/traft/node.rs b/src/traft/node.rs index 2fe4a36c9d..301ace677c 100644 --- a/src/traft/node.rs +++ b/src/traft/node.rs @@ -935,7 +935,6 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { let peers = storage.peers.all_peers().unwrap(); let term = status.get().term; let cluster_id = storage.raft.cluster_id().unwrap().unwrap(); - let commit = storage.raft.commit().unwrap().unwrap(); let node = global().expect("must be initialized"); //////////////////////////////////////////////////////////////////////// @@ -994,6 +993,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { } } + let commit = storage.raft.commit()?.unwrap(); let reqs = maybe_responding(&peers) .filter(|peer| { peer.current_grade == CurrentGradeVariant::ShardingInitialized @@ -1070,6 +1070,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { "calling rpc::replication::promote"; "instance_id" => %replicaset.master_id ); + let commit = storage.raft.commit()?.unwrap(); pool.call_and_wait_timeout( &replicaset.master_id, replication::promote::Request { @@ -1103,6 +1104,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { }); if let Some(peer) = to_sync { let (rx, tx) = fiber::Channel::new(1).into_clones(); + let commit = storage.raft.commit().unwrap().unwrap(); pool.call( &peer.raft_id, sync::Request { @@ -1163,6 +1165,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { .collect::<Vec<_>>(); let res = (|| -> traft::Result<_> { + let commit = storage.raft.commit()?.unwrap(); let reqs = replicaset_iids .iter() .cloned() @@ -1219,6 +1222,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { Cow::Borrowed(&peer.instance_id) }; + let commit = storage.raft.commit()?.unwrap(); pool.call_and_wait_timeout( &*master_id, replication::promote::Request { @@ -1254,6 +1258,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { if let Some(peer) = to_shard { let res = (|| -> traft::Result<()> { let vshard_bootstrapped = storage.state.vshard_bootstrapped()?; + let commit = storage.raft.commit()?.unwrap(); let reqs = maybe_responding(&peers).map(|peer| { ( peer.instance_id.clone(), @@ -1310,6 +1315,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { // because of tarantool bugs let replicasets = storage.replicasets.iter()?; let masters = replicasets.map(|r| r.master_id).collect::<HashSet<_>>(); + let commit = storage.raft.commit()?.unwrap(); let reqs = maybe_responding(&peers) .filter(|peer| masters.contains(&peer.instance_id)) .map(|peer| peer.instance_id.clone()) @@ -1359,6 +1365,7 @@ fn raft_conf_change_loop(status: Rc<Cell<Status>>, storage: Storage) { } let peer_ids = maybe_responding(&peers).map(|peer| peer.instance_id.clone()); + let commit = storage.raft.commit()?.unwrap(); let reqs = peer_ids.zip(repeat(sharding::Request { term, commit, -- GitLab