ADR-001: Milvus Database Isolation¶
Status: Accepted
Context¶
Multi-industry deployments need physical isolation between domains without cross-tenant scalar filter bugs.
Decision¶
plugin_namespacemaps to a Milvus Database (core->default,lakehouse-bi->lakehouse_bi).- Each DB has base collections
eagle_text+eagle_visual; plugins add specialized collections. kb_nameremains a scalar filter within a DB.
Consequences¶
- No
plugin_namespaceMilvus scalar field. MilvusClientPoolbindsdb_nameat client construction; noclose()on pooled clients.
Evidence (pymilvus semantics, G17/G24)¶
Verified against pymilvus official docs/examples (manage_milvus_client/how_to_manage_milvus_client.md):
MilvusClient(uri, db_name=...)binds the client to a specific Database context. Thedb_nameparameter is part of the constructor signature.- Multiple
MilvusClientinstances on the same URI share the same underlying connection (same alias). Each client keeps its own DB context, so operations hit different databases over a single connection. close()on one client invalidates all clients sharing that connection (alias ≠ independent TCP). This is whyMilvusClientPoolforbidsclose()and pools per-DB clients for the process lifetime.- LlamaIndex
MilvusVectorStoredoes not exposedb_name, so the text store is a thinMilvusClient(uri, db_name=)wrapper (aligned with the visual store), notMilvusVectorStore.