Procházet zdrojové kódy

Relax the requirement for RPC handlers: Arc to AsRef.

Jing Yang před 4 roky
rodič
revize
67c7a2e4f6
2 změnil soubory, kde provedl 6 přidání a 4 odebrání
  1. 4 3
      src/rpcs.rs
  2. 2 1
      tests/config/mod.rs

+ 4 - 3
src/rpcs.rs

@@ -1,5 +1,3 @@
-use std::sync::Arc;
-
 use labrpc::{Client, Network, ReplyMessage, RequestMessage, Server};
 use parking_lot::Mutex;
 
@@ -119,9 +117,10 @@ impl RpcClient {
 
 pub fn register_server<
     Command: 'static + Clone + Serialize + DeserializeOwned + Default,
+    R: 'static + AsRef<Raft<Command>> + Clone,
     S: AsRef<str>,
 >(
-    raft: Arc<Raft<Command>>,
+    raft: R,
     name: S,
     network: &Mutex<Network>,
 ) -> std::io::Result<()> {
@@ -160,6 +159,8 @@ pub fn register_server<
 
 #[cfg(test)]
 mod tests {
+    use std::sync::Arc;
+
     use bytes::Bytes;
 
     use crate::{Peer, Term};

+ 2 - 1
tests/config/mod.rs

@@ -1,4 +1,5 @@
 use std::collections::HashMap;
+use std::rc::Rc;
 use std::sync::Arc;
 use std::time::Instant;
 
@@ -319,7 +320,7 @@ impl Config {
         );
         self.state.lock().rafts[index].replace(raft.clone());
 
-        let raft = Arc::new(raft);
+        let raft = Rc::new(raft);
         register_server(raft, Self::server_name(index), self.network.as_ref())?;
         Ok(())
     }