use serde::{Deserialize, Serialize};
use std::time::{Duration, SystemTime};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompactionState {
Idle,
Running,
Paused,
Failed,
Completed,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompactionResult {
pub start_time: SystemTime,
pub end_time: SystemTime,
pub duration: Duration,
pub vectors_processed: usize,
pub vectors_removed: usize,
pub bytes_reclaimed: u64,
pub fragmentation_before: f64,
pub fragmentation_after: f64,
pub success: bool,
pub error: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CompactionStatistics {
pub total_compactions: u64,
pub successful_compactions: u64,
pub failed_compactions: u64,
pub total_vectors_processed: usize,
pub total_vectors_removed: usize,
pub total_bytes_reclaimed: u64,
pub current_fragmentation: f64,
pub avg_compaction_duration: Duration,
pub last_compaction_time: Option<SystemTime>,
pub last_compaction_result: Option<CompactionResult>,
}
#[derive(Debug, Clone)]
pub struct FragmentInfo {
pub offset: usize,
pub size: usize,
pub is_free: bool,
pub age: Duration,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CompactionPhase {
Analyzing,
IdentifyingCandidates,
MovingVectors,
UpdatingIndices,
ReclaimingSpace,
Verifying,
Completed,
}
#[derive(Debug, Clone)]
pub struct CompactionProgress {
pub phase: CompactionPhase,
pub phase_progress: f64,
pub overall_progress: f64,
pub estimated_time_remaining: Option<Duration>,
pub throughput: f64,
}
#[derive(Debug, Clone)]
pub struct CompactionCandidate {
pub vector_id: String,
pub current_offset: usize,
pub size_bytes: usize,
pub priority: f64,
pub reason: CompactionReason,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum CompactionReason {
Fragmentation,
DeletedCleanup,
DuplicateRemoval,
SizeOptimization,
Manual,
}
#[derive(Debug, Clone)]
pub struct CompactionBatch {
pub batch_id: u64,
pub candidates: Vec<CompactionCandidate>,
pub total_size_bytes: usize,
pub estimated_duration: Duration,
}