fix: guard legacy runtime paths for bucketed configs
This commit is contained in:
@@ -6,7 +6,7 @@ use std::io::Write;
|
||||
|
||||
use kvcache_simulator::config::*;
|
||||
use kvcache_simulator::driver;
|
||||
use kvcache_simulator::replay::ReplayEvictPolicy;
|
||||
use kvcache_simulator::replay::{self, PlacementEntry, ReplayEvictPolicy};
|
||||
|
||||
fn base_config(trace_path: &str, out_dir: &str, mode: RouterMode) -> Config {
|
||||
Config {
|
||||
@@ -70,6 +70,26 @@ fn base_config(trace_path: &str, out_dir: &str, mode: RouterMode) -> Config {
|
||||
}
|
||||
}
|
||||
|
||||
fn bucketed_config(trace_path: &str, out_dir: &str, mode: RouterMode) -> Config {
|
||||
let mut cfg = base_config(trace_path, out_dir, mode);
|
||||
cfg.cluster.num_instances = None;
|
||||
cfg.cluster.buckets = vec![
|
||||
BucketConfig {
|
||||
name: "short".into(),
|
||||
input_length_min: 0,
|
||||
input_length_max: 64,
|
||||
num_instances: 2,
|
||||
},
|
||||
BucketConfig {
|
||||
name: "long".into(),
|
||||
input_length_min: 65,
|
||||
input_length_max: 128,
|
||||
num_instances: 1,
|
||||
},
|
||||
];
|
||||
cfg
|
||||
}
|
||||
|
||||
fn write_synthetic_trace(path: &std::path::Path) {
|
||||
// 5 distinct conversations, each with 8 turns. Within a conversation,
|
||||
// turn k+1 reuses the prefix of turn k (shared first ~10 blocks) and
|
||||
@@ -274,3 +294,36 @@ fn ablation_parallel_matches_serial() {
|
||||
assert!((lhs.miss_rate - rhs.miss_rate).abs() < 1e-12);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn bucketed_configs_are_rejected_by_legacy_runtime_paths() {
|
||||
let tmp = std::env::temp_dir().join("kvcache_sim_bucketed_reject");
|
||||
let _ = std::fs::remove_dir_all(&tmp);
|
||||
std::fs::create_dir_all(&tmp).unwrap();
|
||||
let trace_path = tmp.join("trace.jsonl");
|
||||
write_synthetic_trace(&trace_path);
|
||||
|
||||
let cfg = bucketed_config(
|
||||
trace_path.to_str().unwrap(),
|
||||
tmp.to_str().unwrap(),
|
||||
RouterMode::Random,
|
||||
);
|
||||
|
||||
let result = driver::run(&cfg, Some("bucketed_guard"));
|
||||
assert!(result.is_err(), "bucketed run should fail");
|
||||
let err = result.err().unwrap();
|
||||
assert!(err.to_string().contains("cluster.buckets"));
|
||||
|
||||
let err = driver::ablate_fixed_placement(&cfg, &[RouterMode::Random], &[ReplayEvictPolicy::Lru])
|
||||
.expect_err("bucketed ablation should fail");
|
||||
assert!(err.to_string().contains("cluster.buckets"));
|
||||
|
||||
let err = replay::replay_fixed_placement(
|
||||
&cfg,
|
||||
&[],
|
||||
&Vec::<PlacementEntry>::new(),
|
||||
ReplayEvictPolicy::Lru,
|
||||
)
|
||||
.expect_err("bucketed replay should fail");
|
||||
assert!(err.to_string().contains("cluster.buckets"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user