diff --git a/crates/miroir-core/src/session_pinning.rs b/crates/miroir-core/src/session_pinning.rs index 1a772f5..1209185 100644 --- a/crates/miroir-core/src/session_pinning.rs +++ b/crates/miroir-core/src/session_pinning.rs @@ -375,9 +375,13 @@ impl SessionManager { } /// Update the session active count metric. + /// + /// Note: This must be called from an async context since it uses + /// try_read() to avoid blocking the runtime. pub fn update_metrics(&self, active_count_fn: impl FnOnce(usize)) { - let count = self.sessions.blocking_read().len(); - active_count_fn(count); + if let Ok(guard) = self.sessions.try_read() { + active_count_fn(guard.len()); + } } /// Check if session pinning is enabled. diff --git a/crates/miroir-proxy/src/main.rs b/crates/miroir-proxy/src/main.rs index 22627eb..12723de 100644 --- a/crates/miroir-proxy/src/main.rs +++ b/crates/miroir-proxy/src/main.rs @@ -164,6 +164,7 @@ impl FromRef for admin_endpoints::AppState { alias_registry: state.admin.alias_registry.clone(), leader_election: state.admin.leader_election.clone(), mode_c_worker: state.admin.mode_c_worker.clone(), + replica_selector: state.admin.replica_selector.clone(), } } } diff --git a/crates/miroir-proxy/src/routes/admin_endpoints.rs b/crates/miroir-proxy/src/routes/admin_endpoints.rs index 25d667e..16613d9 100644 --- a/crates/miroir-proxy/src/routes/admin_endpoints.rs +++ b/crates/miroir-proxy/src/routes/admin_endpoints.rs @@ -336,6 +336,8 @@ pub struct AppState { pub leader_election: Option>, /// Mode C worker for chunked background jobs (plan §14.5 Mode C). pub mode_c_worker: Option>, + /// Adaptive replica selector (plan §13.3). + pub replica_selector: Arc, } impl AppState { @@ -631,6 +633,7 @@ impl AppState { alias_registry, leader_election, mode_c_worker, + replica_selector: Arc::new(miroir_core::replica_selection::ReplicaSelector::default()), } } diff --git a/miroir.yaml b/miroir.yaml index 9d229be..0e06a3f 100644 --- a/miroir.yaml +++ b/miroir.yaml @@ -2,6 +2,9 @@ shards: 64 replication_factor: 1 replica_groups: 1 +master_key: "test-master-key" +admin: + api_key: "test-admin-key" task_store: backend: sqlite path: /tmp/miroir-tasks-test.db @@ -12,3 +15,25 @@ search_ui: enabled: false admin_ui: enabled: false +cdc: + enabled: false +multi_search: + enabled: false +vector_search: + enabled: false +ttl: + enabled: false +tenant_affinity: + enabled: false +shadow: + enabled: false +ilm: + enabled: false +canary_runner: + enabled: false +explain: + enabled: false +hpa: + enabled: false +leader_election: + enabled: false