]> git.proxmox.com Git - proxmox-backup.git/blobdiff - src/backup/image_index.rs
start impl garbage collection
[proxmox-backup.git] / src / backup / image_index.rs
index 5194406df019542cf61076cc63c92f448b5ecac9..5b9f6eba695e792ec9fffe2cc3ac9367c2436dc2 100644 (file)
@@ -100,6 +100,24 @@ impl <'a> ImageIndexReader<'a> {
         Ok(())
     }
 
+    pub fn mark_used_chunks(&mut self) -> Result<(), Error> {
+
+        if self.index == std::ptr::null_mut() { bail!("detected closed index file."); }
+
+        let index_count = (self.size + self.chunk_size - 1)/self.chunk_size;
+
+        for pos in 0..index_count {
+
+            let digest = unsafe { std::slice::from_raw_parts_mut(self.index.add(pos*32), 32) };
+            if let Err(err) = self.store.touch_chunk(digest) {
+                bail!("unable to access chunk {}, required by {:?} - {}",
+                      u256_to_hex(digest), self.filename, err);
+            }
+        }
+
+        Ok(())
+    }
+
     pub fn print_info(&self) {
         println!("Filename: {:?}", self.filename);
         println!("Size: {}", self.size);