From a7e1b37070ccfde9e848275a2a6c504b4a0b89b6 Mon Sep 17 00:00:00 2001 From: Chen Chen Date: Tue, 6 Aug 2024 20:55:47 -0500 Subject: [PATCH] *: make mix percentages all optional as long as present ones sum to 100 --- examples/mixed/mixed.toml | 2 -- examples/readpopular/readpopular.toml | 2 -- examples/writeheavy/writeheavy.toml | 1 - examples/ycsbd/ycsbd.toml | 1 - examples/your-kv-store/benchmark.toml | 1 - presets/benchmarks/example.toml | 1 - presets/benchmarks/example_scan.toml | 1 - src/bench.rs | 8 ++--- src/workload.rs | 43 +++++++++++++++++---------- 9 files changed, 31 insertions(+), 29 deletions(-) diff --git a/examples/mixed/mixed.toml b/examples/mixed/mixed.toml index 7e234e4..c3cba14 100644 --- a/examples/mixed/mixed.toml +++ b/examples/mixed/mixed.toml @@ -9,7 +9,6 @@ report = "repeat" [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" report = "hidden" @@ -38,7 +37,6 @@ dist = "zipfian" # read-only, uniform [[benchmark]] -set_perc = 0 get_perc = 100 timeout = 1.0 dist = "uniform" diff --git a/examples/readpopular/readpopular.toml b/examples/readpopular/readpopular.toml index 8d8b546..4c6671c 100644 --- a/examples/readpopular/readpopular.toml +++ b/examples/readpopular/readpopular.toml @@ -8,14 +8,12 @@ kmax = 1000000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" report = "hidden" [[benchmark]] timeout = 1 -set_perc = 0 get_perc = 100 dist = "zipfian" zipf_theta = 1.0 diff --git a/examples/writeheavy/writeheavy.toml b/examples/writeheavy/writeheavy.toml index 63a6656..b74d332 100644 --- a/examples/writeheavy/writeheavy.toml +++ b/examples/writeheavy/writeheavy.toml @@ -8,7 +8,6 @@ kmax = 1000000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" report = "hidden" diff --git a/examples/ycsbd/ycsbd.toml b/examples/ycsbd/ycsbd.toml index ac57b85..1e25c87 100644 --- a/examples/ycsbd/ycsbd.toml +++ b/examples/ycsbd/ycsbd.toml @@ -8,7 +8,6 @@ kmax = 1000000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "shufflep" report = "hidden" diff --git a/examples/your-kv-store/benchmark.toml b/examples/your-kv-store/benchmark.toml index f88a50e..6711c3c 100644 --- a/examples/your-kv-store/benchmark.toml +++ b/examples/your-kv-store/benchmark.toml @@ -8,7 +8,6 @@ kmax = 1000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" report = "hidden" diff --git a/presets/benchmarks/example.toml b/presets/benchmarks/example.toml index b9cb3ab..2d6616b 100644 --- a/presets/benchmarks/example.toml +++ b/presets/benchmarks/example.toml @@ -10,7 +10,6 @@ kmax = 1000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" diff --git a/presets/benchmarks/example_scan.toml b/presets/benchmarks/example_scan.toml index 9914240..54c61c8 100644 --- a/presets/benchmarks/example_scan.toml +++ b/presets/benchmarks/example_scan.toml @@ -11,7 +11,6 @@ kmax = 1000 [[benchmark]] set_perc = 100 -get_perc = 0 repeat = 1 dist = "incrementp" diff --git a/src/bench.rs b/src/bench.rs index b8f45d7..ef7a723 100644 --- a/src/bench.rs +++ b/src/bench.rs @@ -1122,8 +1122,8 @@ mod tests { assert_eq!(bg.len(), 1); let wopt = WorkloadOpt { - set_perc: 50, - get_perc: 30, + set_perc: Some(50), + get_perc: Some(30), del_perc: Some(10), scan_perc: Some(10), dist: "incrementp".to_string(), @@ -1173,8 +1173,8 @@ mod tests { assert_eq!(bg.len(), 1); let wopt = WorkloadOpt { - set_perc: 50, - get_perc: 30, + set_perc: Some(50), + get_perc: Some(30), del_perc: Some(10), scan_perc: Some(10), scan_n: None, diff --git a/src/workload.rs b/src/workload.rs index 38115e9..a9f1935 100644 --- a/src/workload.rs +++ b/src/workload.rs @@ -156,11 +156,11 @@ impl KeyGenerator { /// options, all fields must be present. #[derive(Deserialize, Clone, Debug, PartialEq)] pub struct WorkloadOpt { - /// Percentage of `SET` operations. - pub set_perc: u8, + /// Percentage of `SET` operations (optional, default 0). + pub set_perc: Option, - /// Percentage of `GET` operations. - pub get_perc: u8, + /// Percentage of `GET` operations (optional, default 0). + pub get_perc: Option, /// Percentage of `DELETE` operations (optional, default 0). pub del_perc: Option, @@ -229,8 +229,8 @@ pub struct Workload { impl Workload { pub fn new(opt: &WorkloadOpt, thread_info: Option<(usize, usize)>) -> Self { // input sanity checks - let set_perc = opt.set_perc; - let get_perc = opt.get_perc; + let set_perc = opt.set_perc.unwrap_or(0); + let get_perc = opt.get_perc.unwrap_or(0); let del_perc = opt.del_perc.unwrap_or(0); let scan_perc = opt.scan_perc.unwrap_or(0); assert_eq!( @@ -654,6 +654,17 @@ mod tests { let _ = Workload::new_from_toml_str(s, None); } + #[test] + #[should_panic(expected = "should be 100")] + fn workload_toml_invalid_wrong_mix_missing() { + let s = r#"klen = 4 + vlen = 6 + dist = "uniform" + kmin = 0 + kmax = 12345"#; + let _ = Workload::new_from_toml_str(s, None); + } + #[test] #[should_panic(expected = "invalid key distribution")] fn workload_toml_invalid_key_distribution() { @@ -687,8 +698,8 @@ mod tests { #[test] fn workload_keygen_parallel() { let mut opt = WorkloadOpt { - set_perc: 50, - get_perc: 50, + set_perc: Some(100), + get_perc: None, del_perc: None, scan_perc: None, scan_n: Some(10), @@ -723,8 +734,8 @@ mod tests { #[test] fn workload_keygen_parallel_fill() { let mut opt = WorkloadOpt { - set_perc: 100, - get_perc: 0, + set_perc: Some(100), + get_perc: None, del_perc: None, scan_perc: None, scan_n: Some(10), @@ -762,8 +773,8 @@ mod tests { #[test] fn workload_keygen_zipfian_latest() { let opt = WorkloadOpt { - set_perc: 5, - get_perc: 95, + set_perc: Some(5), + get_perc: Some(95), del_perc: None, scan_perc: None, scan_n: Some(10), @@ -809,8 +820,8 @@ mod tests { #[test] fn workload_uniform_write_intensive() { let opt = WorkloadOpt { - set_perc: 50, - get_perc: 50, + set_perc: Some(50), + get_perc: Some(50), del_perc: None, scan_perc: None, scan_n: Some(10), @@ -857,8 +868,8 @@ mod tests { #[test] fn workload_even_operations() { let opt = WorkloadOpt { - set_perc: 25, - get_perc: 25, + set_perc: Some(25), + get_perc: Some(25), del_perc: Some(25), scan_perc: Some(25), scan_n: None,