Optimize full graph rebuilds with batch indexing to prevent thread exhaustion, and fix adr/snippet search availability before restart

This commit is contained in:
Riz Ashraf committed 2026-09-21 05:56:58 +01:00
1 parent 84672a00b9
commit a9885a65d7
3 files changed
+102 -47

No files matched your search

+61
View File
@@ -180,6 +180,67 @@ impl MemoryIndex {
Ok(())
})
}
pub fn index_batch(
&self,
entities: Vec<Entity>,
tasks: Vec<Task>,
snippets: Vec<Snippet>,
adrs: Vec<Adr>,
) -> tokio::task::JoinHandle<tantivy::Result<()>> {
let writer = Arc::clone(&self.writer);
let id_field = self.id_field;
let title_field = self.title_field;
let body_field = self.body_field;
let type_field = self.type_field;
let namespace_field = self.namespace_field;
tokio::task::spawn_blocking(move || {
let writer = writer.lock().unwrap();
for e in entities {
writer.add_document(doc!(
id_field => e.name.clone(),
title_field => e.name.clone(),
body_field => e.observations.join(" "),
type_field => "entity",
namespace_field => e.namespace.clone()
))?;
}
for t in tasks {
writer.add_document(doc!(
id_field => t.id.clone(),
title_field => t.title.clone(),
body_field => t.description.clone(),
type_field => "task",
namespace_field => "global"
))?;
}
for s in snippets {
writer.add_document(doc!(
id_field => s.name.clone(),
title_field => s.name.clone(),
body_field => format!("{} {}", s.language, s.description),
type_field => "snippet",
namespace_field => "global"
))?;
}
for a in adrs {
writer.add_document(doc!(
id_field => a.id.clone(),
title_field => a.title.clone(),
body_field => format!("{} {} {}", a.context, a.decision, a.consequence),
type_field => "adr",
namespace_field => "global"
))?;
}
Ok(())
})
}
}
#[cfg(test)]