[pbs-devel] [PATCH proxmox-backup v2 01/11] tools/systemd/tm_editor: remove TMChanges optimization

Dominik Csapak d.csapak at proxmox.com
Fri Sep 4 14:33:24 CEST 2020


while it was correct, there was no measurable speed gain
(a benchmark yielded 2.8 ms for a spec that did not find a timestamp either way)
so remove it for simpler code

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 src/tools/systemd/time.rs      | 24 ++++++++----------------
 src/tools/systemd/tm_editor.rs | 33 +--------------------------------
 2 files changed, 9 insertions(+), 48 deletions(-)

diff --git a/src/tools/systemd/time.rs b/src/tools/systemd/time.rs
index 773a1509..2a1bf8a3 100644
--- a/src/tools/systemd/time.rs
+++ b/src/tools/systemd/time.rs
@@ -172,12 +172,10 @@ pub fn compute_next_event(
             count += 1;
         }
 
-        if !all_days && t.changes.contains(TMChanges::WDAY) { // match day first
+        if !all_days { // match day first
             let day_num = t.day_num();
             let day = WeekDays::from_bits(1<<day_num).unwrap();
-            if event.days.contains(day) {
-                t.changes.remove(TMChanges::WDAY);
-            } else {
+            if !event.days.contains(day) {
                 if let Some(n) = ((day_num+1)..7)
                     .find(|d| event.days.contains(WeekDays::from_bits(1<<d).unwrap()))
                 {
@@ -193,11 +191,9 @@ pub fn compute_next_event(
         }
 
         // this day
-        if !event.hour.is_empty() && t.changes.contains(TMChanges::HOUR) {
+        if !event.hour.is_empty() {
             let hour = t.hour() as u32;
-            if DateTimeValue::list_contains(&event.hour, hour) {
-                t.changes.remove(TMChanges::HOUR);
-            } else {
+            if !DateTimeValue::list_contains(&event.hour, hour) {
                 if let Some(n) = DateTimeValue::find_next(&event.hour, hour) {
                     // test next hour
                     t.set_time(n as libc::c_int, 0, 0);
@@ -211,11 +207,9 @@ pub fn compute_next_event(
         }
 
         // this hour
-        if !event.minute.is_empty()  && t.changes.contains(TMChanges::MIN) {
+        if !event.minute.is_empty() {
             let minute = t.min() as u32;
-            if DateTimeValue::list_contains(&event.minute, minute) {
-                t.changes.remove(TMChanges::MIN);
-            } else {
+            if !DateTimeValue::list_contains(&event.minute, minute) {
                 if let Some(n) = DateTimeValue::find_next(&event.minute, minute) {
                     // test next minute
                     t.set_min_sec(n as libc::c_int, 0);
@@ -229,11 +223,9 @@ pub fn compute_next_event(
         }
 
         // this minute
-        if !event.second.is_empty() && t.changes.contains(TMChanges::SEC) {
+        if !event.second.is_empty() {
             let second = t.sec() as u32;
-            if DateTimeValue::list_contains(&event.second, second) {
-                t.changes.remove(TMChanges::SEC);
-            } else {
+            if !DateTimeValue::list_contains(&event.second, second) {
                 if let Some(n) = DateTimeValue::find_next(&event.second, second) {
                     // test next second
                     t.set_sec(n as libc::c_int);
diff --git a/src/tools/systemd/tm_editor.rs b/src/tools/systemd/tm_editor.rs
index ef8bcd2c..1e8e4d07 100644
--- a/src/tools/systemd/tm_editor.rs
+++ b/src/tools/systemd/tm_editor.rs
@@ -1,25 +1,10 @@
 use anyhow::Error;
-use bitflags::bitflags;
 
 use proxmox::tools::time::*;
 
-bitflags!{
-    #[derive(Default)]
-    pub struct TMChanges: u8 {
-        const SEC = 1;
-        const MIN = 2;
-        const HOUR = 4;
-        const MDAY = 8;
-        const MON = 16;
-        const YEAR = 32;
-        const WDAY = 64;
-    }
-}
-
 pub struct TmEditor {
     utc: bool,
     t: libc::tm,
-    pub changes: TMChanges,
 }
 
 fn is_leap_year(year: libc::c_int) -> bool {
@@ -45,7 +30,7 @@ impl TmEditor {
     pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
         let mut t = if utc { gmtime(epoch)? } else { localtime(epoch)? };
         t.tm_year += 1900; // real years for clarity
-        Ok(Self { utc, t, changes: TMChanges::all() })
+        Ok(Self { utc, t })
     }
 
     pub fn into_epoch(mut self) -> Result<i64, Error> {
@@ -60,11 +45,9 @@ impl TmEditor {
             self.t.tm_hour = 0;
             self.t.tm_min = 0;
             self.t.tm_sec = 0;
-            self.changes.insert(TMChanges::HOUR|TMChanges::MIN|TMChanges::SEC);
         }
         self.t.tm_mday += days;
         self.t.tm_wday += days;
-        self.changes.insert(TMChanges::MDAY|TMChanges::WDAY);
         self.wrap_time();
     }
 
@@ -81,14 +64,12 @@ impl TmEditor {
         self.t.tm_hour = hour;
         self.t.tm_min = min;
         self.t.tm_sec = sec;
-        self.changes.insert(TMChanges::HOUR|TMChanges::MIN|TMChanges::SEC);
         self.wrap_time();
     }
 
     pub fn set_min_sec(&mut self, min: libc::c_int, sec: libc::c_int) {
         self.t.tm_min = min;
         self.t.tm_sec = sec;
-        self.changes.insert(TMChanges::MIN|TMChanges::SEC);
         self.wrap_time();
     }
 
@@ -98,14 +79,12 @@ impl TmEditor {
         if self.t.tm_sec >= 60 {
             self.t.tm_min += self.t.tm_sec / 60;
             self.t.tm_sec %= 60;
-            self.changes.insert(TMChanges::SEC|TMChanges::MIN);
         }
 
         // min: 0..59
         if self.t.tm_min >= 60 {
             self.t.tm_hour += self.t.tm_min / 60;
             self.t.tm_min %= 60;
-            self.changes.insert(TMChanges::MIN|TMChanges::HOUR);
        }
 
         // hour: 0..23
@@ -113,7 +92,6 @@ impl TmEditor {
             self.t.tm_mday += self.t.tm_hour / 24;
             self.t.tm_wday += self.t.tm_hour / 24;
             self.t.tm_hour %= 24;
-            self.changes.insert(TMChanges::HOUR|TMChanges::MDAY|TMChanges::WDAY);
         }
 
         // Translate to 0..($days_in_mon-1)
@@ -124,7 +102,6 @@ impl TmEditor {
 	    // Wrap one month
 	    self.t.tm_mday -= days_in_mon;
 	    self.t.tm_mon += 1;
-            self.changes.insert(TMChanges::MDAY|TMChanges::WDAY|TMChanges::MON);
         }
 
         // Translate back to 1..$days_in_mon
@@ -134,7 +111,6 @@ impl TmEditor {
         if self.t.tm_mon >= 12 {
             self.t.tm_year += self.t.tm_mon / 12;
             self.t.tm_mon %= 12;
-            self.changes.insert(TMChanges::MON|TMChanges::YEAR);
         }
 
         self.t.tm_wday %= 7;
@@ -142,43 +118,36 @@ impl TmEditor {
 
     pub fn set_sec(&mut self, v: libc::c_int) {
         self.t.tm_sec = v;
-        self.changes.insert(TMChanges::SEC);
         self.wrap_time();
     }
 
     pub fn set_min(&mut self, v: libc::c_int) {
         self.t.tm_min = v;
-        self.changes.insert(TMChanges::MIN);
         self.wrap_time();
     }
 
     pub fn set_hour(&mut self, v: libc::c_int) {
         self.t.tm_hour = v;
-        self.changes.insert(TMChanges::HOUR);
         self.wrap_time();
     }
 
     pub fn set_mday(&mut self, v: libc::c_int) {
         self.t.tm_mday = v;
-        self.changes.insert(TMChanges::MDAY);
         self.wrap_time();
     }
 
     pub fn set_mon(&mut self, v: libc::c_int) {
         self.t.tm_mon = v;
-        self.changes.insert(TMChanges::MON);
         self.wrap_time();
     }
 
     pub fn set_year(&mut self, v: libc::c_int) {
         self.t.tm_year = v;
-        self.changes.insert(TMChanges::YEAR);
         self.wrap_time();
     }
 
     pub fn set_wday(&mut self, v: libc::c_int) {
         self.t.tm_wday = v;
-        self.changes.insert(TMChanges::WDAY);
         self.wrap_time();
     }
 
-- 
2.20.1






More information about the pbs-devel mailing list