From 6ff84db232b4e81cb7ee2166aded6224f3ee26ed Mon Sep 17 00:00:00 2001 From: Tim Bruijnzeels Date: Mon, 25 Jul 2022 08:56:22 -0400 Subject: [PATCH] Make data dir lock opt-in (#856) --- src/daemon/config.rs | 5 +++++ src/daemon/http/server.rs | 26 +++++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/daemon/config.rs b/src/daemon/config.rs index f81618bc..cabb8c72 100644 --- a/src/daemon/config.rs +++ b/src/daemon/config.rs @@ -372,6 +372,9 @@ pub struct Config { #[serde(default = "ConfigDefaults::data_dir")] pub data_dir: PathBuf, + #[serde(default)] // default is false + pub data_dir_use_lock: bool, + #[serde(default = "ConfigDefaults::always_recover_data")] pub always_recover_data: bool, @@ -783,6 +786,7 @@ impl Config { let https_mode = HttpsMode::Generate; let data_dir = data_dir.to_path_buf(); + let data_dir_use_lock = true; // ensure we touch this in tests let always_recover_data = false; let log_level = LevelFilter::Debug; @@ -903,6 +907,7 @@ impl Config { port, https_mode, data_dir, + data_dir_use_lock, always_recover_data, pid_file, service_uri: None, diff --git a/src/daemon/http/server.rs b/src/daemon/http/server.rs index 2a769b34..52cc4da4 100644 --- a/src/daemon/http/server.rs +++ b/src/daemon/http/server.rs @@ -113,7 +113,11 @@ fn test_data_dirs_or_die(config: &Config) { } pub async fn start_krill_daemon(config: Arc) -> Result<(), Error> { - let lock = KrillLock::create(&config); + let optional_lock = if config.data_dir_use_lock { + Some(KrillLock::create(&config)) + } else { + None + }; write_pid_file_or_die(&config); test_data_dirs_or_die(&config); @@ -187,14 +191,18 @@ pub async fn start_krill_daemon(config: Arc) -> Result<(), Error> { let scheduler_task = scheduler.run(); - try_join!( - server, - scheduler_task, - lock.handle_ctrl_c(), - #[cfg(unix)] - lock.handle_sig_term() - ) - .map(|_| ()) + if let Some(lock) = optional_lock { + try_join!( + server, + scheduler_task, + lock.handle_ctrl_c(), + #[cfg(unix)] + lock.handle_sig_term() + ) + .map(|_| ()) + } else { + try_join!(server, scheduler_task,).map(|_| ()) + } } struct RequestLogger {