Просмотр исходного кода

raft: fix datastore path check

ghassmo 4 лет назад
Родитель
Сommit
2d629a1c56
1 измененных файлов с 13 добавлено и 24 удалено
  1. 13 24
      src/raft/consensus.rs

+ 13 - 24
src/raft/consensus.rs

@@ -105,24 +105,13 @@ impl<T: Decodable + Encodable + Clone> Raft<T> {
             return Err(Error::ParseFailed("unable to parse pathbuf to str"))
         };
 
-        let db_path_str = db_path.to_str().unwrap();
-
-        let mut current_term = 0;
-        let mut voted_for = None;
-        let mut logs = Logs(vec![]);
-        let mut commit_length = 0;
-
-        let datastore = if db_path.exists() {
-            let datastore = DataStore::new(db_path_str)?;
-            current_term = datastore.current_term.get_last()?.unwrap_or(0);
-            voted_for = datastore.voted_for.get_last()?.flatten();
-            // TODO using sled instead of memory
-            logs = Logs(datastore.logs.get_all()?);
-            commit_length = datastore.commits.get_all()?.len() as u64;
-            datastore
-        } else {
-            DataStore::new(db_path_str)?
-        };
+        let datastore = DataStore::new(db_path.to_str().unwrap())?;
+
+        // load from sled datastore
+        let current_term = datastore.current_term.get_last()?.unwrap_or(0);
+        let voted_for = datastore.voted_for.get_last()?.flatten();
+        let logs = Logs(datastore.logs.get_all()?);
+        let commit_length = datastore.commits.get_all()?.len() as u64;
 
         // broadcasting channels
         let broadcast_msg = async_channel::unbounded::<T>();
@@ -689,12 +678,12 @@ impl<T: Decodable + Encodable + Clone> Raft<T> {
         self.broadcast_commits.0.send(commit.clone()).await?;
         self.datastore.commits.insert(&commit)
     }
-    fn push_log(&mut self, i: &Log) -> Result<()> {
-        self.logs.push(i);
-        self.datastore.logs.insert(i)
+    fn push_log(&mut self, log: &Log) -> Result<()> {
+        self.logs.push(log);
+        self.datastore.logs.insert(log)
     }
-    fn push_logs(&mut self, i: &Logs) -> Result<()> {
-        self.logs = i.clone();
-        self.datastore.logs.wipe_insert_all(&i.to_vec())
+    fn push_logs(&mut self, logs: &Logs) -> Result<()> {
+        self.logs = logs.clone();
+        self.datastore.logs.wipe_insert_all(&logs.to_vec())
     }
 }