use std::sync::OnceLock;
use serde::Serialize;
static SIMD_DOT: OnceLock<bool> = OnceLock::new();
static PARALLEL_SEARCH: OnceLock<bool> = OnceLock::new();
static PRECONVERT_F16: OnceLock<bool> = OnceLock::new();
static CONFIG_SOURCE: OnceLock<ConfigSource> = OnceLock::new();
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum ConfigSource {
Env,
Default,
}
impl ConfigSource {
pub fn as_str(self) -> &'static str {
match self {
ConfigSource::Env => "env",
ConfigSource::Default => "default",
}
}
}
fn read_bool_env(name: &str, default_value: bool) -> (bool, bool) {
let raw = match dotenvy::var(name) {
Ok(v) => v,
Err(_) => return (default_value, false),
};
let normalized = raw.trim().to_ascii_lowercase();
let parsed = match normalized.as_str() {
"" => Some(default_value),
"1" | "true" | "on" | "yes" => Some(true),
"0" | "false" | "off" | "no" => Some(false),
_ => None,
};
match parsed {
Some(b) => {
tracing::debug!(
target: "cass::runtime_optimizations",
env_var = name,
raw = raw.as_str(),
value = b,
"runtime optimization configured from env var"
);
(b, true)
}
None => {
tracing::warn!(
target: "cass::runtime_optimizations",
env_var = name,
raw = raw.as_str(),
"unrecognized CASS_* env var value; treating as enabled. Recognized values: 1/true/on/yes (enable) or 0/false/off/no (disable)."
);
(default_value, true)
}
}
}
pub fn init_from_env() -> RuntimeOptimizationsSnapshot {
let (simd, simd_from_env) = read_bool_env("CASS_SIMD_DOT", true);
let (par, par_from_env) = read_bool_env("CASS_PARALLEL_SEARCH", true);
let (pre, pre_from_env) = read_bool_env("CASS_F16_PRECONVERT", true);
let _ = SIMD_DOT.set(simd);
let _ = PARALLEL_SEARCH.set(par);
let _ = PRECONVERT_F16.set(pre);
let any_from_env = simd_from_env || par_from_env || pre_from_env;
let source = if any_from_env {
ConfigSource::Env
} else {
ConfigSource::Default
};
let _ = CONFIG_SOURCE.set(source);
let snap = RuntimeOptimizationsSnapshot {
simd_dot: *SIMD_DOT.get().unwrap_or(&true),
parallel_search: *PARALLEL_SEARCH.get().unwrap_or(&true),
preconvert_f16: *PRECONVERT_F16.get().unwrap_or(&true),
config_source: *CONFIG_SOURCE.get().unwrap_or(&ConfigSource::Default),
};
tracing::info!(
target: "cass::runtime_optimizations",
simd_dot = snap.simd_dot,
parallel_search = snap.parallel_search,
preconvert_f16 = snap.preconvert_f16,
config_source = snap.config_source.as_str(),
"runtime optimizations resolved"
);
snap
}
#[must_use]
pub fn simd_dot_enabled() -> bool {
if SIMD_DOT.get().is_none() {
init_from_env();
}
*SIMD_DOT.get().unwrap_or(&true)
}
#[must_use]
pub fn parallel_search_enabled() -> bool {
if PARALLEL_SEARCH.get().is_none() {
init_from_env();
}
*PARALLEL_SEARCH.get().unwrap_or(&true)
}
#[must_use]
pub fn preconvert_f16_enabled() -> bool {
if PRECONVERT_F16.get().is_none() {
init_from_env();
}
*PRECONVERT_F16.get().unwrap_or(&true)
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
pub struct RuntimeOptimizationsSnapshot {
pub simd_dot: bool,
pub parallel_search: bool,
pub preconvert_f16: bool,
pub config_source: ConfigSource,
}
impl RuntimeOptimizationsSnapshot {
#[must_use]
pub fn current() -> Self {
let simd = simd_dot_enabled();
let par = parallel_search_enabled();
let pre = preconvert_f16_enabled();
let src = *CONFIG_SOURCE.get().unwrap_or(&ConfigSource::Default);
RuntimeOptimizationsSnapshot {
simd_dot: simd,
parallel_search: par,
preconvert_f16: pre,
config_source: src,
}
}
#[must_use]
pub fn to_json_value(&self) -> serde_json::Value {
serde_json::json!({
"simd_dot": self.simd_dot,
"parallel_search": self.parallel_search,
"preconvert_f16": self.preconvert_f16,
"config_source": self.config_source.as_str(),
})
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn read_bool_env_recognizes_truthy_and_falsy_values() {
unsafe {
std::env::set_var("CASS_TEST_RBE_TRUTHY_1", "1");
std::env::set_var("CASS_TEST_RBE_TRUTHY_2", "true");
std::env::set_var("CASS_TEST_RBE_TRUTHY_3", "ON");
std::env::set_var("CASS_TEST_RBE_TRUTHY_4", "yes");
std::env::set_var("CASS_TEST_RBE_FALSY_1", "0");
std::env::set_var("CASS_TEST_RBE_FALSY_2", "false");
std::env::set_var("CASS_TEST_RBE_FALSY_3", "OFF");
std::env::set_var("CASS_TEST_RBE_FALSY_4", "no");
}
for name in [
"CASS_TEST_RBE_TRUTHY_1",
"CASS_TEST_RBE_TRUTHY_2",
"CASS_TEST_RBE_TRUTHY_3",
"CASS_TEST_RBE_TRUTHY_4",
] {
let (v, _) = read_bool_env(name, true);
assert!(v, "{name} should resolve as true");
}
for name in [
"CASS_TEST_RBE_FALSY_1",
"CASS_TEST_RBE_FALSY_2",
"CASS_TEST_RBE_FALSY_3",
"CASS_TEST_RBE_FALSY_4",
] {
let (v, _) = read_bool_env(name, true);
assert!(!v, "{name} should resolve as false");
}
}
#[test]
fn read_bool_env_unset_returns_default_with_not_from_env() {
let (v, from_env) = read_bool_env("CASS_TEST_RBE_NEVER_SET_8c14a293", true);
assert!(v);
assert!(!from_env);
let (v, from_env) = read_bool_env("CASS_TEST_RBE_NEVER_SET_8c14a294", false);
assert!(!v);
assert!(!from_env);
}
#[test]
fn read_bool_env_unrecognized_value_falls_back_to_default_with_from_env_true() {
unsafe {
std::env::set_var("CASS_TEST_RBE_BANANA", "banana");
}
let (v, from_env) = read_bool_env("CASS_TEST_RBE_BANANA", true);
assert!(v);
assert!(from_env);
}
#[test]
fn snapshot_to_json_has_documented_shape() {
let snap = RuntimeOptimizationsSnapshot {
simd_dot: true,
parallel_search: false,
preconvert_f16: true,
config_source: ConfigSource::Env,
};
let v = snap.to_json_value();
assert_eq!(v["simd_dot"], true);
assert_eq!(v["parallel_search"], false);
assert_eq!(v["preconvert_f16"], true);
assert_eq!(v["config_source"], "env");
}
#[test]
fn config_source_default_when_no_env_set() {
let snap = RuntimeOptimizationsSnapshot {
simd_dot: true,
parallel_search: true,
preconvert_f16: true,
config_source: ConfigSource::Default,
};
assert_eq!(snap.to_json_value()["config_source"], "default");
}
}