mirror of
https://gitcode.com/JianFeeeee/webui4frpc.git
synced 2026-10-02 23:24:00 +00:00
上线实测抓到的:从 .60(非 owner)启动 owner 在 .30 的 portal,日志出现 **两条** `.60 restarted t4` —— 关键帧是 `[192.168.2.60:7500] restarted t4`。 pending 任务对所有成员可见,而 restart 分支没有 owner 判定,于是谁先轮到 谁就执行:非 owner 给自己的机器起了一个属于别人的转发 worker,而真正的 owner(.30)什么也没做,worker 一直没起来。 这正是上面 duplicate-claim 防御本来要防的「孤儿 worker + 重复认领」,只是 restart 分支为了绕开那层防御,把 owner 校验也一并跳过了 —— 绕开的是 「重复建条目」的必要性,不是「只有 owner 能动手」的必要性。 修法与 RemoveNode 分支一致:`owner != e.ID` 时只清标志、不执行 handler。 owner 已消失的情况不是错误:条目已被重新标为启用,OfflineReassign() 会在 下一次离线清理时把它转入 pending,再由正常认领流程重新安置。 测试 TestRestartOnlyAppliedByOwner:同一份 restart 任务分别交给 owner 与非 owner,断言非 owner 调用 0 次、owner 恰好 1 次。双向验证 —— 去掉守卫后 如期变红("a NON-owner applied the restart 1 time(s)"),还原后变绿。 go build / go vet / go test ./... 全绿,gofmt 干净。