src/api2/backup/upload_chunk.rs: compute crc on upload
This commit is contained in:
parent
ba01828d38
commit
6f083b7a92
|
@ -53,10 +53,13 @@ impl Future for UploadChunk {
|
||||||
bail!("uploaded chunk has unexpected size.");
|
bail!("uploaded chunk has unexpected size.");
|
||||||
}
|
}
|
||||||
|
|
||||||
let chunk = DataChunk::from_raw(raw_data, self.digest)?;
|
let mut chunk = DataChunk::from_raw(raw_data, self.digest)?;
|
||||||
|
|
||||||
chunk.verify_unencrypted(self.size as usize)?;
|
chunk.verify_unencrypted(self.size as usize)?;
|
||||||
|
|
||||||
|
// always comput CRC at server side
|
||||||
|
chunk.set_crc(chunk.compute_crc());
|
||||||
|
|
||||||
let (is_duplicate, compressed_size) = self.store.insert_chunk(&chunk)?;
|
let (is_duplicate, compressed_size) = self.store.insert_chunk(&chunk)?;
|
||||||
|
|
||||||
return Ok(Async::Ready((self.digest, self.size, compressed_size as u32, is_duplicate)))
|
return Ok(Async::Ready((self.digest, self.size, compressed_size as u32, is_duplicate)))
|
||||||
|
|
|
@ -54,7 +54,7 @@ impl DataChunk {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// compute the CRC32 checksum
|
/// compute the CRC32 checksum
|
||||||
pub fn compute_crc(&mut self) -> u32 {
|
pub fn compute_crc(&self) -> u32 {
|
||||||
let mut hasher = crc32fast::Hasher::new();
|
let mut hasher = crc32fast::Hasher::new();
|
||||||
let start = std::mem::size_of::<DataChunkHeader>(); // start after HEAD
|
let start = std::mem::size_of::<DataChunkHeader>(); // start after HEAD
|
||||||
hasher.update(&self.raw_data[start..]);
|
hasher.update(&self.raw_data[start..]);
|
||||||
|
@ -230,8 +230,8 @@ impl DataChunk {
|
||||||
};
|
};
|
||||||
|
|
||||||
if magic == &COMPRESSED_CHUNK_MAGIC_1_0 {
|
if magic == &COMPRESSED_CHUNK_MAGIC_1_0 {
|
||||||
let data = zstd::block::decompress(&self.raw_data[12..], 16*1024*1024)?;
|
let data = zstd::block::decompress(&self.raw_data[12..], 16*1024*1024)?;
|
||||||
verify_raw_data(&data)?;
|
verify_raw_data(&data)?;
|
||||||
} else if magic == &UNCOMPRESSED_CHUNK_MAGIC_1_0 {
|
} else if magic == &UNCOMPRESSED_CHUNK_MAGIC_1_0 {
|
||||||
verify_raw_data(&self.raw_data[12..])?;
|
verify_raw_data(&self.raw_data[12..])?;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue