refactor: remove redundant multi-line search index unwrap clones across all handlers via new get_search_index accessor

This commit is contained in:
Riz Ashraf committed 2026-09-26 08:39:42 +01:00
1 parent d96b4cf822
commit 0ba0ed5b3d
5 files changed
+12 -36

No files matched your search

+2 -10
View File
@@ -126,11 +126,7 @@ impl McpTool for CreateEntitiesHandler {
} }
} }
}); });
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
for entity in inserted { for entity in inserted {
drop(idx.index_entity(&entity)); drop(idx.index_entity(&entity));
} }
@@ -237,11 +233,7 @@ impl McpTool for DeleteEntitiesHandler {
return Err(format!("Error: Entities not found: {}", missing.join(", "))); return Err(format!("Error: Entities not found: {}", missing.join(", ")));
} }
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
for name in to_delete { for name in to_delete {
drop(idx.delete_document(&name)); drop(idx.delete_document(&name));
} }
+2 -6
View File
@@ -21,11 +21,7 @@ impl McpTool for LogDecisionHandler {
async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> { async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> {
let req: LogDecisionTool = serde_json::from_value(args).map_err(|e| e.to_string())?; let req: LogDecisionTool = serde_json::from_value(args).map_err(|e| e.to_string())?;
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
let mut final_id = String::new(); let mut final_id = String::new();
state.adrs.modify(|adrs| { state.adrs.modify(|adrs| {
@@ -344,7 +340,7 @@ impl McpTool for OmniSearchHandler {
async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> { async fn execute(&self, args: Value, state: Arc<MemoryState>) -> Result<String, String> {
let req: OmniSearchTool = serde_json::from_value(args).map_err(|e| e.to_string())?; let req: OmniSearchTool = serde_json::from_value(args).map_err(|e| e.to_string())?;
let matches = { let matches = {
let idx = state.search_index.read().unwrap_or_else(|e| e.into_inner()); let idx = state.get_search_index();
idx.search(&req.query, req.namespace.as_deref()) idx.search(&req.query, req.namespace.as_deref())
.unwrap_or_default() .unwrap_or_default()
}; };
+2 -10
View File
@@ -37,11 +37,7 @@ impl McpTool for AddTaskHandler {
dependencies: deps, dependencies: deps,
acceptance_criteria: vec![], acceptance_criteria: vec![],
}; };
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
drop(idx.index_task(&task)); drop(idx.index_task(&task));
state.tasks.modify(|tasks| { state.tasks.modify(|tasks| {
tasks.push(task); tasks.push(task);
@@ -108,11 +104,7 @@ impl McpTool for DeleteTaskHandler {
}); });
if deleted_count > 0 { if deleted_count > 0 {
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
for id in actually_deleted { for id in actually_deleted {
drop(idx.delete_document(&id)); drop(idx.delete_document(&id));
} }
+2 -10
View File
@@ -118,11 +118,7 @@ impl McpTool for StoreSnippetHandler {
updated_at: crate::handlers::utils::now_secs(), updated_at: crate::handlers::utils::now_secs(),
}; };
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
drop(idx.index_snippet(&snippet)); drop(idx.index_snippet(&snippet));
state.snippets.modify(|snippets| { state.snippets.modify(|snippets| {
@@ -185,11 +181,7 @@ impl McpTool for DeleteSnippetHandler {
deleted = snippets.len() < orig; deleted = snippets.len() < orig;
}); });
if deleted { if deleted {
let idx = state let idx = state.get_search_index();
.search_index
.read()
.unwrap_or_else(|e| e.into_inner())
.clone();
drop(idx.delete_document(&req.name)); drop(idx.delete_document(&req.name));
Ok("Snippet deleted.".to_string()) Ok("Snippet deleted.".to_string())
} else { } else {
+4
View File
@@ -123,6 +123,10 @@ impl MemoryState {
self.graph.modify(update_fn); self.graph.modify(update_fn);
} }
pub fn get_search_index(&self) -> MemoryIndex {
self.search_index.read().unwrap_or_else(|e| e.into_inner()).clone()
}
pub async fn rebuild_index(self: &Arc<Self>) { pub async fn rebuild_index(self: &Arc<Self>) {
if let Ok(new_idx) = MemoryIndex::new(&self.base_dir) { if let Ok(new_idx) = MemoryIndex::new(&self.base_dir) {
let idx = new_idx.clone(); let idx = new_idx.clone();