From aa435e2442ecd23bd7d8cba6534c1b1923007214 Mon Sep 17 00:00:00 2001 From: Dominik Werder Date: Tue, 29 Jul 2025 15:44:28 +0200 Subject: [PATCH] Options scylla 6 workarounds --- Cargo.toml | 1 + src/netpod.rs | 59 +++++++++++++++++++++++++++++++++---------- src/range/binrange.rs | 8 +++--- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 864fd03..91cf1c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ path = "src/netpod.rs" [dependencies] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +serde_yaml = "0.9.34" http = "1.0.0" humantime = "2.1.0" humantime-serde = "1.1.1" diff --git a/src/netpod.rs b/src/netpod.rs index 851a058..c8a5da8 100644 --- a/src/netpod.rs +++ b/src/netpod.rs @@ -1028,6 +1028,7 @@ pub struct Cluster { scylla_lt: Option, cache_scylla: Option, pub announce_backends: Option>, + use_scylla6_workarounds: Option, } impl Cluster { @@ -1049,6 +1050,12 @@ impl Cluster { self.scylla_lt.as_ref() } + pub fn use_scylla6_workarounds(&self) -> UseScylla6Workarounds { + self.use_scylla6_workarounds + .clone() + .unwrap_or(UseScylla6Workarounds::with_workarounds()) + } + pub fn test_00() -> Self { Self { backend: "testbackend-00".into(), @@ -1069,10 +1076,31 @@ impl Cluster { scylla_lt: None, cache_scylla: None, announce_backends: None, + use_scylla6_workarounds: None, } } } +#[test] +fn test_cluster_config_parse() { + let cfg = r###" +name: some-name +cluster: + backend: noname + database: + host: some + port: 123 + user: some + pass: some + name: some + nodes: + use_scylla6_workarounds: false +"###; + let cfg = serde_yaml::from_slice::(cfg.as_bytes()).unwrap(); + let v = *cfg.cluster.use_scylla6_workarounds(); + assert!(v == false); +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct NodeConfig { pub name: String, @@ -4034,6 +4062,7 @@ pub fn test_cluster() -> Cluster { is_central_storage: false, file_io_buffer_size: Default::default(), announce_backends: None, + use_scylla6_workarounds: None, } } @@ -4072,6 +4101,7 @@ pub fn sls_test_cluster() -> Cluster { is_central_storage: false, file_io_buffer_size: Default::default(), announce_backends: None, + use_scylla6_workarounds: None, } } @@ -4110,6 +4140,7 @@ pub fn archapp_test_cluster() -> Cluster { is_central_storage: false, file_io_buffer_size: Default::default(), announce_backends: None, + use_scylla6_workarounds: None, } } @@ -4533,11 +4564,15 @@ pub unsafe fn extltmut<'a, 'b, T>(t: &'a mut T) -> &'b mut T { unsafe { core::mem::transmute(t) } } -#[derive(Debug, Clone)] -pub struct UseScylla6Workarounds(pub bool); +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UseScylla6Workarounds(bool); -impl Default for UseScylla6Workarounds { - fn default() -> Self { +impl UseScylla6Workarounds { + pub fn production_default() -> Self { + Self::with_workarounds() + } + + pub fn with_workarounds() -> Self { Self(true) } } @@ -4550,14 +4585,12 @@ impl std::ops::Deref for UseScylla6Workarounds { } } -impl From> for UseScylla6Workarounds { - fn from(value: Option) -> Self { - value.map_or(Default::default(), |x| { - if x == 0 { - UseScylla6Workarounds(false) - } else { - UseScylla6Workarounds(true) - } - }) +impl From for UseScylla6Workarounds { + fn from(value: u32) -> Self { + if value == 0 { + UseScylla6Workarounds(false) + } else { + UseScylla6Workarounds(true) + } } } diff --git a/src/range/binrange.rs b/src/range/binrange.rs index c303112..d3ea95b 100644 --- a/src/range/binrange.rs +++ b/src/range/binrange.rs @@ -1,10 +1,10 @@ #![allow(unused)] use super::evrange::NanoRange; use super::evrange::SeriesRange; -use crate::timeunits::SEC; use crate::BinnedRangeEnum; use crate::Dim0Kind; use crate::TsNano; +use crate::timeunits::SEC; use chrono::DateTime; use chrono::Utc; @@ -24,7 +24,7 @@ fn test_binned_range_covering_00() { } else { panic!() } - let r2 = r.binned_range_time(); + let r2 = r.binned_range_time().unwrap(); let a = r2.edges(); assert_eq!(a.len(), 1 + r.bin_count() as usize); assert_eq!(a[0], TsNano((((10 * 60) + 10) * 60 + 0) * SEC)); @@ -54,7 +54,7 @@ fn test_binned_range_covering_01() { } else { panic!() } - let r2 = r.binned_range_time(); + let r2 = r.binned_range_time().unwrap(); let a = r2.edges(); assert_eq!(a.len(), 1 + r.bin_count() as usize); assert_eq!(a[0], TsNano((((0 * 60) + 20) * 60 + 0) * SEC)); @@ -84,7 +84,7 @@ fn test_binned_range_covering_02() { } else { panic!() } - let r2 = r.binned_range_time(); + let r2 = r.binned_range_time().unwrap(); let a = r2.edges(); assert_eq!(a.len(), 1 + r.bin_count() as usize); assert_eq!(a[0], TsNano((((0 * 60) + 20) * 60 + 0) * SEC));