总览:https://github.com/agentic-ai-java/argi-extensions/issues/30 ## 代码依据 https://github.com/agentic-ai-java/argi-extensions/blob/495414b76a37aca4d7c1022d973a8e5b9a7e92e6/mcp/argi-mcp-router/src/main/java/io/github/agentic/ai/mcp/router/core/McpRouterWatcher.java#L52 ## 问题与目标 刷新当前先 removeServer,再 getService,最后 addServer;查询异常或新增失败时,旧记录可能已经被删除。getService 返回 null 时使用 return,导致后续服务本轮不再处理。remove/add 的 boolean 返回值未核查,存在失败仍记录刷新成功的路径。尚未运行复现测试。 ## 范围与方案 先查询并验证新记录,再使用受控替换/upsert。区分发现失败、明确下线与暂时未知,定义旧快照保留和失效策略;单服务失败不阻断其他服务。与 OPT-01 的精确索引设计协调,但复现及循环中断修复可先推进。 ## 验收 - [ ] 查询抛异常时不先删除旧有效记录;新增/替换失败不会虚报成功。 - [ ] 首个服务缺失或异常时,后续服务仍被处理。 - [ ] 明确下线按约定删除,未知/失败不会被误判为下线;若发现接口无法区分,补充明确结果契约。 - [ ] 覆盖刷新期间查询、替换失败、单服务异常和成功更新的行为测试。 - [ ] 重用现有 Spring init/destroy 装配,避免为局部修复引入大规模生命周期重写。 不等待整体架构重写,不扩展 MCP 协议能力。 ## 变更约束 本单来自静态代码审查,尚未运行复现或性能测试。实施先补充针对性验证;破坏性变更需比较更小/兼容方案,记录收益、消费者影响、迁移成本和版本策略。允许保留有充分理由的现有设计。
Activity