-
Notifications
You must be signed in to change notification settings - Fork 385
Open
Labels
kind/bugSomething isn't workingSomething isn't working
Description
Is there an existing issue for this?
- I have searched the existing issues
Describe the bug
在pymilvus客户端开启连接的keep_alive功能后,若运行期间通过using_database()切换数据库,后续自动重连时会丢失切换后的db_name,回退为初始connect时设置的db_name(通常为default)。这将导致后续请求在default库下进行,实际目标库丢失。
Expected Behavior
自动重连时应保留最近一次设置的db_name(即using_database最后设置的值),而不是使用连接初建时的db_name。
Steps/Code To Reproduce behavior
1. 使用connections.connect(host=..., port=..., db_name="xxx", keep_alive=True)连接Milvus。
2. 在运行期间调用db.using_database("target_db")切换工作库。
3. 正常访问一段时间后(如网络抖动/连接idle),触发自动重连(由keep_alive机制)。
4. 之后再访问集合,发现请求实际转到default数据库,收到"can't find collection [database=default][collection=xxx]"等报错。Environment details
- pymilvus版本:最新稳定版 (如需具体填写请补充)
- 操作系统与Python版本:常规Linux服务器+Python 3.8及以上
- 安装方式:pip安装
- Milvus服务端版本:2.x系列Anything else?
查阅源码发现,ReconnectHandler在注册自动重连回调时,会保存connect时的kwargs快照用于后续重连。这性导致后续using_database动态切换不会同步到自动重连逻辑,建议优化为每次重连前同步最新handler的db_name。
相关代码位置举例:
- pymilvus/orm/connections.py ReconnectHandler, connect方法、keep_alive参数注册
- pymilvus/orm/db.py using_database实现
谢谢!
Metadata
Metadata
Assignees
Labels
kind/bugSomething isn't workingSomething isn't working