]> git.proxmox.com Git - proxmox-backup.git/commitdiff
verify: speedup - only verify chunks once
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 25 Aug 2020 06:52:24 +0000 (08:52 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 25 Aug 2020 06:52:24 +0000 (08:52 +0200)
We need to do the check before we load the chunk.

src/backup/verify.rs

index 77706dfd91939dd17303e05cbebdcb52c946df72..f9437ff02f549a88b0d56be9460f47e15814f651 100644 (file)
@@ -50,7 +50,17 @@ fn verify_index_chunks(
         worker.fail_on_abort()?;
 
         let info = index.chunk_info(pos).unwrap();
-        let size = info.range.end - info.range.start;
+
+        if verified_chunks.contains(&info.digest) {
+            continue; // already verified
+        }
+
+        if corrupt_chunks.contains(&info.digest) {
+            let digest_str = proxmox::tools::digest_to_hex(&info.digest);
+            worker.log(format!("chunk {} was marked as corrupt", digest_str));
+            errors += 1;
+            continue;
+        }
 
         let chunk = match datastore.load_chunk(&info.digest) {
             Err(err) => {
@@ -81,20 +91,14 @@ fn verify_index_chunks(
             errors += 1;
         }
 
-        if !verified_chunks.contains(&info.digest) {
-            if !corrupt_chunks.contains(&info.digest) {
-                if let Err(err) = chunk.verify_unencrypted(size as usize, &info.digest) {
-                    corrupt_chunks.insert(info.digest);
-                    worker.log(format!("{}", err));
-                    errors += 1;
-                } else {
-                    verified_chunks.insert(info.digest);
-                }
-            } else {
-                let digest_str = proxmox::tools::digest_to_hex(&info.digest);
-                worker.log(format!("chunk {} was marked as corrupt", digest_str));
-                errors += 1;
-            }
+        let size = info.range.end - info.range.start;
+
+        if let Err(err) = chunk.verify_unencrypted(size as usize, &info.digest) {
+            corrupt_chunks.insert(info.digest);
+            worker.log(format!("{}", err));
+            errors += 1;
+        } else {
+            verified_chunks.insert(info.digest);
         }
     }