Переглянути джерело

Tweak the KVServer API to avoid clones.

Jing Yang 4 роки тому
батько
коміт
85fa0fd7c6
2 змінених файлів з 4 додано та 4 видалено
  1. 3 3
      kvraft/src/server.rs
  2. 1 1
      test_configs/src/kvraft/config.rs

+ 3 - 3
kvraft/src/server.rs

@@ -426,8 +426,8 @@ impl KVServer {
         self.me.load(Ordering::Relaxed)
     }
 
-    pub fn raft(&self) -> Raft<UniqueKVOp> {
-        self.rf.clone()
+    pub fn raft(&self) -> &Raft<UniqueKVOp> {
+        &self.rf
     }
 
     pub fn kill(self: Arc<Self>) {
@@ -439,7 +439,7 @@ impl KVServer {
             result_holder.condvar.notify_all();
         }
 
-        let rf = self.raft();
+        let rf = self.raft().clone();
         // We must drop self to remove the only clone of raft, so that
         // `rf.kill()` does not block.
         drop(self);

+ 1 - 1
test_configs/src/kvraft/config.rs

@@ -58,7 +58,7 @@ impl Config {
             KVServer::new(clients, index, persister, Some(self.maxraftstate));
         self.state.lock().kv_servers[index].replace(kv.clone());
 
-        let raft = std::rc::Rc::new(kv.raft());
+        let raft = std::rc::Rc::new(kv.raft().clone());
 
         register_server(raft, Self::server_name(index), self.network.as_ref())?;