Add compression support to backup workflow
BackupScheduler Enhancement: - copy_file() now compresses files using ZSTD or LZ4 - min_size threshold: 1024 bytes (smaller files not compressed) - compression level: 3 (balanced speed/compression) BackupConfigResponse Updated: - Added compress, encrypt, include_checksums fields - compress: 'none' | 'lz4' | 'zstd' - Default: 'zstd' REST API Enhancement: - GET /api/v2/backup/config returns full config - POST /api/v2/backup/config accepts compression settings Test Results: - Set compress='lz4': ✅ Config updated - Set compress='zstd': ✅ Config updated - Compression applied via run_backup() (scheduled backup) Note: Direct create_snapshot API doesn't use compression (scheduler.run_backup() is the primary backup mechanism) Build: 495 tests pass
This commit is contained in:
@@ -180,14 +180,28 @@ impl BackupScheduler {
|
||||
}
|
||||
|
||||
fn copy_file(&self, src: &PathBuf, dst: &PathBuf) -> Result<(), VfsError> {
|
||||
use super::compression::Compressor;
|
||||
use super::VfsCompressionConfig;
|
||||
|
||||
let mut src_file = self.backend.open_file(src, &super::open_flags::OpenFlags::new().read())?;
|
||||
let data = src_file.read_all()?;
|
||||
|
||||
let final_data = if self.config.compress != super::VfsCompression::None {
|
||||
let compressor = Compressor::new(VfsCompressionConfig {
|
||||
algorithm: self.config.compress.clone(),
|
||||
min_size: 1024,
|
||||
level: 3,
|
||||
});
|
||||
compressor.compress(&data)?
|
||||
} else {
|
||||
data
|
||||
};
|
||||
|
||||
let mut dst_file = self.backend.open_file(
|
||||
dst,
|
||||
&super::open_flags::OpenFlags::new().write().create().truncate(),
|
||||
)?;
|
||||
dst_file.write_all(&data)?;
|
||||
dst_file.write_all(&final_data)?;
|
||||
dst_file.flush()?;
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in New Issue
Block a user