#[derive(Clone, Debug, PartialEq, Eq)] pub struct ParallelPhase1Config { pub max_repo_sync_workers_global: usize, pub max_inflight_snapshot_bytes_global: usize, pub max_pending_repo_results: usize, } #[derive(Clone, Debug, PartialEq, Eq)] pub struct ParallelPhase2Config { pub object_workers: usize, pub worker_queue_capacity: usize, } impl Default for ParallelPhase2Config { fn default() -> Self { Self { object_workers: std::thread::available_parallelism() .map(|n| n.get().max(1)) .unwrap_or(4), worker_queue_capacity: 256, } } } impl Default for ParallelPhase1Config { fn default() -> Self { Self { max_repo_sync_workers_global: 4, max_inflight_snapshot_bytes_global: 512 * 1024 * 1024, max_pending_repo_results: 1024, } } } #[cfg(test)] mod tests { use super::{ParallelPhase1Config, ParallelPhase2Config}; #[test] fn default_parallel_phase1_config_is_bounded() { let cfg = ParallelPhase1Config::default(); assert!(cfg.max_repo_sync_workers_global > 0); assert!(cfg.max_inflight_snapshot_bytes_global > 0); assert!(cfg.max_pending_repo_results > 0); } #[test] fn default_parallel_phase2_config_is_bounded() { let cfg = ParallelPhase2Config::default(); assert!(cfg.object_workers > 0); assert!(cfg.worker_queue_capacity > 0); } }