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

raft: flush sled datastore once receive exit signal

ghassmo 4 лет назад
Родитель
Сommit
ed152c8cb5
2 измененных файлов с 7 добавлено и 0 удалено
  1. 6 0
      src/raft/datastore.rs
  2. 1 0
      src/raft/raft.rs

+ 6 - 0
src/raft/datastore.rs

@@ -1,5 +1,6 @@
 use std::marker::PhantomData;
 
+use log::debug;
 use sled::Batch;
 
 use crate::{
@@ -35,6 +36,11 @@ impl<T: Encodable + Decodable> DataStore<T> {
 
         Ok(Self { _db, logs, commits, commits_length, voted_for, current_term })
     }
+    pub async fn cancel(&self) -> Result<()> {
+        debug!(target: "raft", "DataStore flush");
+        self._db.flush_async().await?;
+        Ok(())
+    }
 }
 
 pub struct DataTree<T> {

+ 1 - 0
src/raft/raft.rs

@@ -216,6 +216,7 @@ impl<T: Decodable + Encodable + Clone> Raft<T> {
         load_ips_task.cancel().await;
         p2p_recv_task.cancel().await;
         p2p_task.cancel().await;
+        self.datastore.cancel().await?;
         Ok(())
     }