From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id B68051FF0AA for ; Tue, 22 Sep 2026 15:11:12 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 7583B214E9; Tue, 22 Sep 2026 15:11:12 +0200 (CEST) From: Jakob Klocker To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox-backup v3 0/3] fix #6990: server: drop verify state on push & pull job Date: Tue, 22 Sep 2026 15:11:07 +0200 Message-ID: <20260922131110.313302-1-j.klocker@proxmox.com> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 AWL -0.687 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 1.274 Delivered to internal network by a host with no rDNS 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 Message-ID-Hash: MLBQRXUFCU5TGQWBKURAFYGLLEKBF7P2 X-Message-ID-Hash: MLBQRXUFCU5TGQWBKURAFYGLLEKBF7P2 X-MailFrom: jklocker@dev.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: When syncing a snapshot to another datastore, the source's verify_state is currently carried over to the target. This reports the target snapshot as verified even though its stored copy was never checked there. Since verify jobs skip snapshots that already carry a verify_state, the target's copy can't be verified again. Chunks are checksummed in memory while being transferred, but a verify serves a different purpose: confirming the write to the (external) target actually succeeded. This series stops the target from inheriting the source's verify_state, so the target is verified independently. On pull, a verify_state the target obtained on its own is preserved; on push the state is dropped unconditionally. It also moves the blocking calls in the touched code paths off the runtime's worker threads onto the blocking thread pool. Tested (verify_state correctly stripped on target): * Pull, verified source, new content, clean sync * Pull, verified source, existing content, clean sync * Pull, corrupted target, resync-corrupt * Push, verified source (has no corrupt path) * Pull, independently-verified target, clean re-sync - state preserved changes from v2 to v3 (thanks @Christian): * offload remaining removes to `spawn_blocking()` * add `target_path` parameter to `write_to_path` and perform the rename inside the helper * add a helper to return expected files as hashset * refactor `cleanup_unreferenced_files` to take the hashset instead of the manifest changes from v1 to v2 (thanks @Christian): * move the manifest write helper onto `BackupManifest` * offload fsync, rename and cleanup to `spawn_blocking()` Link: https://bugzilla.proxmox.com/show_bug.cgi?id=6990 proxmox-backup: Jakob Klocker (3): server: pull: run blocking file operations on the blocking pool fix #6990: server: drop verify state on push job fix #6990: server: drop verify state on non-decrypt pull job pbs-datastore/src/backup_info.rs | 21 +++++----- pbs-datastore/src/manifest.rs | 50 ++++++++++++++++++++++- src/server/pull.rs | 69 +++++++++++++++++++------------- src/server/push.rs | 7 ++++ 4 files changed, 106 insertions(+), 41 deletions(-) Summary over all repositories: 4 files changed, 106 insertions(+), 41 deletions(-) -- Generated by murpp 0.12.0