diff --git a/core/coms/service/src/config.rs b/core/coms/service/src/config.rs index ab0f38f1178c89b35d88177d9e851e6f0c9b6201..ca776e5e4745704fda21b867c25bc7967a363ad5 100644 --- a/core/coms/service/src/config.rs +++ b/core/coms/service/src/config.rs @@ -13,7 +13,6 @@ #![allow(non_snake_case)] use super::comm::ServiceUnitComm; use super::rentry::{NotifyAccess, SectionService, ServiceCommand, ServiceType}; -use basic::time_util::{USEC_INFINITY, USEC_PER_SEC}; use basic::unit_name::unit_name_to_instance; use core::error::*; use core::exec::ExecCommand; @@ -78,7 +77,6 @@ impl ServiceConfig { } }; *self.data.borrow_mut() = service_config; - self.data.borrow_mut().verify(); let mut unit_specifier_data = UnitSpecifierData::new(); unit_specifier_data.instance = unit_name_to_instance(&self.comm.get_owner_id()); @@ -193,19 +191,6 @@ impl ServiceConfigData { self.Service.set_timeout_stop(time_out); } - pub(self) fn verify(&mut self) { - if self.Service.WatchdogSec >= USEC_INFINITY / USEC_PER_SEC { - self.Service.WatchdogSec = 0; - } else { - self.Service.WatchdogSec *= USEC_PER_SEC; - } - if self.Service.RestartSec >= USEC_INFINITY / USEC_PER_SEC { - self.Service.RestartSec = USEC_PER_SEC; - } else { - self.Service.RestartSec *= USEC_PER_SEC; - } - } - pub(self) fn update_with_specifier_escape(&mut self, unit_specifier_data: &UnitSpecifierData) { specifier_escape_exec_command( &mut self.Service.ExecStart, diff --git a/core/coms/service/src/rentry.rs b/core/coms/service/src/rentry.rs index ad86318b382e581b44ec97192dba12fa151a5999..24d2d47473cef76ebc5e250a468db930e001303a 100644 --- a/core/coms/service/src/rentry.rs +++ b/core/coms/service/src/rentry.rs @@ -32,6 +32,7 @@ use core::exec::{ExecCommand, Rlimit, RuntimeDirectory, StateDirectory, WorkingD use core::rel::{ReDb, ReDbRwTxn, ReDbTable, ReliSwitch, Reliability}; use core::unit::KillMode; +use basic::time_util::USEC_PER_MSEC; use basic::time_util::USEC_PER_SEC; use basic::EXEC_RUNTIME_PREFIX; @@ -230,15 +231,16 @@ fn parse_pidfile(s: &str) -> Result { } } +fn parse_sec(s: &str) -> Result { + basic::time_util::parse_sec(s).context(NixSnafu) +} + fn parse_timeout(s: &str) -> Result { let timeout = s.parse::().unwrap(); if timeout == 0 { return Ok(u64::MAX); } - if timeout >= u64::MAX / USEC_PER_SEC { - return Ok(u64::MAX); - } - Ok(timeout * USEC_PER_SEC) + parse_sec(s) } #[derive(UnitSection, Serialize, Deserialize, Debug, Default, Clone)] @@ -261,7 +263,7 @@ pub struct SectionService { pub ExecCondition: Vec, #[entry(append)] pub Sockets: Vec, - #[entry(default = 0)] + #[entry(default = 0, parser = parse_sec)] pub WatchdogSec: u64, #[entry(parser = parse_pidfile)] pub PIDFile: Option, @@ -274,13 +276,13 @@ pub struct SectionService { pub Restart: ServiceRestart, #[entry(default = ExitStatusSet::default())] pub RestartPreventExitStatus: ExitStatusSet, - #[entry(default = 1)] + #[entry(default = 100 * USEC_PER_MSEC, parser = parse_sec)] pub RestartSec: u64, - #[entry(default = 10000000, parser = parse_timeout)] + #[entry(default = 90 * USEC_PER_SEC, parser = parse_timeout)] pub TimeoutSec: u64, - #[entry(default = 10000000, parser = parse_timeout)] + #[entry(default = 90 * USEC_PER_SEC, parser = parse_timeout)] pub TimeoutStartSec: u64, - #[entry(default = 10000000, parser = parse_timeout)] + #[entry(default = 90 * USEC_PER_SEC, parser = parse_timeout)] pub TimeoutStopSec: u64, // Exec diff --git a/libs/basic/src/time_util.rs b/libs/basic/src/time_util.rs index 39bed5f4e2e758a7fe7b2589c19e1fad7903f41a..c7ab727962b5c636f125b9baa541bad59ff28dbd 100644 --- a/libs/basic/src/time_util.rs +++ b/libs/basic/src/time_util.rs @@ -182,15 +182,15 @@ const TABLE: &[Table] = &[ }, Table { suffix: "minutes", - usec: NSEC_PER_MINUTE, + usec: USEC_PER_MINUTE, }, Table { suffix: "minute", - usec: NSEC_PER_MINUTE, + usec: USEC_PER_MINUTE, }, Table { suffix: "min", - usec: NSEC_PER_MINUTE, + usec: USEC_PER_MINUTE, }, Table { suffix: "months", @@ -317,6 +317,9 @@ mod tests { let u = parse_sec(" .22s ").unwrap(); assert_eq!(u, 220 * USEC_PER_MSEC); + let u = parse_sec("0.5min").unwrap(); + assert_eq!(u, 30 * USEC_PER_SEC); + let u = parse_sec(" .50y ").unwrap(); assert_eq!(u, USEC_PER_YEAR / 2);