create backup mod in backup.rs, improve docu
This commit is contained in:
parent
cb4412b18e
commit
cbdd8c54ae
|
@ -0,0 +1,6 @@
|
|||
//! This mudule implements the proxmox backup chunked data storage
|
||||
|
||||
pub mod chunker;
|
||||
pub mod chunk_store;
|
||||
pub mod image_index;
|
||||
pub mod datastore;
|
|
@ -1,6 +1,12 @@
|
|||
//! Slinding window chunker
|
||||
//! Slinding window chunker (Buzhash)
|
||||
//!
|
||||
//! This is a rewrite of *casync* chunker (cachunker.h) in rust
|
||||
//! This is a rewrite of *casync* chunker (cachunker.h) in rust.
|
||||
//!
|
||||
//! Hashing by cyclic polynomial (also called Buzhash) has the benefit
|
||||
//! of avoiding multiplications, using barrel shifts instead. For more
|
||||
//! information please take a look at the [Rolling
|
||||
//! Hash](https://en.wikipedia.org/wiki/Rolling_hash) artikel from
|
||||
//! wikipedia.
|
||||
|
||||
use std::io::Write;
|
||||
|
||||
|
@ -92,6 +98,9 @@ const BUZHASH_TABLE: [u32; 256] = [
|
|||
|
||||
impl Chunker {
|
||||
|
||||
/// Create a new Chunker instance, which produces and average chunk
|
||||
/// size of `chunk_size_avg`. We allow variation from
|
||||
/// `chunk_size_avg/4` up to a maximum of `chunk_size_avg*4`.
|
||||
pub fn new(chunk_size_avg: usize) -> Self {
|
||||
// The chunk cut discriminator. In order to get an average
|
||||
// chunk size of avg, we cut whenever for a hash value "h" at
|
||||
|
@ -118,10 +127,10 @@ impl Chunker {
|
|||
}
|
||||
}
|
||||
|
||||
// Scans the specified data for a chunk border. Returns 0 if none
|
||||
// was found (and the function should be called with more data
|
||||
// later on), or another value indicating the position of a
|
||||
// border.
|
||||
/// Scans the specified data for a chunk border. Returns 0 if none
|
||||
/// was found (and the function should be called with more data
|
||||
/// later on), or another value indicating the position of a
|
||||
/// border.
|
||||
pub fn scan(&mut self, data: &[u8]) -> usize {
|
||||
|
||||
let window_len = self.window.len();
|
||||
|
@ -160,6 +169,7 @@ impl Chunker {
|
|||
BUZHASH_TABLE[enter as usize];
|
||||
|
||||
self.chunk_size += 1;
|
||||
|
||||
pos += 1;
|
||||
if self.shall_break() {
|
||||
self.h = 0;
|
||||
|
@ -172,6 +182,7 @@ impl Chunker {
|
|||
0
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn shall_break(&self) -> bool {
|
||||
|
||||
if self.chunk_size >= self.chunk_size_max { return true; }
|
||||
|
|
|
@ -34,13 +34,7 @@ pub mod catar;
|
|||
|
||||
pub mod section_config;
|
||||
|
||||
pub mod backup {
|
||||
|
||||
pub mod chunker;
|
||||
pub mod chunk_store;
|
||||
pub mod image_index;
|
||||
pub mod datastore;
|
||||
}
|
||||
pub mod backup;
|
||||
|
||||
pub mod config {
|
||||
|
||||
|
|
Loading…
Reference in New Issue