Bladeren bron

Create a constructor for RaftState.

Jing Yang 4 jaren geleden
bovenliggende
commit
739230a4f7
3 gewijzigde bestanden met toevoegingen van 20 en 28 verwijderingen
  1. 1 16
      src/daemon_env.rs
  2. 2 12
      src/lib.rs
  3. 17 0
      src/raft_state.rs

+ 1 - 16
src/daemon_env.rs

@@ -253,21 +253,6 @@ mod tests {
         assert!(Arc::ptr_eq(&local_env.data, &daemon_env.data));
     }
 
-    fn make_raft_state() -> RaftState<i32> {
-        RaftState {
-            current_term: Term(0),
-            voted_for: None,
-            log: crate::log_array::LogArray::create(),
-            commit_index: 0,
-            last_applied: 0,
-            next_index: vec![1; 1],
-            match_index: vec![0; 1],
-            current_step: vec![0; 1],
-            state: State::Follower,
-            leader_id: Peer(0),
-        }
-    }
-
     #[test]
     fn test_for_thread() {
         let daemon_env = DaemonEnv::create();
@@ -302,7 +287,7 @@ mod tests {
         let daemon_env = DaemonEnv::create();
         {
             let _guard = daemon_env.for_scope();
-            let state = make_raft_state();
+            let state = RaftState::<i32>::create(1, Peer(0));
             check_or_record!(
                 0 > 1,
                 ErrorKind::SnapshotAfterLogEnd(1),

+ 2 - 12
src/lib.rs

@@ -148,18 +148,8 @@ where
         request_snapshot: impl RequestSnapshotFnMut,
     ) -> Self {
         let peer_size = peers.len();
-        let mut state = RaftState {
-            current_term: Term(0),
-            voted_for: None,
-            log: log_array::LogArray::create(),
-            commit_index: 0,
-            last_applied: 0,
-            next_index: vec![1; peer_size],
-            match_index: vec![0; peer_size],
-            current_step: vec![0; peer_size],
-            state: State::Follower,
-            leader_id: Peer(me),
-        };
+        assert!(peer_size > me, "My index should be smaller than peer size.");
+        let mut state = RaftState::create(peer_size, Peer(me));
 
         if let Ok(persisted_state) =
             PersistedRaftState::try_from(persister.read_state())

+ 17 - 0
src/raft_state.rs

@@ -27,6 +27,23 @@ pub(crate) struct RaftState<Command> {
     pub leader_id: Peer,
 }
 
+impl<Command: Default> RaftState<Command> {
+    pub fn create(peer_size: usize, me: Peer) -> Self {
+        RaftState {
+            current_term: Term(0),
+            voted_for: None,
+            log: crate::log_array::LogArray::create(),
+            commit_index: 0,
+            last_applied: 0,
+            next_index: vec![1; peer_size],
+            match_index: vec![0; peer_size],
+            current_step: vec![0; peer_size],
+            state: State::Follower,
+            leader_id: me,
+        }
+    }
+}
+
 impl<Command: Clone> RaftState<Command> {
     pub fn persisted_state(&self) -> PersistedRaftState<Command> {
         self.into()