Bladeren bron

Remove DropGuard and use scopeguard.

Jing Yang 5 jaren geleden
bovenliggende
commit
1ba448e33f
6 gewijzigde bestanden met toevoegingen van 22 en 39 verwijderingen
  1. 1 0
      Cargo.toml
  2. 0 16
      src/utils.rs
  3. 8 6
      tests/agreement_tests.rs
  4. 0 5
      tests/config/mod.rs
  5. 4 2
      tests/election_tests.rs
  6. 9 10
      tests/persist_tests.rs

+ 1 - 0
Cargo.toml

@@ -24,3 +24,4 @@ tokio = { version = "0.3", features = ["rt-multi-thread", "time", "parking_lot"]
 [dev-dependencies]
 anyhow = "1.0"
 futures = { version = "0.3.5", features = ["thread-pool"] }
+scopeguard = "1.1.0"

+ 0 - 16
src/utils.rs

@@ -27,19 +27,3 @@ where
         format!("Timed out after {} retries", max_retry),
     ))
 }
-
-pub struct DropGuard<F: FnOnce()> {
-    task: Option<F>,
-}
-
-impl<F: FnOnce()> DropGuard<F> {
-    pub fn new(task: F) -> Self {
-        Self { task: Some(task) }
-    }
-}
-
-impl<F: FnOnce()> Drop for DropGuard<F> {
-    fn drop(&mut self) {
-        (self.task.take().unwrap())();
-    }
-}

+ 8 - 6
tests/agreement_tests.rs

@@ -3,6 +3,8 @@ extern crate anyhow;
 extern crate bytes;
 extern crate labrpc;
 extern crate ruaft;
+#[macro_use]
+extern crate scopeguard;
 
 use rand::{thread_rng, Rng};
 
@@ -12,7 +14,7 @@ mod config;
 fn basic_agreement() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): basic agreement");
     for index in 1..4 {
@@ -35,7 +37,7 @@ fn basic_agreement() -> config::Result<()> {
 fn fail_agree() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): agreement despite follower disconnection");
 
@@ -68,7 +70,7 @@ fn fail_agree() -> config::Result<()> {
 fn fail_no_agree() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): no agreement if too many followers disconnect");
 
@@ -117,7 +119,7 @@ fn fail_no_agree() -> config::Result<()> {
 fn rejoin() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): rejoin of partitioned leader");
 
@@ -157,7 +159,7 @@ fn rejoin() -> config::Result<()> {
 fn backup() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin(
         "Test (2B): leader backs up quickly over incorrect follower logs",
@@ -234,7 +236,7 @@ fn backup() -> config::Result<()> {
 fn count() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2B): RPC counts aren't too high");
 

+ 0 - 5
tests/config/mod.rs

@@ -8,7 +8,6 @@ use rand::{thread_rng, Rng};
 use tokio::time::Duration;
 
 use ruaft::rpcs::register_server;
-use ruaft::utils::DropGuard;
 use ruaft::{Persister, Raft, RpcClient};
 
 pub mod persister;
@@ -370,10 +369,6 @@ impl Config {
             }
         }
     }
-
-    pub fn deferred_cleanup(&self) -> impl Drop + '_ {
-        DropGuard::new(move || self.cleanup())
-    }
 }
 
 impl Config {

+ 4 - 2
tests/election_tests.rs

@@ -3,6 +3,8 @@ extern crate anyhow;
 extern crate bytes;
 extern crate labrpc;
 extern crate ruaft;
+#[macro_use]
+extern crate scopeguard;
 
 mod config;
 
@@ -10,7 +12,7 @@ mod config;
 fn initial_election() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let guard = ruaft::utils::DropGuard::new(|| cfg.cleanup());
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2A): initial election");
 
@@ -37,7 +39,7 @@ fn initial_election() -> config::Result<()> {
 fn re_election() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2A): election after network failure");
 

+ 9 - 10
tests/persist_tests.rs

@@ -3,6 +3,8 @@ extern crate anyhow;
 extern crate bytes;
 extern crate labrpc;
 extern crate ruaft;
+#[macro_use]
+extern crate scopeguard;
 
 use std::sync::atomic::AtomicBool;
 use std::sync::atomic::Ordering;
@@ -16,7 +18,7 @@ mod config;
 fn persist() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): basic persistence");
 
@@ -65,7 +67,7 @@ fn persist() -> config::Result<()> {
 fn persist2() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): more persistence");
 
@@ -115,7 +117,7 @@ fn persist2() -> config::Result<()> {
 fn persist3() -> config::Result<()> {
     const SERVERS: usize = 3;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin(
         "Test (2C): partitioned leader and one follower crash, leader restarts",
@@ -149,7 +151,7 @@ fn persist3() -> config::Result<()> {
 fn figure8() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): Figure 8");
 
@@ -207,13 +209,11 @@ fn figure8() -> config::Result<()> {
 fn unreliable_agree() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = Arc::new(config::make_config(SERVERS, true));
-    let guard_cfg = cfg.clone();
-    let _guard = guard_cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): unreliable agreement");
 
     let mut handles = vec![];
-    let cfg = Arc::new(cfg);
     for iters in 1..50 {
         for j in 0..4 {
             let cfg = cfg.clone();
@@ -241,7 +241,7 @@ fn unreliable_agree() -> config::Result<()> {
 fn figure8_unreliable() -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = config::make_config(SERVERS, false);
-    let _guard = cfg.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     cfg.begin("Test (2C): Figure 8 (unreliable)");
 
@@ -304,8 +304,7 @@ fn figure8_unreliable() -> config::Result<()> {
 fn internal_churn(unreliable: bool) -> config::Result<()> {
     const SERVERS: usize = 5;
     let cfg = Arc::new(config::make_config(SERVERS, false));
-    let cfg_clone = cfg.clone();
-    let _guard = cfg_clone.deferred_cleanup();
+    defer!(cfg.cleanup());
 
     if unreliable {
         cfg.begin("Test (2C): unreliable churn");