From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 533A574FE1 for ; Fri, 4 Jun 2021 12:43:55 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 493571BC9B for ; Fri, 4 Jun 2021 12:43:55 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (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 2FA101BC8F for ; Fri, 4 Jun 2021 12:43:51 +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 EE0164671B for ; Fri, 4 Jun 2021 12:43:50 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Fri, 4 Jun 2021 12:43:50 +0200 Message-Id: <20210604104350.6372-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.051 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches 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. [pull.rs] Subject: [pbs-devel] [PATCH proxmox-backup v2] client/pull: log snapshots that are skipped because of time X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jun 2021 10:43:55 -0000 we skip snapshots that are older than the newest snapshot of the group in the target datastore, log it so the user can know why it is not synced Signed-off-by: Dominik Csapak --- changes from v1: * only log 1 line per backup group by implementing a 'SkipInfo' struct that counts, saves the corresponding backup_times to log, and implements 'Display' to log src/client/pull.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/client/pull.rs b/src/client/pull.rs index 95720973..a52f4e02 100644 --- a/src/client/pull.rs +++ b/src/client/pull.rs @@ -14,6 +14,7 @@ use crate::{ backup::*, client::*, server::WorkerTask, + task_log, tools::{compute_file_csum, ParallelHandler}, }; use proxmox::api::error::{HttpError, StatusCode}; @@ -443,6 +444,51 @@ pub async fn pull_snapshot_from( Ok(()) } +struct SkipInfo { + oldest: i64, + newest: i64, + count: u64, +} + +impl SkipInfo { + fn update(&mut self, backup_time: i64) { + self.count += 1; + + if backup_time < self.oldest { + self.oldest = backup_time; + } + + if backup_time > self.newest { + self.newest = backup_time; + } + } +} + +impl std::fmt::Display for SkipInfo { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.count > 1 { + write!( + f, + "{} snapshots ({}..{}) that are older than the newest local snapshot", + self.count, + proxmox::tools::time::epoch_to_rfc3339_utc(self.oldest) + .map_err(|_| std::fmt::Error)?, + proxmox::tools::time::epoch_to_rfc3339_utc(self.newest) + .map_err(|_| std::fmt::Error)?, + ) + } else if self.count == 1 { + write!( + f, + "1 snapshot ({}) that is older than the newest local snapshot", + proxmox::tools::time::epoch_to_rfc3339_utc(self.oldest) + .map_err(|_| std::fmt::Error)?, + ) + } else { + write!(f, "0 snapshots") + } + } +} + pub async fn pull_group( worker: &WorkerTask, client: &HttpClient, @@ -477,6 +523,12 @@ pub async fn pull_group( progress.group_snapshots = list.len() as u64; + let mut skip_info = SkipInfo { + oldest: i64::MAX, + newest: i64::MIN, + count: 0, + }; + for (pos, item) in list.into_iter().enumerate() { let snapshot = BackupDir::new(item.backup_type, item.backup_id, item.backup_time)?; @@ -495,6 +547,7 @@ pub async fn pull_group( if let Some(last_sync_time) = last_sync { if last_sync_time > backup_time { + skip_info.update(backup_time); continue; } } @@ -552,6 +605,14 @@ pub async fn pull_group( } } + if skip_info.count > 0 { + task_log!( + worker, + "skipped: {}", + skip_info, + ); + } + Ok(()) } -- 2.20.1