From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <d.csapak@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 533A574FE1
 for <pbs-devel@lists.proxmox.com>; 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 <pbs-devel@lists.proxmox.com>; 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 <pbs-devel@lists.proxmox.com>; 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 <pbs-devel@lists.proxmox.com>; Fri,  4 Jun 2021 12:43:50 +0200 (CEST)
From: Dominik Csapak <d.csapak@proxmox.com>
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
 <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 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 <d.csapak@proxmox.com>
---
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