src/api2/admin/datastore/catar.rs: allow to configure chunk-size

This commit is contained in:
Dietmar Maurer
2019-02-19 15:19:12 +01:00
parent c584aa21fd
commit 247cdbce72
4 changed files with 47 additions and 18 deletions

View File

@ -40,6 +40,16 @@ pub struct ChunkStore {
// TODO: what about sysctl setting vm.vfs_cache_pressure (0 - 100) ?
pub fn verify_chunk_size(size: u64) -> Result<(), Error> {
static SIZES: [u64; 7] = [64*1024, 128*1024, 256*1024, 512*1024, 1024*1024, 2048*1024, 4096*1024];
if !SIZES.contains(&size) {
bail!("Got unsupported chunk size '{}'", size);
}
Ok(())
}
fn digest_to_prefix(digest: &[u8]) -> PathBuf {
let mut buf = Vec::<u8>::with_capacity(2+1+2+1);

View File

@ -329,6 +329,7 @@ pub struct DynamicIndexWriter {
pub uuid: [u8; 16],
pub ctime: u64,
chunk_count: usize,
chunk_offset: usize,
last_chunk: usize,
chunk_buffer: Vec<u8>,
@ -387,6 +388,7 @@ impl DynamicIndexWriter {
ctime,
uuid: *uuid.as_bytes(),
chunk_count: 0,
chunk_offset: 0,
last_chunk: 0,
chunk_buffer: Vec::with_capacity(chunk_size*4),
@ -405,6 +407,8 @@ impl DynamicIndexWriter {
self.writer.flush()?;
let avg = ((self.chunk_offset as f64)/(self.chunk_count as f64)) as usize;
println!("Average chunk size {}", avg);
// fixme:
if let Err(err) = std::fs::rename(&self.tmp_filename, &self.filename) {
@ -429,6 +433,8 @@ impl DynamicIndexWriter {
format!("wrong chunk size {} != {}", expected_chunk_size, chunk_size)));
}
self.chunk_count += 1;
self.last_chunk = self.chunk_offset;
match self.store.insert_chunk(&self.chunk_buffer) {