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

Upgrade durio to the new storage system.

Jing Yang 2 лет назад
Родитель
Сommit
bca6f94695
4 измененных файлов с 73 добавлено и 20 удалено
  1. 1 1
      durio/src/main.rs
  2. 0 16
      durio/src/persister.rs
  3. 3 3
      durio/src/run.rs
  4. 69 0
      durio/src/storage.rs

+ 1 - 1
durio/src/main.rs

@@ -13,9 +13,9 @@ use crate::kv_service::create_async_clerk;
 use crate::run::run_kv_instance;
 use crate::run::run_kv_instance;
 
 
 mod kv_service;
 mod kv_service;
-mod persister;
 mod raft_service;
 mod raft_service;
 mod run;
 mod run;
+mod storage;
 mod utils;
 mod utils;
 
 
 #[derive(Deserialize, Serialize)]
 #[derive(Deserialize, Serialize)]

+ 0 - 16
durio/src/persister.rs

@@ -1,16 +0,0 @@
-#[derive(Default)]
-pub struct DoNothingPersister {}
-
-impl ruaft::Persister for DoNothingPersister {
-    fn read_state(&self) -> bytes::Bytes {
-        bytes::Bytes::new()
-    }
-
-    fn save_state(&self, _data: bytes::Bytes) {}
-
-    fn state_size(&self) -> usize {
-        0
-    }
-
-    fn save_snapshot_and_state(&self, _state: bytes::Bytes, _snapshot: &[u8]) {}
-}

+ 3 - 3
durio/src/run.rs

@@ -4,8 +4,8 @@ use std::sync::Arc;
 use kvraft::KVServer;
 use kvraft::KVServer;
 
 
 use crate::kv_service::start_kv_service_server;
 use crate::kv_service::start_kv_service_server;
-use crate::persister::DoNothingPersister;
 use crate::raft_service::{start_raft_service_server, LazyRaftServiceClient};
 use crate::raft_service::{start_raft_service_server, LazyRaftServiceClient};
+use crate::storage::DoNothingRaftStorage;
 
 
 pub(crate) async fn run_kv_instance(
 pub(crate) async fn run_kv_instance(
     addr: SocketAddr,
     addr: SocketAddr,
@@ -19,9 +19,9 @@ pub(crate) async fn run_kv_instance(
         remote_rafts.push(LazyRaftServiceClient::new(raft_peer));
         remote_rafts.push(LazyRaftServiceClient::new(raft_peer));
     }
     }
 
 
-    let persister = DoNothingPersister::default();
+    let storage = DoNothingRaftStorage::default();
 
 
-    let kv_server = KVServer::new(remote_rafts, me, persister, None);
+    let kv_server = KVServer::new(remote_rafts, me, storage);
     let raft = kv_server.raft().clone();
     let raft = kv_server.raft().clone();
 
 
     start_raft_service_server(local_raft_peer, raft).await?;
     start_raft_service_server(local_raft_peer, raft).await?;

+ 69 - 0
durio/src/storage.rs

@@ -0,0 +1,69 @@
+use ruaft::storage::{
+    RaftLogEntryRef, RaftStorageMonitorTrait, RaftStoragePersisterTrait,
+    RaftStorageTrait, RaftStoredState,
+};
+use ruaft::{Index, Term};
+
+#[derive(Default)]
+pub struct DoNothingRaftStorage;
+
+impl RaftStorageTrait for DoNothingRaftStorage {
+    type RaftStoragePersister<LogEntry: RaftLogEntryRef> =
+        DoNothingRaftStoragePersister;
+    type RaftStorageMonitor = DoNothingRaftStorageMonitor;
+
+    fn persister<LogEntry>(
+        self,
+    ) -> std::sync::Arc<DoNothingRaftStoragePersister>
+    where
+        LogEntry: RaftLogEntryRef,
+    {
+        std::sync::Arc::new(DoNothingRaftStoragePersister)
+    }
+
+    fn read_state(&self) -> std::io::Result<RaftStoredState> {
+        Ok(RaftStoredState {
+            current_term: Term(0),
+            voted_for: "".to_string(),
+            log: vec![],
+            snapshot_index: 0,
+            snapshot_term: Term(0),
+            snapshot: vec![],
+        })
+    }
+
+    fn log_compaction_required(&self) -> bool {
+        false
+    }
+
+    fn monitor(&self) -> DoNothingRaftStorageMonitor {
+        DoNothingRaftStorageMonitor
+    }
+}
+
+pub struct DoNothingRaftStorageMonitor;
+
+impl RaftStorageMonitorTrait for DoNothingRaftStorageMonitor {
+    fn should_compact_log_now(&self) -> bool {
+        return false;
+    }
+}
+
+pub struct DoNothingRaftStoragePersister;
+
+impl<LogEntry: RaftLogEntryRef> RaftStoragePersisterTrait<LogEntry>
+    for DoNothingRaftStoragePersister
+{
+    fn save_term_vote(&self, _term: Term, _voted_for: String) {}
+
+    fn append_one_entry(&self, _entry: &LogEntry) {}
+
+    fn append_entries<'a, LogEntryList>(&self, _entries: LogEntryList)
+    where
+        LogEntry: 'a,
+        LogEntryList: IntoIterator<Item = &'a LogEntry>,
+    {
+    }
+
+    fn update_snapshot(&self, _index: Index, _term: Term, _snapshot: &[u8]) {}
+}