2026-09-08 19:17:35 +08:00
|
|
|
|
"""Milvus 会话:全局单例 AsyncMilvusClient。
|
|
|
|
|
|
|
|
|
|
|
|
timeout 入参是数据操作默认超时(用 MILVUS_TIMEOUT);
|
|
|
|
|
|
构造为急切连接、由注册表 init_db 做指数退避重试 + 严格模式兜底。
|
|
|
|
|
|
"""
|
|
|
|
|
|
from pymilvus import AsyncMilvusClient
|
|
|
|
|
|
|
|
|
|
|
|
from config.settings import settings
|
|
|
|
|
|
|
|
|
|
|
|
_client: AsyncMilvusClient | None = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def client() -> AsyncMilvusClient:
|
|
|
|
|
|
global _client
|
|
|
|
|
|
if _client is None:
|
|
|
|
|
|
_client = AsyncMilvusClient(
|
|
|
|
|
|
uri=settings.milvus.uri,
|
|
|
|
|
|
token=settings.milvus.token,
|
|
|
|
|
|
user=settings.milvus.user,
|
|
|
|
|
|
password=settings.milvus.password,
|
|
|
|
|
|
db_name=settings.milvus.db_name,
|
|
|
|
|
|
timeout=settings.milvus.timeout,
|
|
|
|
|
|
)
|
|
|
|
|
|
return _client
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-09-11 10:47:01 +08:00
|
|
|
|
async def ensure_database(milvus_client: AsyncMilvusClient | None = None) -> None:
|
|
|
|
|
|
"""Create the configured project database only when it does not exist."""
|
|
|
|
|
|
target = milvus_client or client()
|
|
|
|
|
|
database_name = settings.milvus.db_name
|
|
|
|
|
|
if not database_name:
|
|
|
|
|
|
raise RuntimeError("MILVUS_DB must be configured")
|
|
|
|
|
|
if database_name not in await target.list_databases():
|
|
|
|
|
|
await target.create_database(database_name)
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-09-08 19:17:35 +08:00
|
|
|
|
async def init_db() -> None:
|
|
|
|
|
|
client() # 急切建连;失败由注册表重试(config/database/__init__.py)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def dispose() -> None:
|
|
|
|
|
|
global _client
|
|
|
|
|
|
if _client is not None:
|
|
|
|
|
|
await _client.close()
|
|
|
|
|
|
_client = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def check_health() -> None:
|
2026-09-11 10:47:01 +08:00
|
|
|
|
await client().get_server_version()
|