src/backup/datastore.rs: generic index_mark_used_chunks implementation, improve GC stats
This commit is contained in:
		@ -12,20 +12,24 @@ use super::DataChunk;
 | 
			
		||||
#[derive(Clone, Serialize)]
 | 
			
		||||
pub struct GarbageCollectionStatus {
 | 
			
		||||
    pub upid: Option<String>,
 | 
			
		||||
    pub used_bytes: usize,
 | 
			
		||||
    pub used_chunks: usize,
 | 
			
		||||
    pub disk_bytes: usize,
 | 
			
		||||
    pub index_file_count: usize,
 | 
			
		||||
    pub index_data_bytes: u64,
 | 
			
		||||
    pub disk_bytes: u64,
 | 
			
		||||
    pub disk_chunks: usize,
 | 
			
		||||
    pub removed_bytes: u64,
 | 
			
		||||
    pub removed_chunks: usize,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for GarbageCollectionStatus {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        GarbageCollectionStatus {
 | 
			
		||||
            upid: None,
 | 
			
		||||
            used_bytes: 0,
 | 
			
		||||
            used_chunks: 0,
 | 
			
		||||
            index_file_count: 0,
 | 
			
		||||
            index_data_bytes: 0,
 | 
			
		||||
            disk_bytes: 0,
 | 
			
		||||
            disk_chunks: 0,
 | 
			
		||||
            removed_bytes: 0,
 | 
			
		||||
            removed_chunks: 0,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -143,13 +147,9 @@ impl ChunkStore {
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn touch_chunk(&self, digest:&[u8]) -> Result<(), Error> {
 | 
			
		||||
    pub fn touch_chunk(&self, digest: &[u8; 32]) -> Result<(), Error> {
 | 
			
		||||
 | 
			
		||||
        let mut chunk_path = self.chunk_dir.clone();
 | 
			
		||||
        let prefix = digest_to_prefix(&digest);
 | 
			
		||||
        chunk_path.push(&prefix);
 | 
			
		||||
        let digest_str = proxmox::tools::digest_to_hex(&digest);
 | 
			
		||||
        chunk_path.push(&digest_str);
 | 
			
		||||
        let (chunk_path, _digest_str) = self.chunk_path(digest);
 | 
			
		||||
 | 
			
		||||
        const UTIME_NOW: i64 = ((1 << 30) - 1);
 | 
			
		||||
        const UTIME_OMIT: i64 = ((1 << 30) - 2);
 | 
			
		||||
@ -172,7 +172,7 @@ impl ChunkStore {
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn read_chunk(&self, digest:&[u8; 32]) -> Result<DataChunk, Error> {
 | 
			
		||||
    pub fn read_chunk(&self, digest: &[u8; 32]) -> Result<DataChunk, Error> {
 | 
			
		||||
 | 
			
		||||
        let (chunk_path, digest_str) = self.chunk_path(digest);
 | 
			
		||||
        let mut file = std::fs::File::open(&chunk_path)
 | 
			
		||||
@ -302,9 +302,11 @@ impl ChunkStore {
 | 
			
		||||
                            err,
 | 
			
		||||
                        );
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    status.removed_chunks += 1;
 | 
			
		||||
                    status.removed_bytes += stat.st_size as u64;
 | 
			
		||||
               } else {
 | 
			
		||||
                    status.disk_chunks += 1;
 | 
			
		||||
                    status.disk_bytes += stat.st_size as usize;
 | 
			
		||||
                    status.disk_bytes += stat.st_size as u64;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            drop(lock);
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user