From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 9A5C01FF136 for ; Mon, 09 Mar 2026 17:21:41 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D13D439A3; Mon, 9 Mar 2026 17:21:34 +0100 (CET) From: Christian Ebner To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox-backup v5 01/11] client: backup writer: fix upload stats size and rate for push sync Date: Mon, 9 Mar 2026 17:20:40 +0100 Message-ID: <20260309162050.1047341-3-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260309162050.1047341-1-c.ebner@proxmox.com> References: <20260309162050.1047341-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1773073228141 X-SPAM-LEVEL: Spam detection results: 0 AWL -1.011 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.408 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.819 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.903 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: ORE6IMSINBA64WA27ED4BCHWUPTXZZWC X-Message-ID-Hash: ORE6IMSINBA64WA27ED4BCHWUPTXZZWC X-MailFrom: c.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Currently, the logical size of the uploaded chunks is used for size and upload rate calculation in case of sync jobs in push direction, leading to inflated values for the transferred size and rate. Use the compressed chunk size instead. To get the required information, return the more verbose `UploadStats` on `upload_index_chunk_info` calls and use it's compressed size for the transferred `bytes` of `SyncStats` instead. Since `UploadStats` is now part of a pub api, increase it's scope as well. This is then finally being used to display the upload size and calculate the rate for the push sync job. Signed-off-by: Christian Ebner --- pbs-client/src/backup_stats.rs | 20 ++++++++++---------- pbs-client/src/backup_writer.rs | 4 ++-- src/server/push.rs | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pbs-client/src/backup_stats.rs b/pbs-client/src/backup_stats.rs index f0563a001..edf7ef3c4 100644 --- a/pbs-client/src/backup_stats.rs +++ b/pbs-client/src/backup_stats.rs @@ -15,16 +15,16 @@ pub struct BackupStats { } /// Extended backup run statistics and archive checksum -pub(crate) struct UploadStats { - pub(crate) chunk_count: usize, - pub(crate) chunk_reused: usize, - pub(crate) chunk_injected: usize, - pub(crate) size: usize, - pub(crate) size_reused: usize, - pub(crate) size_injected: usize, - pub(crate) size_compressed: usize, - pub(crate) duration: Duration, - pub(crate) csum: [u8; 32], +pub struct UploadStats { + pub chunk_count: usize, + pub chunk_reused: usize, + pub chunk_injected: usize, + pub size: usize, + pub size_reused: usize, + pub size_injected: usize, + pub size_compressed: usize, + pub duration: Duration, + pub csum: [u8; 32], } impl UploadStats { diff --git a/pbs-client/src/backup_writer.rs b/pbs-client/src/backup_writer.rs index 49aff3fdd..4a4391c8b 100644 --- a/pbs-client/src/backup_writer.rs +++ b/pbs-client/src/backup_writer.rs @@ -309,7 +309,7 @@ impl BackupWriter { archive_name: &BackupArchiveName, stream: impl Stream>, options: UploadOptions, - ) -> Result { + ) -> Result { let mut param = json!({ "archive-name": archive_name }); let (prefix, archive_size) = options.index_type.to_prefix_and_size(); if let Some(size) = archive_size { @@ -391,7 +391,7 @@ impl BackupWriter { .post(&format!("{prefix}_close"), Some(param)) .await?; - Ok(upload_stats.to_backup_stats()) + Ok(upload_stats) } pub async fn upload_stream( diff --git a/src/server/push.rs b/src/server/push.rs index 7f93cc034..b7eeeffae 100644 --- a/src/server/push.rs +++ b/src/server/push.rs @@ -1058,8 +1058,8 @@ async fn push_index( .await?; Ok(SyncStats { - chunk_count: upload_stats.chunk_count as usize, - bytes: upload_stats.size as usize, + chunk_count: upload_stats.chunk_count, + bytes: upload_stats.size_compressed, elapsed: upload_stats.duration, removed: None, }) -- 2.47.3