src/backup/datastore.rs: generic index_mark_used_chunks implementation, improve GC stats

This commit is contained in:
Dietmar Maurer
2019-07-04 07:57:43 +02:00
parent 86eda3eb0d
commit a660978c9a
5 changed files with 64 additions and 59 deletions

View File

@ -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);