From 30b485b744647fd4d5ca711d202a1dc0c59e2aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=82=8E=E6=B3=BC?= Date: Sat, 16 Apr 2022 21:31:30 +0800 Subject: [PATCH] Change: rename State to ServerState - fix: #286 --- openraft/src/core/admin.rs | 4 +- openraft/src/core/append_entries.rs | 6 +- openraft/src/core/client.rs | 4 +- openraft/src/core/install_snapshot.rs | 6 +- openraft/src/core/mod.rs | 92 ++++++++++--------- openraft/src/core/replication.rs | 6 +- openraft/src/core/vote.rs | 8 +- openraft/src/engine/engine.rs | 10 +- openraft/src/engine/initialize_test.rs | 4 +- openraft/src/lib.rs | 2 +- openraft/src/metrics/raft_metrics.rs | 6 +- openraft/src/metrics/wait.rs | 4 +- openraft/src/metrics/wait_test.rs | 12 +-- openraft/src/raft.rs | 6 +- openraft/src/storage.rs | 8 +- openraft/tests/api_install_snapshot.rs | 4 +- .../append_entries/t20_append_conflicts.rs | 4 +- .../t30_append_inconsistent_log.rs | 6 +- .../t40_append_updates_membership.rs | 4 +- .../tests/client_api/t10_client_writes.rs | 8 +- openraft/tests/client_api/t20_client_reads.rs | 4 +- .../client_api/t50_lagging_network_write.rs | 10 +- .../tests/concurrent_write_and_add_learner.rs | 6 +- openraft/tests/elect_compare_last_log.rs | 9 +- openraft/tests/fixtures/mod.rs | 22 +++-- .../tests/initialize/t20_initialization.rs | 14 +-- openraft/tests/log_compaction/compaction.rs | 4 +- .../tests/membership/t00_learner_restart.rs | 14 +-- openraft/tests/membership/t10_add_learner.rs | 4 +- .../membership/t15_add_remove_follower.rs | 4 +- .../membership/t16_change_membership_cases.rs | 4 +- .../tests/membership/t20_change_membership.rs | 6 +- .../membership/t25_elect_with_new_config.rs | 4 +- openraft/tests/membership/t30_step_down.rs | 4 +- .../t20_metrics_state_machine_consistency.rs | 4 +- openraft/tests/metrics/t30_leader_metrics.rs | 10 +- openraft/tests/metrics/t40_metrics_wait.rs | 4 +- openraft/tests/shutdown.rs | 4 +- openraft/tests/singlenode.rs | 4 +- .../tests/snapshot/snapshot_chunk_size.rs | 4 +- .../state_machine/t10_total_order_apply.rs | 4 +- .../t20_state_machine_apply_membership.rs | 4 +- 42 files changed, 184 insertions(+), 167 deletions(-) diff --git a/openraft/src/core/admin.rs b/openraft/src/core/admin.rs index d3249264c..0ed142b12 100644 --- a/openraft/src/core/admin.rs +++ b/openraft/src/core/admin.rs @@ -7,7 +7,7 @@ use tracing::warn; use crate::core::LeaderState; use crate::core::LearnerState; -use crate::core::State; +use crate::core::ServerState; use crate::entry::EntryRef; use crate::error::AddLearnerError; use crate::error::ChangeMembershipError; @@ -317,7 +317,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS tracing::debug!("raft node is stepping down"); // TODO(xp): transfer leadership - self.core.set_target_state(State::Learner); + self.core.set_target_state(ServerState::Learner); return; } diff --git a/openraft/src/core/append_entries.rs b/openraft/src/core/append_entries.rs index 35d7562d8..e1ddd430e 100644 --- a/openraft/src/core/append_entries.rs +++ b/openraft/src/core/append_entries.rs @@ -1,6 +1,6 @@ use crate::core::apply_to_state_machine; use crate::core::RaftCore; -use crate::core::State; +use crate::core::ServerState; use crate::error::AppendEntriesError; use crate::raft::AppendEntriesRequest; use crate::raft::AppendEntriesResponse; @@ -42,8 +42,8 @@ impl, S: RaftStorage> RaftCore, S: RaftStorage> LeaderS // TODO(xp): deal with storage error self.core.save_vote().await.unwrap(); // TODO(xp): if receives error about a higher term, it should stop at once? - self.core.set_target_state(State::Follower); + self.core.set_target_state(ServerState::Follower); } granted.insert(target); diff --git a/openraft/src/core/install_snapshot.rs b/openraft/src/core/install_snapshot.rs index ebea136ac..3eb59109e 100644 --- a/openraft/src/core/install_snapshot.rs +++ b/openraft/src/core/install_snapshot.rs @@ -6,8 +6,8 @@ use tokio::io::AsyncWriteExt; use crate::core::purge_applied_logs; use crate::core::RaftCore; +use crate::core::ServerState; use crate::core::SnapshotState; -use crate::core::State; use crate::error::InstallSnapshotError; use crate::error::SnapshotMismatch; use crate::raft::InstallSnapshotRequest; @@ -49,8 +49,8 @@ impl, S: RaftStorage> RaftCore, S: RaftStorage> RaftCore State::Learner, - (HAS_LOG, MULTI, IS_LEARNER) => State::Learner, + (HAS_LOG, SINGLE, IS_LEARNER) => ServerState::Learner, + (HAS_LOG, MULTI, IS_LEARNER) => ServerState::Learner, - (NO_LOG, SINGLE, IS_LEARNER) => State::Learner, // impossible: no logs but there are other members. - (NO_LOG, MULTI, IS_LEARNER) => State::Learner, // impossible: no logs but there are other members. + (NO_LOG, SINGLE, IS_LEARNER) => ServerState::Learner, // impossible: no logs but there are other members. + (NO_LOG, MULTI, IS_LEARNER) => ServerState::Learner, // impossible: no logs but there are other members. // If this is the only configured member and there is live state, then this is // a single-node cluster. Become leader. - (HAS_LOG, SINGLE, IS_VOTER) => State::Leader, + (HAS_LOG, SINGLE, IS_VOTER) => ServerState::Leader, // The initial state when a raft is created from empty store. - (NO_LOG, SINGLE, IS_VOTER) => State::Learner, + (NO_LOG, SINGLE, IS_VOTER) => ServerState::Learner, // Otherwise it is Follower. - (HAS_LOG, MULTI, IS_VOTER) => State::Follower, + (HAS_LOG, MULTI, IS_VOTER) => ServerState::Follower, - (NO_LOG, MULTI, IS_VOTER) => State::Follower, // impossible: no logs but there are other members. + (NO_LOG, MULTI, IS_VOTER) => ServerState::Follower, // impossible: no logs but there are other members. }; - if self.engine.state.target_state == State::Follower { + if self.engine.state.server_state == ServerState::Follower { // Here we use a 30 second overhead on the initial next_election_timeout. This is because we need // to ensure that restarted nodes don't disrupt a stable cluster by timing out and driving up their // term before network communication is established. @@ -329,19 +329,19 @@ impl, S: RaftStorage> RaftCore LeaderState::new(self).run().await?, - State::Candidate => CandidateState::new(self).run().await?, - State::Follower => FollowerState::new(self).run().await?, - State::Learner => LearnerState::new(self).run().await?, - State::Shutdown => { + match &self.engine.state.server_state { + ServerState::Leader => LeaderState::new(self).run().await?, + ServerState::Candidate => CandidateState::new(self).run().await?, + ServerState::Follower => FollowerState::new(self).run().await?, + ServerState::Learner => LearnerState::new(self).run().await?, + ServerState::Shutdown => { tracing::info!("node has shutdown"); return Ok(()); } @@ -383,7 +383,7 @@ impl, S: RaftStorage> RaftCore, S: RaftStorage> RaftCore, S: RaftStorage> RaftCore, S: RaftStorage> RaftCore { /// All possible states of a Raft node. #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] -pub enum State { +pub enum ServerState { /// The node is completely passive; replicating entries, but neither voting nor timing out. Learner, /// The node is replicating logs from the leader. @@ -711,13 +713,13 @@ pub enum State { Shutdown, } -impl Default for State { +impl Default for ServerState { fn default() -> Self { Self::Follower } } -impl State { +impl ServerState { /// Check if currently in learner state. pub fn is_learner(&self) -> bool { matches!(self, Self::Learner) @@ -822,11 +824,11 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS self.core.report_metrics(Update::Update(Some(self.replication_metrics.clone()))); loop { - if !self.core.engine.state.target_state.is_leader() { + if !self.core.engine.state.server_state.is_leader() { tracing::info!( "id={} state becomes: {:?}", self.core.id, - self.core.engine.state.target_state + self.core.engine.state.server_state ); // implicit drop replication_rx @@ -854,7 +856,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS Ok(_) = &mut self.core.rx_shutdown => { tracing::info!("leader recv from rx_shudown"); - self.core.set_target_state(State::Shutdown); + self.core.set_target_state(ServerState::Shutdown); } } } @@ -896,7 +898,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS tx, } => self.change_membership(members, blocking, turn_to_learner, tx).await?, RaftMsg::ExternalRequest { req } => { - req(State::Leader, &mut self.core.storage, &mut self.core.network); + req(ServerState::Leader, &mut self.core.storage, &mut self.core.network); } }; @@ -978,7 +980,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida self.core.report_metrics(Update::Update(None)); loop { - if !self.core.engine.state.target_state.is_candidate() { + if !self.core.engine.state.server_state.is_candidate() { return Ok(()); } @@ -1002,7 +1004,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida self.core.id, ) .await?; - if !self.core.engine.state.target_state.is_candidate() { + if !self.core.engine.state.server_state.is_candidate() { return Ok(()); } @@ -1011,7 +1013,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida // Inner processing loop for this Raft state. loop { - if !self.core.engine.state.target_state.is_candidate() { + if !self.core.engine.state.server_state.is_candidate() { return Ok(()); } @@ -1033,7 +1035,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida Some(update) = self.core.rx_compaction.recv() => self.core.update_snapshot_state(update), - Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(State::Shutdown), + Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(ServerState::Shutdown), } } } @@ -1068,7 +1070,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida self.core.reject_with_forward_to_leader(tx); } RaftMsg::ExternalRequest { req } => { - req(State::Candidate, &mut self.core.storage, &mut self.core.network); + req(ServerState::Candidate, &mut self.core.storage, &mut self.core.network); } }; Ok(()) @@ -1106,7 +1108,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Followe self.core.report_metrics(Update::Update(None)); loop { - if !self.core.engine.state.target_state.is_follower() { + if !self.core.engine.state.server_state.is_follower() { return Ok(()); } @@ -1119,7 +1121,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Followe // If an election timeout is hit, then we need to transition to candidate. _ = election_timeout => { tracing::debug!("timeout to recv a event, change to CandidateState"); - self.core.set_target_state(State::Candidate) + self.core.set_target_state(ServerState::Candidate) }, Some((msg,span)) = self.core.rx_api.recv() => { @@ -1128,7 +1130,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Followe Some(update) = self.core.rx_compaction.recv() => self.core.update_snapshot_state(update), - Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(State::Shutdown), + Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(ServerState::Shutdown), } } } @@ -1163,7 +1165,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Followe self.core.reject_with_forward_to_leader(tx); } RaftMsg::ExternalRequest { req } => { - req(State::Follower, &mut self.core.storage, &mut self.core.network); + req(ServerState::Follower, &mut self.core.storage, &mut self.core.network); } }; Ok(()) @@ -1200,7 +1202,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Learner self.core.report_metrics(Update::Update(None)); loop { - if !self.core.engine.state.target_state.is_learner() { + if !self.core.engine.state.server_state.is_learner() { return Ok(()); } @@ -1219,7 +1221,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Learner self.core.update_snapshot_state(update); }, - Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(State::Shutdown), + Ok(_) = &mut self.core.rx_shutdown => self.core.set_target_state(ServerState::Shutdown), } } } @@ -1255,7 +1257,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Learner self.core.reject_with_forward_to_leader(tx); } RaftMsg::ExternalRequest { req } => { - req(State::Learner, &mut self.core.storage, &mut self.core.network); + req(ServerState::Learner, &mut self.core.storage, &mut self.core.network); } }; Ok(()) diff --git a/openraft/src/core/replication.rs b/openraft/src/core/replication.rs index de30ffe75..c1dec09a9 100644 --- a/openraft/src/core/replication.rs +++ b/openraft/src/core/replication.rs @@ -6,8 +6,8 @@ use tracing_futures::Instrument; use crate::config::SnapshotPolicy; use crate::core::LeaderState; use crate::core::ReplicationState; +use crate::core::ServerState; use crate::core::SnapshotState; -use crate::core::State; use crate::error::AddLearnerError; use crate::metrics::UpdateMatchedLogId; use crate::raft::AddLearnerResponse; @@ -76,7 +76,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS self.handle_needs_snapshot(must_include, tx).await?; } ReplicaEvent::Shutdown => { - self.core.set_target_state(State::Shutdown); + self.core.set_target_state(ServerState::Shutdown); } }; @@ -93,7 +93,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> LeaderS if vote > self.core.engine.state.vote { self.core.engine.state.vote = vote; self.core.save_vote().await?; - self.core.set_target_state(State::Follower); + self.core.set_target_state(ServerState::Follower); } Ok(()) } diff --git a/openraft/src/core/vote.rs b/openraft/src/core/vote.rs index 48ab964be..7ab2a516a 100644 --- a/openraft/src/core/vote.rs +++ b/openraft/src/core/vote.rs @@ -4,7 +4,7 @@ use tracing_futures::Instrument; use crate::core::CandidateState; use crate::core::RaftCore; -use crate::core::State; +use crate::core::ServerState; use crate::error::VoteError; use crate::raft::VoteRequest; use crate::raft::VoteResponse; @@ -80,7 +80,7 @@ impl, S: RaftStorage> RaftCore, S: RaftStorage> Candida // TODO(xp): This is a simplified impl: revert to follower as soon as seeing a higher `last_log_id`. // When reverted to follower, it waits for heartbeat for 2 second before starting a new round of // election. - self.core.set_target_state(State::Follower); + self.core.set_target_state(ServerState::Follower); tracing::debug!( id = %self.core.id, @@ -134,7 +134,7 @@ impl<'a, C: RaftTypeConfig, N: RaftNetworkFactory, S: RaftStorage> Candida if self.core.engine.state.effective_membership.membership.is_majority(&self.granted) { tracing::debug!("transitioning to leader state as minimum number of votes have been received"); - self.core.set_target_state(State::Leader); + self.core.set_target_state(ServerState::Leader); return Ok(()); } } diff --git a/openraft/src/engine/engine.rs b/openraft/src/engine/engine.rs index 2a8e9b02a..e43479d5e 100644 --- a/openraft/src/engine/engine.rs +++ b/openraft/src/engine/engine.rs @@ -16,7 +16,7 @@ use crate::LogIdOptionExt; use crate::Membership; use crate::MetricsChangeFlags; use crate::NodeId; -use crate::State; +use crate::ServerState; use crate::Vote; /// Raft protocol algorithm. @@ -149,7 +149,7 @@ impl Engine { self.commands.push(Command::MoveInputCursorBy { n: l }); // With the new config, start to elect to become leader - self.set_server_state(State::Candidate); + self.set_server_state(ServerState::Candidate); Ok(()) } @@ -230,7 +230,7 @@ impl Engine { } } - fn set_server_state(&mut self, server_state: State) { + fn set_server_state(&mut self, server_state: ServerState) { tracing::debug!(id = display(self.id), ?server_state, "set_server_state"); // TODO: the caller should be very sure about what server-state to set. @@ -242,11 +242,11 @@ impl Engine { // } else { // self.state.target_state = server_state; // } - if server_state == State::Follower && !self.state.effective_membership.membership.is_member(&self.id) { + if server_state == ServerState::Follower && !self.state.effective_membership.membership.is_member(&self.id) { unreachable!("caller does not know what to do?") } - self.state.target_state = server_state; + self.state.server_state = server_state; } /// Check if a raft node is in a state that allows to initialize. diff --git a/openraft/src/engine/initialize_test.rs b/openraft/src/engine/initialize_test.rs index 7c63bc796..4d82bd4f9 100644 --- a/openraft/src/engine/initialize_test.rs +++ b/openraft/src/engine/initialize_test.rs @@ -12,7 +12,7 @@ use crate::LeaderId; use crate::LogId; use crate::Membership; use crate::MetricsChangeFlags; -use crate::State; +use crate::ServerState; use crate::Vote; #[derive(Clone, serde::Serialize, serde::Deserialize)] @@ -46,7 +46,7 @@ fn test_initialize() -> anyhow::Result<()> { eng.initialize(&mut entries)?; assert_eq!(Some(log_id0), eng.state.last_log_id); - assert_eq!(State::Candidate, eng.state.target_state); + assert_eq!(ServerState::Candidate, eng.state.server_state); assert_eq!( MetricsChangeFlags { leader: false, diff --git a/openraft/src/lib.rs b/openraft/src/lib.rs index ffc4b7c42..e07f81ea3 100644 --- a/openraft/src/lib.rs +++ b/openraft/src/lib.rs @@ -42,7 +42,7 @@ pub use crate::config::Config; pub use crate::config::ConfigError; pub use crate::config::SnapshotPolicy; pub use crate::core::EffectiveMembership; -pub use crate::core::State; +pub use crate::core::ServerState; pub use crate::defensive::DefensiveCheck; pub use crate::defensive::DefensiveCheckBase; pub use crate::entry::Entry; diff --git a/openraft/src/metrics/raft_metrics.rs b/openraft/src/metrics/raft_metrics.rs index 576215dc0..8d2346cb9 100644 --- a/openraft/src/metrics/raft_metrics.rs +++ b/openraft/src/metrics/raft_metrics.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use crate::core::EffectiveMembership; -use crate::core::State; +use crate::core::ServerState; use crate::error::Fatal; use crate::metrics::ReplicationMetrics; use crate::raft::RaftTypeConfig; @@ -37,7 +37,7 @@ pub struct RaftMetrics { // --- cluster --- // --- /// The state of the Raft node. - pub state: State, + pub state: ServerState, /// The current cluster leader. pub current_leader: Option, @@ -73,7 +73,7 @@ impl RaftMetrics { Self { running_state: Ok(()), id, - state: State::Follower, + state: ServerState::Follower, current_term: 0, last_log_index: None, last_applied: None, diff --git a/openraft/src/metrics/wait.rs b/openraft/src/metrics/wait.rs index 28c77cbdf..c16da4701 100644 --- a/openraft/src/metrics/wait.rs +++ b/openraft/src/metrics/wait.rs @@ -4,7 +4,7 @@ use std::collections::BTreeSet; use tokio::sync::watch; use tokio::time::Instant; -use crate::core::State; +use crate::core::ServerState; use crate::metrics::RaftMetrics; use crate::raft::RaftTypeConfig; use crate::LogId; @@ -138,7 +138,7 @@ impl Wait { /// Wait for `state` to become `want_state` or timeout. #[tracing::instrument(level = "trace", skip(self), fields(msg=msg.to_string().as_str()))] - pub async fn state(&self, want_state: State, msg: impl ToString) -> Result, WaitError> { + pub async fn state(&self, want_state: ServerState, msg: impl ToString) -> Result, WaitError> { self.metrics( |x| x.state == want_state, &format!("{} .state -> {:?}", msg.to_string(), want_state), diff --git a/openraft/src/metrics/wait_test.rs b/openraft/src/metrics/wait_test.rs index 22e1656c8..159e49760 100644 --- a/openraft/src/metrics/wait_test.rs +++ b/openraft/src/metrics/wait_test.rs @@ -15,7 +15,7 @@ use crate::LogId; use crate::Membership; use crate::RaftMetrics; use crate::RaftTypeConfig; -use crate::State; +use crate::ServerState; /// Test wait for different state changes #[tokio::test(flavor = "multi_thread", worker_threads = 8)] @@ -71,14 +71,14 @@ async fn test_wait() -> anyhow::Result<()> { let h = tokio::spawn(async move { sleep(Duration::from_millis(10)).await; let mut update = init.clone(); - update.state = State::Leader; + update.state = ServerState::Leader; let rst = tx.send(update); assert!(rst.is_ok()); }); - let got = w.state(State::Leader, "state").await?; + let got = w.state(ServerState::Leader, "state").await?; h.await?; - assert_eq!(State::Leader, got.state); + assert_eq!(ServerState::Leader, got.state); } { @@ -176,7 +176,7 @@ async fn test_wait() -> anyhow::Result<()> { let h = tokio::spawn(async move { sleep(Duration::from_millis(200)).await; }); - let got = w.state(State::Follower, "timeout").await; + let got = w.state(ServerState::Follower, "timeout").await; h.await?; match got.unwrap_err() { @@ -198,7 +198,7 @@ fn init_wait_test() -> (RaftMetrics, Wait, watch::Sende let init = RaftMetrics { running_state: Ok(()), id: C::NodeId::default(), - state: State::Learner, + state: ServerState::Learner, current_term: 0, last_log_index: None, last_applied: None, diff --git a/openraft/src/raft.rs b/openraft/src/raft.rs index 2869269ae..95dde21ce 100644 --- a/openraft/src/raft.rs +++ b/openraft/src/raft.rs @@ -40,8 +40,8 @@ use crate::Node; use crate::NodeId; use crate::RaftNetworkFactory; use crate::RaftStorage; +use crate::ServerState; use crate::SnapshotMeta; -use crate::State; use crate::Vote; /// Configuration of types used by the [`Raft`] core engine. @@ -489,7 +489,7 @@ impl, S: RaftStorage> Raft(&self, req: F) { + pub fn external_request(&self, req: F) { let _ignore_error = self.inner.tx_api.send(( RaftMsg::ExternalRequest { req: Box::new(req) }, tracing::span::Span::none(), // fire-and-forget, so no span @@ -632,7 +632,7 @@ pub(crate) enum RaftMsg, S: RaftStor }, ExternalRequest { - req: Box, + req: Box, }, } diff --git a/openraft/src/storage.rs b/openraft/src/storage.rs index 8b894754f..6a70b945d 100644 --- a/openraft/src/storage.rs +++ b/openraft/src/storage.rs @@ -21,7 +21,7 @@ use crate::LogId; use crate::LogIdOptionExt; use crate::NodeId; use crate::RaftTypeConfig; -use crate::State; +use crate::ServerState; use crate::StorageError; use crate::Vote; @@ -81,7 +81,7 @@ pub struct InitialState { /// The latest cluster membership configuration found, in log or in state machine. pub effective_membership: Arc>, - pub target_state: State, + pub server_state: ServerState, } /// The state about logs. @@ -285,9 +285,11 @@ where C: RaftTypeConfig vote: vote.unwrap_or_default(), effective_membership: Arc::new(membership), + // -- volatile fields: they are not persisted. + // committed log id does not need to be persisted. committed: None, - target_state: Default::default(), + server_state: Default::default(), }) } diff --git a/openraft/tests/api_install_snapshot.rs b/openraft/tests/api_install_snapshot.rs index 8f4a63829..69ec4cad7 100644 --- a/openraft/tests/api_install_snapshot.rs +++ b/openraft/tests/api_install_snapshot.rs @@ -8,8 +8,8 @@ use openraft::raft::InstallSnapshotRequest; use openraft::Config; use openraft::LeaderId; use openraft::LogId; +use openraft::ServerState; use openraft::SnapshotMeta; -use openraft::State; use openraft::Vote; use crate::fixtures::init_default_ut_tracing; @@ -35,7 +35,7 @@ async fn snapshot_ge_half_threshold() -> Result<()> { router.new_raft_node(0).await; router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "empty").await?; router.initialize_from_single_node(0).await?; log_index += 1; diff --git a/openraft/tests/append_entries/t20_append_conflicts.rs b/openraft/tests/append_entries/t20_append_conflicts.rs index 399f771d9..2bc3e2a81 100644 --- a/openraft/tests/append_entries/t20_append_conflicts.rs +++ b/openraft/tests/append_entries/t20_append_conflicts.rs @@ -11,7 +11,7 @@ use openraft::LogId; use openraft::MessageSummary; use openraft::RaftStorage; use openraft::RaftTypeConfig; -use openraft::State; +use openraft::ServerState; use openraft::Vote; use crate::fixtures::blank; @@ -31,7 +31,7 @@ async fn append_conflicts() -> Result<()> { tracing::info!("--- wait for init node to ready"); router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "empty").await?; let (r0, mut sto0) = router.remove_node(0).await.unwrap(); check_logs(&mut sto0, vec![]).await?; diff --git a/openraft/tests/append_entries/t30_append_inconsistent_log.rs b/openraft/tests/append_entries/t30_append_inconsistent_log.rs index 21deef44c..18911f76d 100644 --- a/openraft/tests/append_entries/t30_append_inconsistent_log.rs +++ b/openraft/tests/append_entries/t30_append_inconsistent_log.rs @@ -10,7 +10,7 @@ use openraft::LeaderId; use openraft::LogId; use openraft::RaftLogReader; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use openraft::Vote; use crate::fixtures::init_default_ut_tracing; @@ -100,7 +100,7 @@ async fn append_inconsistent_log() -> Result<()> { router .wait_for_state( &btreeset! {0}, - State::Follower, + ServerState::Follower, Some(Duration::from_millis(2000)), "node 0 become follower", ) @@ -109,7 +109,7 @@ async fn append_inconsistent_log() -> Result<()> { router .wait_for_state( &btreeset! {2}, - State::Leader, + ServerState::Leader, Some(Duration::from_millis(5000)), "node 2 become leader", ) diff --git a/openraft/tests/append_entries/t40_append_updates_membership.rs b/openraft/tests/append_entries/t40_append_updates_membership.rs index 06282d6f3..fde90f42d 100644 --- a/openraft/tests/append_entries/t40_append_updates_membership.rs +++ b/openraft/tests/append_entries/t40_append_updates_membership.rs @@ -11,7 +11,7 @@ use openraft::EntryPayload; use openraft::LeaderId; use openraft::LogId; use openraft::Membership; -use openraft::State; +use openraft::ServerState; use openraft::Vote; use crate::fixtures::blank; @@ -32,7 +32,7 @@ async fn append_updates_membership() -> Result<()> { tracing::info!("--- wait for init node to ready"); router.wait_for_log(&btreeset![0], None, None, "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, None, "empty").await?; let (r0, _sto0) = router.remove_node(0).await.unwrap(); diff --git a/openraft/tests/client_api/t10_client_writes.rs b/openraft/tests/client_api/t10_client_writes.rs index 4aa776458..0699a6c38 100644 --- a/openraft/tests/client_api/t10_client_writes.rs +++ b/openraft/tests/client_api/t10_client_writes.rs @@ -6,8 +6,8 @@ use maplit::btreeset; use openraft::Config; use openraft::LeaderId; use openraft::LogId; +use openraft::ServerState; use openraft::SnapshotPolicy; -use openraft::State; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -41,7 +41,7 @@ async fn client_writes() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1, 2], None, None, "empty").await?; - router.wait_for_state(&btreeset![0, 1, 2], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0, 1, 2], ServerState::Learner, None, "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. @@ -50,8 +50,8 @@ async fn client_writes() -> Result<()> { log_index += 1; router.wait_for_log(&btreeset![0, 1, 2], Some(log_index), None, "leader init log").await?; - router.wait_for_state(&btreeset![0], State::Leader, None, "cluster leader").await?; - router.wait_for_state(&btreeset![1, 2], State::Follower, None, "cluster follower").await?; + router.wait_for_state(&btreeset![0], ServerState::Leader, None, "cluster leader").await?; + router.wait_for_state(&btreeset![1, 2], ServerState::Follower, None, "cluster follower").await?; router.assert_stable_cluster(Some(1), Some(log_index)).await; diff --git a/openraft/tests/client_api/t20_client_reads.rs b/openraft/tests/client_api/t20_client_reads.rs index fe55a82b3..976095d67 100644 --- a/openraft/tests/client_api/t20_client_reads.rs +++ b/openraft/tests/client_api/t20_client_reads.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Result; use maplit::btreeset; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -28,7 +28,7 @@ async fn client_reads() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1, 2], None, None, "empty node").await?; - router.wait_for_state(&btreeset![0, 1, 2], State::Learner, None, "empty node").await?; + router.wait_for_state(&btreeset![0, 1, 2], ServerState::Learner, None, "empty node").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. diff --git a/openraft/tests/client_api/t50_lagging_network_write.rs b/openraft/tests/client_api/t50_lagging_network_write.rs index 1eec8e237..58dcd8997 100644 --- a/openraft/tests/client_api/t50_lagging_network_write.rs +++ b/openraft/tests/client_api/t50_lagging_network_write.rs @@ -4,7 +4,7 @@ use std::time::Duration; use anyhow::Result; use maplit::btreeset; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -35,7 +35,7 @@ async fn lagging_network_write() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, None, "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. @@ -44,7 +44,7 @@ async fn lagging_network_write() -> Result<()> { log_index += 1; // log 0: initial membership log; log 1: leader commits a blank log router.wait_for_log(&btreeset![0], Some(log_index), timeout(), "init").await?; - router.wait_for_state(&btreeset![0], State::Leader, None, "init").await?; + router.wait_for_state(&btreeset![0], ServerState::Leader, None, "init").await?; router.assert_stable_cluster(Some(1), Some(log_index)).await; // Sync some new nodes. @@ -65,8 +65,8 @@ async fn lagging_network_write() -> Result<()> { let node = router.get_raft_handle(&0)?; node.change_membership(btreeset![0, 1, 2], true, false).await?; log_index += 2; - router.wait_for_state(&btreeset![0], State::Leader, None, "changed").await?; - router.wait_for_state(&btreeset![1, 2], State::Follower, None, "changed").await?; + router.wait_for_state(&btreeset![0], ServerState::Leader, None, "changed").await?; + router.wait_for_state(&btreeset![1, 2], ServerState::Follower, None, "changed").await?; router.wait_for_log(&btreeset![0, 1, 2], Some(log_index), timeout(), "3 candidates").await?; router.client_request_many(0, "client", 1).await; diff --git a/openraft/tests/concurrent_write_and_add_learner.rs b/openraft/tests/concurrent_write_and_add_learner.rs index d39b9dc5d..794a0c764 100644 --- a/openraft/tests/concurrent_write_and_add_learner.rs +++ b/openraft/tests/concurrent_write_and_add_learner.rs @@ -7,7 +7,7 @@ use fixtures::RaftRouter; use maplit::btreeset; use openraft::Config; use openraft::LogIdOptionExt; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; @@ -113,9 +113,9 @@ async fn concurrent_write_and_add_learner() -> Result<()> { router .wait_for_metrics( &3u64, - |x| x.state == State::Learner, + |x| x.state == ServerState::Learner, Some(timeout), - &format!("n{}.state -> {:?}", 3, State::Learner), + &format!("n{}.state -> {:?}", 3, ServerState::Learner), ) .await?; diff --git a/openraft/tests/elect_compare_last_log.rs b/openraft/tests/elect_compare_last_log.rs index 4d2ef19aa..72ff3df6b 100644 --- a/openraft/tests/elect_compare_last_log.rs +++ b/openraft/tests/elect_compare_last_log.rs @@ -12,7 +12,7 @@ use openraft::LeaderId; use openraft::LogId; use openraft::Membership; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use openraft::Vote; use crate::fixtures::blank; @@ -76,7 +76,12 @@ async fn elect_compare_last_log() -> Result<()> { router.new_raft_node_with_sto(1, sto1.clone()).await; router - .wait_for_state(&btreeset! {0}, State::Leader, timeout(), "only node 0 becomes leader") + .wait_for_state( + &btreeset! {0}, + ServerState::Leader, + timeout(), + "only node 0 becomes leader", + ) .await?; Ok(()) diff --git a/openraft/tests/fixtures/mod.rs b/openraft/tests/fixtures/mod.rs index 59c9dba52..7f136622a 100644 --- a/openraft/tests/fixtures/mod.rs +++ b/openraft/tests/fixtures/mod.rs @@ -58,7 +58,7 @@ use openraft::RaftMetrics; use openraft::RaftNetwork; use openraft::RaftNetworkFactory; use openraft::RaftTypeConfig; -use openraft::State; +use openraft::ServerState; use openraft::StoreExt; #[allow(unused_imports)] use pretty_assertions::assert_eq; @@ -212,7 +212,13 @@ where tracing::info!("--- wait for init node to ready"); self.wait_for_log(&btreeset![C::NodeId::default()], None, timeout(), "empty").await?; - self.wait_for_state(&btreeset![C::NodeId::default()], State::Learner, timeout(), "empty").await?; + self.wait_for_state( + &btreeset![C::NodeId::default()], + ServerState::Learner, + timeout(), + "empty", + ) + .await?; tracing::info!("--- initializing single node cluster: {}", 0); @@ -450,7 +456,7 @@ where pub async fn wait_for_state( &self, node_ids: &BTreeSet, - want_state: State, + want_state: ServerState, timeout: Option, msg: &str, ) -> Result<()> { @@ -543,7 +549,9 @@ where } /// Send external request to the particular node. - pub fn external_request, &mut TypedRaftRouter) + Send + 'static>( + pub fn external_request< + F: FnOnce(ServerState, &mut StoreExt, &mut TypedRaftRouter) + Send + 'static, + >( &self, target: C::NodeId, req: F, @@ -597,7 +605,7 @@ where ); assert_eq!( node.state, - State::Learner, + ServerState::Learner, "node is in state {:?}, expected Learner", node.state ); @@ -649,12 +657,12 @@ where let leader = nodes .iter() .filter(|node| !isolated.contains(&node.id)) - .find(|node| node.state == State::Leader) + .find(|node| node.state == ServerState::Leader) .expect("expected to find a cluster leader"); let followers: Vec<_> = nodes .iter() .filter(|node| !isolated.contains(&node.id)) - .filter(|node| node.state == State::Follower) + .filter(|node| node.state == ServerState::Follower) .collect(); assert_eq!( diff --git a/openraft/tests/initialize/t20_initialization.rs b/openraft/tests/initialize/t20_initialization.rs index 8df68f910..38477c43d 100644 --- a/openraft/tests/initialize/t20_initialization.rs +++ b/openraft/tests/initialize/t20_initialization.rs @@ -13,7 +13,7 @@ use openraft::LogId; use openraft::Membership; use openraft::RaftLogReader; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use openraft::Vote; use tokio::sync::oneshot; @@ -43,7 +43,7 @@ async fn initialization() -> anyhow::Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1, 2], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0, 1, 2], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0, 1, 2], ServerState::Learner, timeout(), "empty").await?; router.assert_pristine_cluster().await; // Sending an external requests will also find all nodes in Learner state. @@ -61,7 +61,7 @@ async fn initialization() -> anyhow::Result<()> { // (since they are awaited). for node in [0, 1, 2] { router.external_request(node, |s, _sto, _net| { - assert_eq!(s, State::Learner); + assert_eq!(s, ServerState::Learner); }); } @@ -112,11 +112,11 @@ async fn initialization() -> anyhow::Result<()> { let (tx, rx) = oneshot::channel(); router.external_request(node, |s, _sm, _net| tx.send(s).unwrap()); match rx.await.unwrap() { - State::Leader => { + ServerState::Leader => { assert!(!found_leader); found_leader = true; } - State::Follower => { + ServerState::Follower => { follower_count += 1; } s => panic!("Unexpected node {} state: {:?}", node, s), @@ -140,7 +140,7 @@ async fn initialize_err_target_not_include_target() -> anyhow::Result<()> { for node in [0, 1] { router.external_request(node, |s, _sto, _net| { - assert_eq!(s, State::Learner); + assert_eq!(s, ServerState::Learner); }); } @@ -174,7 +174,7 @@ async fn initialize_err_not_allowed() -> anyhow::Result<()> { for node in [0] { router.external_request(node, |s, _sto, _net| { - assert_eq!(s, State::Learner); + assert_eq!(s, ServerState::Learner); }); } diff --git a/openraft/tests/log_compaction/compaction.rs b/openraft/tests/log_compaction/compaction.rs index 4a7c0b2bf..ee8c664fd 100644 --- a/openraft/tests/log_compaction/compaction.rs +++ b/openraft/tests/log_compaction/compaction.rs @@ -15,8 +15,8 @@ use openraft::RaftLogReader; use openraft::RaftNetwork; use openraft::RaftNetworkFactory; use openraft::RaftStorage; +use openraft::ServerState; use openraft::SnapshotPolicy; -use openraft::State; use openraft::Vote; use crate::fixtures::blank; @@ -50,7 +50,7 @@ async fn compaction() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "empty").await?; router.assert_pristine_cluster().await; diff --git a/openraft/tests/membership/t00_learner_restart.rs b/openraft/tests/membership/t00_learner_restart.rs index fd196d873..f52ae057b 100644 --- a/openraft/tests/membership/t00_learner_restart.rs +++ b/openraft/tests/membership/t00_learner_restart.rs @@ -10,7 +10,7 @@ use openraft::LogIdOptionExt; use openraft::Raft; use openraft::RaftStorage; use openraft::RaftTypeConfig; -use openraft::State; +use openraft::ServerState; use tokio::time::sleep; use crate::fixtures::init_default_ut_tracing; @@ -40,7 +40,7 @@ async fn learner_restart() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1], None, None, "empty").await?; - router.wait_for_state(&btreeset![0, 1], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0, 1], ServerState::Learner, None, "empty").await?; router.assert_pristine_cluster().await; tracing::info!("--- initializing single node cluster"); @@ -49,7 +49,7 @@ async fn learner_restart() -> Result<()> { n0.initialize(btreeset! {0}).await?; log_index += 1; - router.wait(&0, timeout())?.state(State::Leader, "n0 -> leader").await?; + router.wait(&0, timeout())?.state(ServerState::Leader, "n0 -> leader").await?; } router.add_learner(0, 1).await?; @@ -59,17 +59,17 @@ async fn learner_restart() -> Result<()> { router.wait_for_log(&btreeset![0, 1], Some(log_index), None, "write one log").await?; let (node0, _sto0) = router.remove_node(0).await.unwrap(); - assert_node_state(0, &node0, 1, log_index, State::Leader); + assert_node_state(0, &node0, 1, log_index, ServerState::Leader); node0.shutdown().await?; let (node1, sto1) = router.remove_node(1).await.unwrap(); - assert_node_state(0, &node1, 1, log_index, State::Learner); + assert_node_state(0, &node1, 1, log_index, ServerState::Learner); node1.shutdown().await?; // restart node-1, assert the state as expected. let restarted = Raft::new(1, config.clone(), router.clone(), sto1); sleep(Duration::from_secs(2)).await; - assert_node_state(1, &restarted, 1, log_index, State::Learner); + assert_node_state(1, &restarted, 1, log_index, ServerState::Learner); Ok(()) } @@ -79,7 +79,7 @@ fn assert_node_state>( node: &MemRaft, expected_term: u64, expected_log: u64, - state: State, + state: ServerState, ) where C::D: Debug + IntoMemClientRequest, C::R: Debug, diff --git a/openraft/tests/membership/t10_add_learner.rs b/openraft/tests/membership/t10_add_learner.rs index 9b21d44ba..94ce69e68 100644 --- a/openraft/tests/membership/t10_add_learner.rs +++ b/openraft/tests/membership/t10_add_learner.rs @@ -11,7 +11,7 @@ use openraft::LogId; use openraft::Membership; use openraft::RaftLogReader; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -147,7 +147,7 @@ async fn check_learner_after_leader_transfered() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1], None, timeout, "empty").await?; - router.wait_for_state(&btreeset![0, 1], State::Learner, timeout, "empty").await?; + router.wait_for_state(&btreeset![0, 1], ServerState::Learner, timeout, "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. diff --git a/openraft/tests/membership/t15_add_remove_follower.rs b/openraft/tests/membership/t15_add_remove_follower.rs index 606bc793e..bf4391389 100644 --- a/openraft/tests/membership/t15_add_remove_follower.rs +++ b/openraft/tests/membership/t15_add_remove_follower.rs @@ -4,7 +4,7 @@ use std::time::Duration; use anyhow::Result; use maplit::btreeset; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -41,7 +41,7 @@ async fn add_remove_voter() -> Result<()> { log_index += 2; // two member-change logs router.wait_for_log(&cluster_of_4, Some(log_index), timeout(), "removed node-4").await?; - router.wait(&4, timeout())?.state(State::Learner, "").await?; + router.wait(&4, timeout())?.state(ServerState::Learner, "").await?; } tracing::info!("--- write another 100 logs"); diff --git a/openraft/tests/membership/t16_change_membership_cases.rs b/openraft/tests/membership/t16_change_membership_cases.rs index 11428455d..f38d23daa 100644 --- a/openraft/tests/membership/t16_change_membership_cases.rs +++ b/openraft/tests/membership/t16_change_membership_cases.rs @@ -6,7 +6,7 @@ use maplit::btreeset; use memstore::MemNodeId; use openraft::ChangeMembers; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -129,7 +129,7 @@ async fn change_from_to(old: BTreeSet, change_members: ChangeMembers< router .wait(id, timeout())? .metrics( - |x| x.state == State::Learner || x.state == State::Candidate, + |x| x.state == ServerState::Learner || x.state == ServerState::Candidate, format!("node {} only in old, {}", id, mes), ) .await?; diff --git a/openraft/tests/membership/t20_change_membership.rs b/openraft/tests/membership/t20_change_membership.rs index 9e8b41ece..63620fd5a 100644 --- a/openraft/tests/membership/t20_change_membership.rs +++ b/openraft/tests/membership/t20_change_membership.rs @@ -7,7 +7,7 @@ use memstore::MemNodeId; use openraft::error::ChangeMembershipError; use openraft::Config; use openraft::RaftLogReader; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -158,9 +158,9 @@ async fn change_with_turn_not_exist_member_to_learner() -> anyhow::Result<()> { router .wait_for_metrics( &2, - |x| x.state == State::Learner, + |x| x.state == ServerState::Learner, timeout, - &format!("n{}.state -> {:?}", 2, State::Learner), + &format!("n{}.state -> {:?}", 2, ServerState::Learner), ) .await?; diff --git a/openraft/tests/membership/t25_elect_with_new_config.rs b/openraft/tests/membership/t25_elect_with_new_config.rs index 4d41079a3..7ad066d85 100644 --- a/openraft/tests/membership/t25_elect_with_new_config.rs +++ b/openraft/tests/membership/t25_elect_with_new_config.rs @@ -6,7 +6,7 @@ use futures::stream::StreamExt; use maplit::btreeset; use openraft::Config; use openraft::LogIdOptionExt; -use openraft::State; +use openraft::ServerState; use tokio::time::sleep; use crate::fixtures::init_default_ut_tracing; @@ -35,7 +35,7 @@ async fn leader_election_after_changing_0_to_01234() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0], None, None, "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, None, "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. diff --git a/openraft/tests/membership/t30_step_down.rs b/openraft/tests/membership/t30_step_down.rs index c3f9289b9..65e78c65d 100644 --- a/openraft/tests/membership/t30_step_down.rs +++ b/openraft/tests/membership/t30_step_down.rs @@ -6,7 +6,7 @@ use maplit::btreeset; use openraft::Config; use openraft::LeaderId; use openraft::LogId; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -95,7 +95,7 @@ async fn step_down() -> Result<()> { let metrics = router.get_metrics(&0)?; let cfg = &metrics.membership_config.membership; - assert!(metrics.state != State::Leader); + assert!(metrics.state != ServerState::Leader); assert_eq!(metrics.current_term, 1); assert_eq!(metrics.last_log_index, Some(8)); assert_eq!(metrics.last_applied, Some(LogId::new(LeaderId::new(1, 0), 8))); diff --git a/openraft/tests/metrics/t20_metrics_state_machine_consistency.rs b/openraft/tests/metrics/t20_metrics_state_machine_consistency.rs index 53541273e..ea098b62b 100644 --- a/openraft/tests/metrics/t20_metrics_state_machine_consistency.rs +++ b/openraft/tests/metrics/t20_metrics_state_machine_consistency.rs @@ -5,7 +5,7 @@ use anyhow::Result; use maplit::btreeset; use openraft::Config; use openraft::RaftStorageDebug; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -34,7 +34,7 @@ async fn metrics_state_machine_consistency() -> Result<()> { n0.initialize(btreeset! {0}).await?; log_index += 1; - router.wait(&0, timeout())?.state(State::Leader, "n0 -> leader").await?; + router.wait(&0, timeout())?.state(ServerState::Leader, "n0 -> leader").await?; } tracing::info!("--- add one learner"); diff --git a/openraft/tests/metrics/t30_leader_metrics.rs b/openraft/tests/metrics/t30_leader_metrics.rs index c1f043dec..75fcef449 100644 --- a/openraft/tests/metrics/t30_leader_metrics.rs +++ b/openraft/tests/metrics/t30_leader_metrics.rs @@ -12,7 +12,7 @@ use openraft::LeaderId; use openraft::LogId; use openraft::RaftNetwork; use openraft::RaftNetworkFactory; -use openraft::State; +use openraft::ServerState; use openraft::Vote; #[allow(unused_imports)] use pretty_assertions::assert_eq; @@ -49,7 +49,7 @@ async fn leader_metrics() -> Result<()> { let mut log_index = 0; router.wait_for_log(&btreeset![0], None, timeout(), "init").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "init").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "init").await?; router.assert_pristine_cluster().await; @@ -138,9 +138,9 @@ async fn leader_metrics() -> Result<()> { router .wait_for_metrics( &4, - |x| x.state == State::Learner, + |x| x.state == ServerState::Learner, timeout(), - &format!("n{}.state -> {:?}", 4, State::Learner), + &format!("n{}.state -> {:?}", 4, ServerState::Learner), ) .await?; @@ -200,7 +200,7 @@ async fn leader_metrics() -> Result<()> { router .wait_for_metrics( &leader, - |x| x.state != State::Leader || (x.state == State::Leader && x.current_term > 100), + |x| x.state != ServerState::Leader || (x.state == ServerState::Leader && x.current_term > 100), timeout(), &format!("node {} becomes candidate or becomes a new leader", leader,), ) diff --git a/openraft/tests/metrics/t40_metrics_wait.rs b/openraft/tests/metrics/t40_metrics_wait.rs index 578fb8403..eaa69f56d 100644 --- a/openraft/tests/metrics/t40_metrics_wait.rs +++ b/openraft/tests/metrics/t40_metrics_wait.rs @@ -5,7 +5,7 @@ use anyhow::Result; use maplit::btreeset; use openraft::metrics::WaitError; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -29,7 +29,7 @@ async fn metrics_wait() -> Result<()> { let n0 = router.get_raft_handle(&0)?; n0.initialize(cluster.clone()).await?; - router.wait(&0, timeout())?.state(State::Leader, "n0 -> leader").await?; + router.wait(&0, timeout())?.state(ServerState::Leader, "n0 -> leader").await?; } router.wait(&0, None)?.current_leader(0, "become leader").await?; diff --git a/openraft/tests/shutdown.rs b/openraft/tests/shutdown.rs index e042ba103..96b6db565 100644 --- a/openraft/tests/shutdown.rs +++ b/openraft/tests/shutdown.rs @@ -6,7 +6,7 @@ use anyhow::Result; use fixtures::RaftRouter; use maplit::btreeset; use openraft::Config; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; @@ -33,7 +33,7 @@ async fn initialization() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0, 1, 2], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0, 1, 2], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0, 1, 2], ServerState::Learner, timeout(), "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. diff --git a/openraft/tests/singlenode.rs b/openraft/tests/singlenode.rs index 0562e81d3..5d66e5815 100644 --- a/openraft/tests/singlenode.rs +++ b/openraft/tests/singlenode.rs @@ -7,7 +7,7 @@ use maplit::btreeset; use openraft::Config; use openraft::LeaderId; use openraft::LogId; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; @@ -34,7 +34,7 @@ async fn single_node() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held. diff --git a/openraft/tests/snapshot/snapshot_chunk_size.rs b/openraft/tests/snapshot/snapshot_chunk_size.rs index ef07cc2f9..50f489c50 100644 --- a/openraft/tests/snapshot/snapshot_chunk_size.rs +++ b/openraft/tests/snapshot/snapshot_chunk_size.rs @@ -6,8 +6,8 @@ use maplit::btreeset; use openraft::Config; use openraft::LeaderId; use openraft::LogId; +use openraft::ServerState; use openraft::SnapshotPolicy; -use openraft::State; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -40,7 +40,7 @@ async fn snapshot_chunk_size() -> Result<()> { router.new_raft_node(0).await; router.wait_for_log(&btreeset![0], None, timeout(), "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, timeout(), "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, timeout(), "empty").await?; router.initialize_from_single_node(0).await?; log_index += 1; diff --git a/openraft/tests/state_machine/t10_total_order_apply.rs b/openraft/tests/state_machine/t10_total_order_apply.rs index 239330892..ed981c191 100644 --- a/openraft/tests/state_machine/t10_total_order_apply.rs +++ b/openraft/tests/state_machine/t10_total_order_apply.rs @@ -6,7 +6,7 @@ use maplit::btreeset; use openraft::Config; use openraft::LogIdOptionExt; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use tokio::sync::watch; use crate::fixtures::init_default_ut_tracing; @@ -27,7 +27,7 @@ async fn total_order_apply() -> Result<()> { let n0 = router.get_raft_handle(&0)?; n0.initialize(btreeset! {0}).await?; - router.wait(&0, timeout())?.state(State::Leader, "n0 -> leader").await?; + router.wait(&0, timeout())?.state(ServerState::Leader, "n0 -> leader").await?; } tracing::info!("--- add one learner"); diff --git a/openraft/tests/state_machine/t20_state_machine_apply_membership.rs b/openraft/tests/state_machine/t20_state_machine_apply_membership.rs index 91240de1a..43dd14e94 100644 --- a/openraft/tests/state_machine/t20_state_machine_apply_membership.rs +++ b/openraft/tests/state_machine/t20_state_machine_apply_membership.rs @@ -12,7 +12,7 @@ use openraft::LogId; use openraft::LogIdOptionExt; use openraft::Membership; use openraft::RaftStorage; -use openraft::State; +use openraft::ServerState; use crate::fixtures::init_default_ut_tracing; use crate::fixtures::RaftRouter; @@ -35,7 +35,7 @@ async fn state_machine_apply_membership() -> Result<()> { // Assert all nodes are in learner state & have no entries. router.wait_for_log(&btreeset![0], None, None, "empty").await?; - router.wait_for_state(&btreeset![0], State::Learner, None, "empty").await?; + router.wait_for_state(&btreeset![0], ServerState::Learner, None, "empty").await?; router.assert_pristine_cluster().await; // Initialize the cluster, then assert that a stable cluster was formed & held.