Skip to content

[Bug]: 多 CN 下仍被远程锁依赖的 Idle CN 被驱逐,导致 DML 失败 #623

Description

@VioletQwQ-0

Is there an existing issue for the same bug?

  • 已检查现有 issue。

Environment

FULLTEXT2 shared-dev 多 CN campaign 20260920t065720z-campaign,EVENTUAL 一致性。run 目录:/home/sunyuze/ft2-runner/fulltext2-dev-incremental-v4-20260904/runs/20260920t065720z-campaign。以下为历史运行证据,不把当前本地源码候选当作故障部署版本。

Actual Behavior

**已证实的故障链:**在 20260920t065720z-campaign 的多 CN 环境中,Pod freetier-01-s16c64g-854877c9c-cn-gvhx9 的采集标签为 pool_phase=Idle,无当前 owner;但其他 CN 的远程锁 binding 仍指向它。历史 kube_pod_info 将 172.20.50.15 映射到该 Pod(UID d1ff351f-c9d6-485b-819f-b2f53fcc9ea5);Operator 与锁服务日志中的 CN UUID 同为 61323136-6562-3964-3436-393562363564。6003 是本次失败的锁服务 RPC 端口。

2026-09-20 UTC 的时间线:

时间 原始记录
14:51:01 unit-agent 因节点整合选择迁移 gvhx9,记录 Pod is not managed by CNClaim, evict it gracefully;Operator 将 CN 标记为 draining
14:51:17 Operator 请求 HAKeeper 移除该 CN 并移除 finalizer;CloneSet 记录成功删除 Pod,kubelet 记录停止主容器
14:51:17.947 gvhx9 自身记录收到 terminated 信号并开始关闭
14:51:17.997 起 CN g2hkm、dbbh6 向指向 gvhx9 的远程锁 binding 请求时出现 EOF、failed to lock on remote 和 172.20.50.15:6003 连接拒绝
14:51:28 起 本 campaign 的 documents 表 INSERT/UPDATE/DELETE 失败;harness 因事务结果未知终止,partial_gate=FAILED、transport_errors=6

因此,节点整合驱逐了仍被其他 CN 依赖的锁服务 CN,直接触发 DML 失败。这不是仅凭拓扑变化与错误时间接近作出的推测。尚未定位的是:故障部署版本为何在远程锁依赖仍存在时放行删除——是退出握手未覆盖该路径、内核完成条件过早,还是 binding 迁移/失效传播存在问题。

Expected Behavior

正常驱逐不能仅凭 CN 无客户端会话判断其可以退出。只要其他 CN 仍依赖其锁服务,就应保持该 CN 运行,直到锁依赖安全迁移并获得明确退出确认;无法确认时阻止删除。

Steps to Reproduce

  1. 核对 2026-09-20 14:51 UTC 的历史 Prometheus kube_pod_info{pod_ip="172.20.50.15"},以及 unit-agent、Operator、Kruise、kubelet、gvhx9、g2hkm、dbbh6 的 Loki 日志。2026-09-21 的只读取证会话已完成上述关联;不需靠重跑 dev 才能确认本次触发链。
  2. 修复验证使用独立环境:让 CN A 无客户端会话但承载 CN B 的远程锁,再触发正常驱逐并执行真实 DML;断言锁依赖解除前主容器不退出、事务结果明确、超时不强删。此受控用例目前 NOT_RUN。

Additional information

已保存的只读历史证据:

文件 SHA-256
outputs/run-state.json 8705b59ffc40fb221719087d7fb266445cf5bd3f9b58469c3f83291ebd1efefa
outputs/topology-change.json 8b75c92a22c753c3bcf4cfe4a2ba62007956f2d610acd776de0160745ad0e06f
outputs/gate-overall.json 39de2a14aba6a2557676abcff2549e3b58950ef42d90f04f178cb17db52b5948

**我们已尝试:**Operator 本地候选补了 drain 尝试持久化、实例核验和不确定状态下保留保护;内核本地候选补了实例绑定的 BeginDrain/QueryDrain。临时源码 workspace 的控制器/envtest/race 和内核定向测试通过。这些是本地候选验证,未部署到发生故障的环境。unit-agent 的交接/取消候选也已分析,但精确 cos 依赖不可得,本地测试为 BLOCKED_ENVIRONMENT。

**目前阻塞:**Operator 固定的 MatrixOne 依赖尚无新协议符号,独立构建失败;没有可发布的内核协议版本及旧/新二进制兼容证明,也未完成独立环境的真实双 CN 受控驱逐、部署和 QA。因此不能直接重跑正式 dev campaign。故障的直接触发链已确认,但故障版本究竟在哪一步过早放行锁服务退出,仍需维护方核对 drain 决策。

最近相关改动(截至 2026-09-23):Operator #617 加固的是远程 pipeline 观测;MatrixOne #28115、#28343、#28474 处理已离开 lock owner 的事务围栏和旧 binding 恢复。它们均在本次 9 月 20 日故障前合入,不能视为已解决本次删除前安全确认。Operator 当前 main 仍有 drain 超时放行和 does not exist 错误放行分支;公开主分支尚未找到本次实例级 drain 修复。

旧 run 保留,不以新一次普通 dev 长跑替代受控回归。此 run 的 acceptance_gate=NOT_EVALUATED,不宣称完整产品验收。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions