Skip to content

Bug: keep_alive自动重连丢失using_database设置,导致db_name回退为default #3066

@ymsshen

Description

@ymsshen

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

No one assigned

    Labels

    kind/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions