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 50D3978E06 for ; Mon, 3 May 2021 10:38:42 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 473471ABA7 for ; Mon, 3 May 2021 10:38:12 +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 040231AB6F for ; Mon, 3 May 2021 10:38:08 +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 CEF0342A3B for ; Mon, 3 May 2021 10:38:07 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Mon, 3 May 2021 10:38:03 +0200 Message-Id: <20210503083806.24138-5-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210503083806.24138-1-d.csapak@proxmox.com> References: <20210503083806.24138-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.009 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 Subject: [pbs-devel] [RFC PATCH proxmox-backup 4/7] api2/tape/restore: make datastore in restore_snapshot_archive optional 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: Mon, 03 May 2021 08:38:42 -0000 and add the chunks to the hashset without going through the datastore we'll want this to get a list of chunks from the indexes Signed-off-by: Dominik Csapak --- src/api2/tape/restore.rs | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/api2/tape/restore.rs b/src/api2/tape/restore.rs index 1cde7c63..aa51ce4b 100644 --- a/src/api2/tape/restore.rs +++ b/src/api2/tape/restore.rs @@ -536,7 +536,7 @@ fn restore_archive<'a>( if is_new { task_log!(worker, "restore snapshot {}", backup_dir); - match restore_snapshot_archive(worker, reader, &path, &datastore, checked_chunks) { + match restore_snapshot_archive(worker, reader, &path, Some(&datastore), checked_chunks) { Err(err) => { std::fs::remove_dir_all(&path)?; bail!("restore snapshot {} failed - {}", backup_dir, err); @@ -693,8 +693,8 @@ fn restore_snapshot_archive<'a>( worker: &WorkerTask, reader: Box, snapshot_path: &Path, - datastore: &DataStore, - checked_chunks: &mut HashSet<[u8;32]>, + datastore: Option<&DataStore>, + checked_chunks: &mut HashSet<[u8; 32]>, ) -> Result { let mut decoder = pxar::decoder::sync::Decoder::from_std(reader)?; @@ -723,8 +723,8 @@ fn try_restore_snapshot_archive( worker: &WorkerTask, decoder: &mut pxar::decoder::sync::Decoder, snapshot_path: &Path, - datastore: &DataStore, - checked_chunks: &mut HashSet<[u8;32]>, + datastore: Option<&DataStore>, + checked_chunks: &mut HashSet<[u8; 32]>, ) -> Result<(), Error> { let _root = match decoder.next() { @@ -815,13 +815,29 @@ fn try_restore_snapshot_archive( let index = DynamicIndexReader::open(&archive_path)?; let (csum, size) = index.compute_csum(); manifest.verify_file(&item.filename, &csum, size)?; - datastore.fast_index_verification(&index, checked_chunks)?; + if let Some(ref datastore) = datastore { + datastore.fast_index_verification(&index, checked_chunks)?; + } else { + for i in 0..index.index_count() { + if let Some(digest) = index.index_digest(i) { + checked_chunks.insert(*digest); + } + } + } } ArchiveType::FixedIndex => { let index = FixedIndexReader::open(&archive_path)?; let (csum, size) = index.compute_csum(); manifest.verify_file(&item.filename, &csum, size)?; - datastore.fast_index_verification(&index, checked_chunks)?; + if let Some(ref datastore) = datastore { + datastore.fast_index_verification(&index, checked_chunks)?; + } else { + for i in 0..index.index_count() { + if let Some(digest) = index.index_digest(i) { + checked_chunks.insert(*digest); + } + } + } } ArchiveType::Blob => { let mut tmpfile = std::fs::File::open(&archive_path)?; -- 2.20.1