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 7EA447724E for ; Tue, 20 Jul 2021 11:57:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 686812E0C6 for ; Tue, 20 Jul 2021 11:56:42 +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 7FCF62E093 for ; Tue, 20 Jul 2021 11:56:41 +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 59C7A41A8D for ; Tue, 20 Jul 2021 11:56:41 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Tue, 20 Jul 2021 11:56:38 +0200 Message-Id: <20210720095638.2645259-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210720095638.2645259-1-d.csapak@proxmox.com> References: <20210720095638.2645259-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.554 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% 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. [backup.rs] Subject: [pbs-devel] [RFC PATCH promxox-backup 2/2] api2: tape/backup: commit pool_writer even on error 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: Tue, 20 Jul 2021 09:57:12 -0000 this way we store all finished snapshots/chunk archives we in the catalog, and not onlye those until the last commit Signed-off-by: Dominik Csapak --- src/api2/tape/backup.rs | 115 +++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 55 deletions(-) diff --git a/src/api2/tape/backup.rs b/src/api2/tape/backup.rs index 8119482f..82cdd428 100644 --- a/src/api2/tape/backup.rs +++ b/src/api2/tape/backup.rs @@ -456,72 +456,77 @@ fn backup_worker( let mut need_catalog = false; // avoid writing catalog for empty jobs - for (group_number, group) in group_list.into_iter().enumerate() { - progress.done_groups = group_number as u64; - progress.done_snapshots = 0; - progress.group_snapshots = 0; - - let snapshot_list = group.list_backups(&datastore.base_path())?; - - // filter out unfinished backups - let mut snapshot_list = snapshot_list - .into_iter() - .filter(|item| item.is_finished()) - .collect(); - - BackupInfo::sort_list(&mut snapshot_list, true); // oldest first - - if latest_only { - progress.group_snapshots = 1; - if let Some(info) = snapshot_list.pop() { - if pool_writer.contains_snapshot(datastore_name, &info.backup_dir.to_string()) { - task_log!(worker, "skip snapshot {}", info.backup_dir); - continue; - } + let res: Result<(), Error> = proxmox::try_block!({ + for (group_number, group) in group_list.into_iter().enumerate() { + progress.done_groups = group_number as u64; + progress.done_snapshots = 0; + progress.group_snapshots = 0; + + let snapshot_list = group.list_backups(&datastore.base_path())?; + + // filter out unfinished backups + let mut snapshot_list = snapshot_list + .into_iter() + .filter(|item| item.is_finished()) + .collect(); + + BackupInfo::sort_list(&mut snapshot_list, true); // oldest first + + if latest_only { + progress.group_snapshots = 1; + if let Some(info) = snapshot_list.pop() { + if pool_writer.contains_snapshot(datastore_name, &info.backup_dir.to_string()) { + task_log!(worker, "skip snapshot {}", info.backup_dir); + continue; + } - need_catalog = true; + need_catalog = true; - let snapshot_name = info.backup_dir.to_string(); - if !backup_snapshot(worker, &mut pool_writer, datastore.clone(), info.backup_dir)? { - errors = true; - } else { - summary.snapshot_list.push(snapshot_name); - } - progress.done_snapshots = 1; - task_log!( - worker, - "percentage done: {}", - progress - ); - } - } else { - progress.group_snapshots = snapshot_list.len() as u64; - for (snapshot_number, info) in snapshot_list.into_iter().enumerate() { - if pool_writer.contains_snapshot(datastore_name, &info.backup_dir.to_string()) { - task_log!(worker, "skip snapshot {}", info.backup_dir); - continue; + let snapshot_name = info.backup_dir.to_string(); + if !backup_snapshot(worker, &mut pool_writer, datastore.clone(), info.backup_dir)? { + errors = true; + } else { + summary.snapshot_list.push(snapshot_name); + } + progress.done_snapshots = 1; + task_log!( + worker, + "percentage done: {}", + progress + ); } + } else { + progress.group_snapshots = snapshot_list.len() as u64; + for (snapshot_number, info) in snapshot_list.into_iter().enumerate() { + if pool_writer.contains_snapshot(datastore_name, &info.backup_dir.to_string()) { + task_log!(worker, "skip snapshot {}", info.backup_dir); + continue; + } - need_catalog = true; + need_catalog = true; - let snapshot_name = info.backup_dir.to_string(); - if !backup_snapshot(worker, &mut pool_writer, datastore.clone(), info.backup_dir)? { - errors = true; - } else { - summary.snapshot_list.push(snapshot_name); + let snapshot_name = info.backup_dir.to_string(); + if !backup_snapshot(worker, &mut pool_writer, datastore.clone(), info.backup_dir)? { + errors = true; + } else { + summary.snapshot_list.push(snapshot_name); + } + progress.done_snapshots = snapshot_number as u64 + 1; + task_log!( + worker, + "percentage done: {}", + progress + ); } - progress.done_snapshots = snapshot_number as u64 + 1; - task_log!( - worker, - "percentage done: {}", - progress - ); } } - } + Ok(()) + }); pool_writer.commit()?; + let _ = res?; // bubble errors up + if need_catalog { task_log!(worker, "append media catalog"); -- 2.30.2