]> git.proxmox.com Git - proxmox-backup.git/commitdiff
daemon: rename method, endless loop, bail on exec error
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 11 Nov 2020 08:55:36 +0000 (09:55 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 11 Nov 2020 09:14:01 +0000 (10:14 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/tools/daemon.rs

index 63eb6dee79285e7cd28a12d0985eb7812e8c0323..6bb4a41bce5a90246b6ddda5943f1cae020e4dee 100644 (file)
@@ -305,30 +305,34 @@ where
 
     // FIXME: this is a hack, replace with sd_notify_barrier when available
     if server::is_reload_request() {
-        check_service_is_active(service_name).await?;
+        wait_service_is_active(service_name).await?;
     }
 
     log::info!("daemon shut down...");
     Ok(())
 }
 
-pub async fn check_service_is_active(service: &str) -> Result<(), Error> {
-    for _ in 0..5 {
-        tokio::time::delay_for(std::time::Duration::new(5, 0)).await;
-        if let Ok(output) = tokio::process::Command::new("systemctl")
+// hack, do not use if unsure!
+async fn wait_service_is_active(service: &str) -> Result<(), Error> {
+    tokio::time::delay_for(std::time::Duration::new(1, 0)).await;
+    loop {
+        let text = match tokio::process::Command::new("systemctl")
             .args(&["is-active", service])
             .output()
             .await
         {
-            if let Ok(text) = String::from_utf8(output.stdout) {
-                if text.trim().trim_start() != "reloading" {
-                    return Ok(());
-                }
-            }
+            Ok(output) => match String::from_utf8(output.stdout) {
+                Ok(text) => text,
+                Err(err) => bail!("output of 'systemctl is-active' not valid UTF-8 - {}", err),
+            },
+            Err(err) => bail!("executing 'systemctl is-active' failed - {}", err),
+        };
+
+        if text.trim().trim_start() != "reloading" {
+            return Ok(());
         }
+        tokio::time::delay_for(std::time::Duration::new(5, 0)).await;
     }
-
-    Ok(())
 }
 
 #[link(name = "systemd")]