From 45a4802c65e612120d8eb17cc4e6effa9a789eec Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Thu, 23 Apr 2026 16:13:06 -0400 Subject: [PATCH] drop raw settings cache from app state --- lib/crates/fabro-server/src/serve.rs | 13 +++++++++---- lib/crates/fabro-server/src/server.rs | 14 -------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/lib/crates/fabro-server/src/serve.rs b/lib/crates/fabro-server/src/serve.rs index 27989db55..ca1006e2d 100644 --- a/lib/crates/fabro-server/src/serve.rs +++ b/lib/crates/fabro-server/src/serve.rs @@ -730,6 +730,7 @@ where // Spawn config polling task let state_for_poll = Arc::clone(&state); + let shared_settings_for_poll = Arc::clone(&shared_settings); let config_path_for_poll = config_path.clone(); let args_for_poll = args.clone(); let data_dir_for_poll = data_dir.clone(); @@ -746,15 +747,19 @@ where &data_dir_for_poll, ); let changed = { - let cfg = state_for_poll - .settings + let cfg = shared_settings_for_poll .read() .expect("config lock poisoned"); *cfg != effective }; if changed { - match state_for_poll.replace_settings(effective) { - Ok(()) => info!("Server config reloaded"), + match state_for_poll.replace_settings(effective.clone()) { + Ok(()) => { + *shared_settings_for_poll + .write() + .expect("config lock poisoned") = effective; + info!("Server config reloaded"); + } Err(err) => { warn!(error = %err, "Rejected reloaded server config, keeping previous"); } diff --git a/lib/crates/fabro-server/src/server.rs b/lib/crates/fabro-server/src/server.rs index 4c8408d09..ee47d1cdf 100644 --- a/lib/crates/fabro-server/src/server.rs +++ b/lib/crates/fabro-server/src/server.rs @@ -575,7 +575,6 @@ pub struct AppState { pub(crate) vault: Arc>, pub(super) server_secrets: ServerSecrets, pub(crate) provider_credentials: ProviderCredentials, - pub(crate) settings: Arc>, manifest_defaults: RwLock>, pub(crate) server_settings: RwLock>, pub(crate) env_lookup: EnvLookup, @@ -797,7 +796,6 @@ impl AppState { let manifest_defaults = Arc::new(run_manifest::manifest_defaults_layer(&settings)); resolve_canonical_origin(&resolved.server, &self.env_lookup).map_err(anyhow::Error::msg)?; - *self.settings.write().expect("settings lock poisoned") = settings; *self .manifest_defaults .write() @@ -2646,7 +2644,6 @@ pub(crate) fn build_app_state(config: AppStateConfig) -> anyhow::Result