缺陷描述
cli/main.py 通过 @cli.result_callback() 注册 cleanup() 来调用 manager.shutdown()。Click 的 result_callback 仅在命令正常返回后触发;当命令抛出 ClickException/Abort/其它异常时不会执行,manager.shutdown() 被跳过。
影响
- CLI 异常退出时数据库连接(SQLAlchemy engine / aiosqlite)未释放,造成连接泄漏
- 重复运行 CLI 时资源累积
文件位置
cli/openjiuwen_runtime/cli/main.py 第 111-116 行(cleanup)、第 188 行附近
修复建议
- 将
manager.shutdown() 提取为幂等函数,并通过 atexit.register 兜底;
result_callback 也改为调用该幂等函数,避免重复关闭。
验证
SQLAlchemyHandler.disconnect() 通过 if self.engine: await self.engine.dispose() 实现,重复调用安全。
缺陷描述
cli/main.py通过@cli.result_callback()注册cleanup()来调用manager.shutdown()。Click 的result_callback仅在命令正常返回后触发;当命令抛出ClickException/Abort/其它异常时不会执行,manager.shutdown()被跳过。影响
文件位置
cli/openjiuwen_runtime/cli/main.py第 111-116 行(cleanup)、第 188 行附近修复建议
manager.shutdown()提取为幂等函数,并通过atexit.register兜底;result_callback也改为调用该幂等函数,避免重复关闭。验证
SQLAlchemyHandler.disconnect()通过if self.engine: await self.engine.dispose()实现,重复调用安全。