tools/systemd/time: convert the resulting timestamp into an option

we want to use dates for the calendarspec, and with that there are some
impossible combinations that cannot be detected during parsing
(e.g. some datetimes do not exist in some timezones, and the timezone
can change after setting the schedule)

so finding no timestamp is not an error anymore but a valid result

we omit logging in that case (since it is not an error anymore)

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak authored and Dietmar Maurer committed 2020-09-04 15:28:05 +02:00
1 parent cb73b2d69c
commit 15ec790a40
3 files changed
+18 -10

No files matched your search

+10 -6
View File
@@ -1,4 +1,4 @@
use anyhow::{bail, Error};
use anyhow::Error;
use bitflags::bitflags;
pub use super::parse_time::*;
@@ -155,7 +155,7 @@ pub fn compute_next_event(
event: &CalendarEvent,
last: i64,
utc: bool,
) -> Result<i64, Error> {
) -> Result<Option<i64>, Error> {
let last = last + 1; // at least one second later
@@ -166,8 +166,9 @@ pub fn compute_next_event(
let mut count = 0;
loop {
if count > 1000 { // should not happen
bail!("unable to compute next calendar event");
// cancel after 1000 loops
if count > 1000 {
return Ok(None);
} else {
count += 1;
}
@@ -235,13 +236,15 @@ pub fn compute_next_event(
}
let next = t.into_epoch()?;
return Ok(next)
return Ok(Some(next))
}
}
#[cfg(test)]
mod test {
use anyhow::bail;
use super::*;
use proxmox::tools::time::*;
@@ -268,7 +271,7 @@ mod test {
};
match compute_next_event(&event, last, true) {
Ok(next) => {
Ok(Some(next)) => {
if next == expect {
println!("next {:?} => {}", event, next);
} else {
@@ -276,6 +279,7 @@ mod test {
event, gmtime(next), gmtime(expect));
}
}
Ok(None) => bail!("next {:?} failed to find a timestamp", event),
Err(err) => bail!("compute next for '{}' failed - {}", v, err),
}