From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <dcsapak@zita.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A1A2161078 for <pbs-devel@lists.proxmox.com>; Fri, 4 Sep 2020 14:33:39 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 741D420C9F for <pbs-devel@lists.proxmox.com>; Fri, 4 Sep 2020 14:33:39 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 02EC820C52 for <pbs-devel@lists.proxmox.com>; Fri, 4 Sep 2020 14:33:36 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id BAD5944A30 for <pbs-devel@lists.proxmox.com>; Fri, 4 Sep 2020 14:33:35 +0200 (CEST) From: Dominik Csapak <d.csapak@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Fri, 4 Sep 2020 14:33:24 +0200 Message-Id: <20200904123334.3731-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200904123334.3731-1-d.csapak@proxmox.com> References: <20200904123334.3731-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.095 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods NO_DNS_FOR_FROM 0.379 Envelope sender has no MX or A DNS records RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [time.rs] Subject: [pbs-devel] [PATCH proxmox-backup v2 01/11] tools/systemd/tm_editor: remove TMChanges optimization X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> X-List-Received-Date: Fri, 04 Sep 2020 12:33:39 -0000 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@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