From 11328dee65176f7a7102c36abe2eeb1f70cac8f6 Mon Sep 17 00:00:00 2001 From: Alex Snaps Date: Mon, 22 Jun 2026 11:27:48 -0400 Subject: [PATCH 1/3] refactor(core): Removed `Arc` from sigs where not required Signed-off-by: Alex Snaps --- server/src/server.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/server.rs b/server/src/server.rs index 13eebd30..efad9cfe 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -151,7 +151,7 @@ fn build_server_state(config: &Config, registry: &FilterRegistry) -> ServerState fn register_protocols( server: &mut PingoraServerRuntime, config: &Config, - pipelines: &Arc, + pipelines: &ListenerPipelines, ) -> CertWatcherShutdowns { let mut all_shutdowns = Vec::new(); @@ -182,10 +182,10 @@ fn spawn_watcher( let path = config_path?; let handle = crate::watcher::spawn_config_watcher(crate::watcher::WatcherParams { config_path: path, - health_shutdown: Arc::clone(&state.health_shutdown), + health_shutdown: state.health_shutdown, initial_config: config, kv_stores: state.kv_stores, - pipelines: Arc::clone(&state.pipelines), + pipelines: state.pipelines, registry: Arc::new(registry), #[cfg(feature = "ai-inference")] response_stores: state.response_stores, From dadd134331f0cc6a57df4ceed7cdff1403948b26 Mon Sep 17 00:00:00 2001 From: Alex Snaps Date: Tue, 23 Jun 2026 08:26:37 -0400 Subject: [PATCH 2/3] refactor(core): `ServerState` doesn't need `HealthRegistry` Signed-off-by: Alex Snaps --- server/src/server.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/server/src/server.rs b/server/src/server.rs index efad9cfe..0cf9fcf5 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -79,12 +79,13 @@ pub fn run_server_with_registry(config: Config, registry: FilterRegistry, config init_runtime_limits(&config.runtime); warn_insecure_key_permissions(&config); - let state = build_server_state(&config, ®istry); + let health_registry = build_health_registry(&config.clusters); + let state = build_server_state(&config, ®istry, &health_registry); info!("initializing server"); let mut server = PingoraServerRuntime::new(&config); let _cert_shutdowns = register_protocols(&mut server, &config, &state.pipelines); - register_admin_endpoints(&mut server, &config, &state.health_registry, &state.kv_stores); + register_admin_endpoints(&mut server, &config, &health_registry, &state.kv_stores); let _watcher = spawn_watcher(config_path, config, registry, state); @@ -101,8 +102,6 @@ pub fn run_server_with_registry(config: Config, registry: FilterRegistry, config struct ServerState { /// Resolved filter pipelines per listener. pipelines: Arc, - /// Cluster health state. - health_registry: HealthRegistry, /// KV store registry. kv_stores: praxis_core::kv::KvStoreRegistry, /// Health check cancellation token. @@ -113,9 +112,8 @@ struct ServerState { } /// Build filter pipelines, health checks, and registries. -fn build_server_state(config: &Config, registry: &FilterRegistry) -> ServerState { +fn build_server_state(config: &Config, registry: &FilterRegistry, health_registry: &HealthRegistry) -> ServerState { info!("building filter pipelines"); - let health_registry = build_health_registry(&config.clusters); let kv_stores = praxis_core::kv::KvStoreRegistry::new(); #[cfg(feature = "ai-inference")] let response_stores = praxis_filter::ResponseStoreRegistry::new(); @@ -123,7 +121,7 @@ fn build_server_state(config: &Config, registry: &FilterRegistry) -> ServerState let pipelines = resolve_pipelines( config, registry, - &health_registry, + health_registry, &kv_stores, #[cfg(feature = "ai-inference")] &response_stores, @@ -131,11 +129,10 @@ fn build_server_state(config: &Config, registry: &FilterRegistry) -> ServerState .unwrap_or_else(|e| fatal(&e)); let health_shutdown = Arc::new(Mutex::new(CancellationToken::new())); - spawn_health_check_tasks(config, &health_registry, &health_shutdown); + spawn_health_check_tasks(config, health_registry, &health_shutdown); ServerState { pipelines: Arc::new(pipelines), - health_registry, kv_stores, health_shutdown, #[cfg(feature = "ai-inference")] From 422ded141d59c6d27142aaa698c1b1eed844da2d Mon Sep 17 00:00:00 2001 From: Alex Snaps Date: Tue, 23 Jun 2026 08:29:12 -0400 Subject: [PATCH 3/3] refactor(core): `Arc` lifecycle cleanup Signed-off-by: Alex Snaps --- server/src/server.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/server/src/server.rs b/server/src/server.rs index 0cf9fcf5..a58a4fa4 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -85,7 +85,7 @@ pub fn run_server_with_registry(config: Config, registry: FilterRegistry, config info!("initializing server"); let mut server = PingoraServerRuntime::new(&config); let _cert_shutdowns = register_protocols(&mut server, &config, &state.pipelines); - register_admin_endpoints(&mut server, &config, &health_registry, &state.kv_stores); + register_admin_endpoints(&mut server, &config, health_registry, &state.kv_stores); let _watcher = spawn_watcher(config_path, config, registry, state); @@ -129,7 +129,7 @@ fn build_server_state(config: &Config, registry: &FilterRegistry, health_registr .unwrap_or_else(|e| fatal(&e)); let health_shutdown = Arc::new(Mutex::new(CancellationToken::new())); - spawn_health_check_tasks(config, health_registry, &health_shutdown); + spawn_health_check_tasks(config, Arc::clone(health_registry), &health_shutdown); ServerState { pipelines: Arc::new(pipelines), @@ -199,14 +199,14 @@ fn spawn_watcher( fn register_admin_endpoints( server: &mut PingoraServerRuntime, config: &Config, - health_registry: &HealthRegistry, + health_registry: HealthRegistry, kv_stores: &praxis_core::kv::KvStoreRegistry, ) { if let Some(admin_addr) = &config.admin.address { praxis_protocol::http::pingora::health::add_admin_endpoints_to_pingora_server( server.server_mut(), admin_addr, - Some(Arc::clone(health_registry)), + Some(health_registry), Some(kv_stores.clone()), config.admin.verbose, ); @@ -390,7 +390,7 @@ fn warn_insecure_key_permissions(_config: &Config) {} #[expect(clippy::expect_used, reason = "fatal")] fn spawn_health_check_tasks( config: &Config, - registry: &HealthRegistry, + registry: HealthRegistry, health_shutdown: &Arc>, ) { if registry.is_empty() { @@ -399,7 +399,6 @@ fn spawn_health_check_tasks( let shutdown = health_shutdown.lock().expect("health shutdown lock").clone(); let clusters = config.clusters.clone(); - let registry = Arc::clone(registry); std::thread::spawn(move || { let rt = tokio::runtime::Builder::new_current_thread()