Commit Graph

5 Commits

Author SHA1 Message Date
Warren
1418e9958b Apply clippy fixes for code quality
Clippy Fixes Applied:
- Removed unused imports
- Fixed manual implementation of .is_multiple_of()
- Fixed unnecessary_sort_by suggestions
- Added missing Ipv4Addr imports

Files Modified:
- forward_acl.rs: Add Ipv4Addr import
- known_hosts.rs: Add Ipv4Addr import
- Various files: Remove unused imports

Build:  markbase-core
Tests: 495 passed
2026-06-24 11:18:02 +08:00
Warren
d76a200560 Add incremental backup support (Phase 8)
BackupScheduler Enhancement:
- Added incremental: bool field to BackupScheduleConfig
- Default: incremental=true (enabled by default)
- copy_incremental_to_snapshot() method
- file_changed() detection (size + mtime comparison)
- Hardlink unchanged files to base snapshot (ZFS-style)

Incremental Backup Algorithm:
1. If incremental=true and previous snapshot exists:
   - Compare file size and mtime with base snapshot
   - If unchanged: create hardlink to base (zero disk usage)
   - If changed: copy and compress (new content)
2. If incremental=false or no previous snapshot:
   - Full copy (traditional backup)

Storage Savings:
- Unchanged files: hardlink (0 extra disk space)
- Changed files: copy + compress (minimal overhead)
- Similar to ZFS snapshot mechanism

BackupConfigResponse Updated:
- Added incremental field
- Added compress field (GUI: dropdown select)

Backup.vue Updated:
- Incremental switch with explanation text
- Compression dropdown (None/LZ4/ZSTD)
- Default values loaded from backend

REST API Test:
curl /api/v2/backup/config
{incremental:true,compress:zstd,...}

Build: 495 tests pass
2026-06-24 04:20:33 +08:00
Warren
2d8e9049b0 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
2026-06-24 04:14:24 +08:00
Warren
26d4199203 Add Backup REST API endpoints (Phase 5-6)
REST API Implementation:
- 8 backup/snapshot endpoints added to server.rs
- BackupScheduler: add get_config()/set_config() methods

Endpoints:
- GET /api/v2/backup/stats - Scheduler status
- GET/POST /api/v2/backup/config - Config management
- POST /api/v2/backup/run - Manual backup trigger
- GET /api/v2/snapshots - List snapshots
- POST/DELETE /api/v2/snapshots/:name - Create/delete snapshot
- POST /api/v2/snapshots/:name/restore - Restore snapshot
- GET /api/v2/storage/stats - Storage metrics

Test Results:
- curl /api/v2/backup/stats 
- curl /api/v2/backup/config 
- curl /api/v2/storage/stats 
- curl /api/v2/snapshots 

Build: 495 tests pass
Server: Port 11438 running with new endpoints
2026-06-24 03:25:41 +08:00
Warren
1d9e140e6c Fix Backup/Restore API compilation errors
- chrono timestamp_opt API: use TimeZone trait method
- VfsError::Io/NotFound: use String literals
- SendFormat: add PartialEq derive
- VfsRaidConfig tests: add disk_paths field
- BackupStats test: use relative timestamps
- HashSet file tracking: use (String, u64) tuple
- BackupStream::receive: clone format before use
- collect_file_data: fix temporary lifetime

All tests pass: 495 markbase-core + 201 smb-server = 696 total
2026-06-24 02:37:03 +08:00