From ed42f738f164d2a356edefbcc434ee0a8c89e120 Mon Sep 17 00:00:00 2001 From: Riz Ashraf Date: Mon, 21 Sep 2026 05:44:34 +0100 Subject: [PATCH] Optimize graph relation filtering and fix concurrent connection storms --- nvim-core/src/lib.rs | 12 ++++-------- server/src/handlers.rs | 15 ++------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/nvim-core/src/lib.rs b/nvim-core/src/lib.rs index 2d122bc..2ee1ed8 100644 --- a/nvim-core/src/lib.rs +++ b/nvim-core/src/lib.rs @@ -126,12 +126,10 @@ pub struct NvimRequest { static NVIM_CONN: LazyLock>>>> = LazyLock::new(|| Arc::new(Mutex::new(None))); async fn get_nvim_connection() -> Result, String> { - { - let conn_lock = NVIM_CONN.lock().await; - if let Some(sender) = conn_lock.as_ref() { - if !sender.is_closed() { - return Ok(sender.clone()); - } + let mut conn_lock = NVIM_CONN.lock().await; + if let Some(sender) = conn_lock.as_ref() { + if !sender.is_closed() { + return Ok(sender.clone()); } } @@ -243,7 +241,6 @@ async fn get_nvim_connection() -> Result, String> { } }); - let mut conn_lock = NVIM_CONN.lock().await; *conn_lock = Some(tx.clone()); Ok(tx) } @@ -1004,7 +1001,6 @@ fn init_logging(app_name: &str) -> tracing_appender::non_blocking::WorkerGuard { mod tests { use super::*; use tokio::io::BufReader; - use tokio::io::AsyncReadExt; #[test] fn test_rmpv_to_json_primitives() { diff --git a/server/src/handlers.rs b/server/src/handlers.rs index f8274ef..dd60ac9 100644 --- a/server/src/handlers.rs +++ b/server/src/handlers.rs @@ -511,19 +511,8 @@ impl MemoryHandler { "delete_relations" => { let req = parse_tool!(args.clone(), id, DeleteRelationsTool); self.state.modify_graph(|master| { - let mut to_rem = HashSet::new(); - for r in req.relations { - to_rem.insert(format!( - "{}|{}|{}|{}", - r.from, r.to, r.relation_type, r.namespace - )); - } - master.relations.retain(|r| { - !to_rem.contains(&format!( - "{}|{}|{}|{}", - r.from, r.to, r.relation_type, r.namespace - )) - }); + let to_rem: HashSet<_> = req.relations.into_iter().collect(); + master.relations.retain(|r| !to_rem.contains(r)); }); Ok("Relations deleted".to_string()) }