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

bin/darkirc: configurable dag sync attempt and retries

dasman 2 лет назад
Родитель
Сommit
d8fe390e6d
2 измененных файлов с 20 добавлено и 5 удалено
  1. 6 0
      bin/darkirc/darkirc_config.toml
  2. 14 5
      bin/darkirc/src/main.rs

+ 6 - 0
bin/darkirc/darkirc_config.toml

@@ -30,6 +30,12 @@ autojoin = [
 ## (optional, but once configured, it is required from the IRC client side)
 #password = "CHANGE_ME"
 
+## Number of attempts to sync the DAG.
+#sync_attempts = 5
+
+## Number of seconds to wait before trying again if sync fails.
+#sync_timeout = 10
+
 # Log to file. Off by default.
 #log = "/tmp/darkirc.log"
 # Set log level. 1 is info (default), 2 is debug, 3 is trace

+ 14 - 5
bin/darkirc/src/main.rs

@@ -100,9 +100,18 @@ struct Args {
     #[structopt(long)]
     get_chacha_pubkey: Option<String>,
 
+    /// Flag to skip syncing the DAG (no history).
     #[structopt(long)]
     skip_dag_sync: bool,
 
+    /// Number of attempts to sync the DAG.
+    #[structopt(long, default_value = "5")]
+    sync_attempts: u8,
+
+    /// Number of seconds to wait before trying again if sync fails.
+    #[structopt(long, default_value = "10")]
+    sync_timeout: u8,
+
     /// P2P network settings
     #[structopt(flatten)]
     net: SettingsOpt,
@@ -309,22 +318,22 @@ async fn realmain(args: Args, ex: Arc<Executor<'static>>) -> Result<()> {
     info!("Waiting for some P2P connections...");
     sleep(5).await;
 
-    // We'll attempt to sync 5 times
+    // We'll attempt to sync {sync_attempts} times
     if !args.skip_dag_sync {
-        for i in 1..=6 {
+        for i in 1..=args.sync_attempts {
             info!("Syncing event DAG (attempt #{})", i);
             match event_graph.dag_sync().await {
                 Ok(()) => break,
                 Err(e) => {
-                    if i == 6 {
+                    if i == args.sync_attempts {
                         error!("Failed syncing DAG. Exiting.");
                         p2p.stop().await;
                         return Err(Error::DagSyncFailed)
                     } else {
                         // TODO: Maybe at this point we should prune or something?
                         // TODO: Or maybe just tell the user to delete the DAG from FS.
-                        error!("Failed syncing DAG ({}), retrying in 10s...", e);
-                        sleep(10).await;
+                        error!("Failed syncing DAG ({}), retrying in {}s...", e, args.sync_timeout);
+                        sleep(args.sync_timeout.into()).await;
                     }
                 }
             }