From e0406b5d0ee703ee98ba4a85356b6d758f4f90a3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 Apr 2026 03:43:19 +0800 Subject: [PATCH] Update runtime handoff after mainland deploy validation --- .../HANDOFF_20260419_0341.md | 142 ++++++++++++++++++ .../IMPLEMENTATION_STATUS.md | 91 ++++++----- docs/ops_center_runtime/TASK_BOARD.md | 102 +++++++------ 3 files changed, 254 insertions(+), 81 deletions(-) create mode 100644 docs/ops_center_runtime/HANDOFF_20260419_0341.md diff --git a/docs/ops_center_runtime/HANDOFF_20260419_0341.md b/docs/ops_center_runtime/HANDOFF_20260419_0341.md new file mode 100644 index 0000000..b86b632 --- /dev/null +++ b/docs/ops_center_runtime/HANDOFF_20260419_0341.md @@ -0,0 +1,142 @@ +# HANDOFF 2026-04-19 03:41 + +## 本轮做了什么 + +这轮没有扩功能,只沿着检测执行停滞的最小路径继续推进,完成了: + +1. 将提交 `c33f4f1` 部署到: + - `mainland-worker-01` + - `mainland-controller-01` +2. 重启两台大陆节点的 `domaincheck-worker` +3. 验证 worker 控制消息补偿链是否在线上生效 +4. 排查 controller 为什么没有像 worker 一样顺滑接入控制链 +5. 修正 controller 运行环境中的 Redis 密码漂移 +6. 再次下发 `detect/start`,确认 controller 真正收到并执行新启动指令 +7. 再观察中央进度、recent events、sync-summary 是否继续前进 + +## 本轮关键结果 + +### 1. worker 控制消息补偿链已经线上生效 + +`mainland-worker-01` 明确出现: + +- `发现待执行 Worker 控制指令` +- `已接受检测启动指令` +- `开始执行远程检测任务` + +这说明: + +- 上一轮代码修复不是只在本地成立 +- pending 控制消息补偿消费链已经在线上闭合 + +### 2. controller 原先确实存在运行环境漂移 + +`mainland-controller-01` 的 `/etc/default/domaincheck-worker` 原始状态: + +- `REDIS_HOST=127.0.0.1` +- `REDIS_PORT=6379` +- `REDIS_PASSWORD=` + +对应日志: + +- `Authentication required` +- `maximum recursion depth exceeded while calling a Python object` + +这说明: + +- controller 不是没重启 +- 也不是代码没生效 +- 而是本机 Redis 开了鉴权,但 worker 环境文件没带密码 + +### 3. controller 已完成最小修正并重新接上控制链 + +本轮已把 controller 的 `REDIS_PASSWORD` 补为: + +- `Qazwe123..` + +修正后再次重启,日志变为: + +- `Redis 连接成功: 127.0.0.1:6379` +- `已接受检测启动指令` +- `开始执行远程检测任务` + +之后再次触发 `/api/v1/detect/start`,controller 又出现: + +- `发现待执行 Worker 控制指令` +- `收到启动检测指令,但检测任务已在运行,忽略重复启动` + +这说明: + +- controller 的控制链也已经恢复 +- 现在不再是 Redis 断链问题 + +### 4. 当前唯一剩余阻塞已经进一步收紧 + +controller 当前最新现场日志反复出现: + +- `代理已启用,但当前无可用代理` + +这意味着当前唯一剩余主阻塞已经收紧为: + +- `mainland-controller-01` 代理池没有可用代理 + +## 中央侧当前表现 + +正向信号: + +- `remote_access_ready = 3/3` +- `log_sync_state = full_capture` +- `runtime/sync-summary` 最新记录继续增长到 `5491` +- recent events 已刷新到更晚时间 +- `mainland-worker-01` 最新 domain_started 已推进到 `2026-04-19 16:37:00` + +仍未恢复的信号: + +- `items_completed = 21` +- `items_claimed = 34` +- `items_running = 14` +- `items_pending = 931` +- 短观察窗口内没有继续上涨 + +这说明: + +- 控制链和同步链已经恢复到更健康状态 +- 但执行吞吐还没有恢复成“持续出结果” + +## 当前结论 + +当前最准确的判断是: + +- 接管问题:基本已闭合 +- 日志回传问题:已闭合 +- worker 控制消息漏收问题:已闭合 +- controller Redis 环境漂移:已闭合 +- 当前唯一剩余阻塞:`mainland-controller-01` 代理池无可用代理 + +## 下一轮唯一应该做什么 + +下一轮不要发散,只做 controller 代理收口: + +1. 继续观察 controller `domaincheck-worker` 日志 +2. 重点看是否从: + - `代理已启用,但当前无可用代理` + 转成: + - 至少有 `1+` 可用代理 +3. 继续复查: + - `/api/v1/detect/job/active` + - `/api/v1/runtime/sync-summary` + - `/api/v1/ops/nodes` +4. 只判断一件事: + - controller 代理恢复后,`items_completed` 是否继续增长 + +## 现在不要做什么 + +- 不扩页面 +- 不做新模块 +- 不做控制面增强 +- 不误判成“接管还没好” +- 不继续围绕 worker 控制消息链做重复修复 + +## 一句话结论 + +这轮已经把系统从“控制链也有缺口”推进到了“控制链已恢复、只剩 controller 代理池无可用代理”。 diff --git a/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md b/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md index f7c4ae7..84a1774 100644 --- a/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md +++ b/docs/ops_center_runtime/IMPLEMENTATION_STATUS.md @@ -1,6 +1,6 @@ # IMPLEMENTATION_STATUS -更新时间:2026-04-19 03:38 CST +更新时间:2026-04-19 03:41 CST ## 当前真实状态 @@ -12,11 +12,12 @@ ## 本轮最新结论 -这轮结论需要更新为三段: +这轮结论需要更新为四段: - 接管与同步能力已经明显趋于完成 -- 检测执行面当前没有持续产出 -- 其中一处代码级风险已经完成最小修复,但尚未完成线上部署验证 +- worker 控制消息补偿链已经完成线上验证 +- controller 运行环境漂移已经被现场修正 +- 当前唯一剩余主阻塞已经收紧到 controller 代理池无可用代理 ## 当前证据拆分 @@ -36,6 +37,17 @@ - `unittest domain-api/tests/test_worker_control_service.py` - `python -m py_compile domainCheck/detect_worker.py domain-api/app/services/worker_control_service.py` +线上运行验证也已经出现正向证据: + +- `mainland-worker-01` + - 启动后发现待执行控制指令 + - 接受 `start_detection` + - 开始执行远程检测任务 +- `mainland-controller-01` + - 修正 Redis 环境后 + - 重新接受 `start_detection` + - 开始执行远程检测任务 + ### 2. 接管/同步闭环 当前已完成: @@ -55,16 +67,14 @@ 当前未完成: -- 连续 40 秒观察窗口内: - - `progress_percent` 不变 - - `items_completed` 不变 - - `items_running` 不变 - - `items_claimed` 不变 - - `items_pending` 不变 -- mainland `domain_*` 事件数仍固定在 `10` -- 最新 mainland `detect_result_ingest` 仍停在 `5382` -- `activity-stream` 明确提示: - - `近窗刚有吞吐 0 台` +- 短观察窗口内: + - `progress_percent` 仍是 `2.1` + - `items_completed` 仍是 `21` + - `items_claimed` 仍是 `34` + - `items_pending` 仍是 `931` +- 中央 recent events 已刷新到更晚时间 +- `runtime/sync-summary` 最新记录已继续增长 +- 但 completed 尚未继续上涨 这说明: @@ -86,14 +96,29 @@ - `Unable to connect to proxy` - `ConnectTimeoutError` - worker 新增远端日志显示: - - `时光机检测 外部依赖异常,步骤降级继续执行` - - 同时仍有 `域名检测完成` - - 新收到的重复启动指令被忽略,因为任务已在运行 + - `发现待执行 Worker 控制指令` + - `已接受检测启动指令` + - `开始执行远程检测任务` + - 说明线上补偿消费链已真正工作 +- controller 新增远端日志显示: + - 初次重启后: + - `Authentication required` + - `maximum recursion depth exceeded` + - 进一步排查确认: + - `/etc/default/domaincheck-worker` 的 `REDIS_PASSWORD` 为空 + - 修正后再次重启: + - `Redis 连接成功: 127.0.0.1:6379` + - `已接受检测启动指令` + - `开始执行远程检测任务` + - 后续日志继续收紧到: + - `代理已启用,但当前无可用代理` - 两台大陆节点 full capture 已开启,但源日志时间没有继续前进 这说明: -- 当前第一主阻塞更像 controller 代理池不可用 +- worker 控制消息链不再是主阻塞 +- controller Redis 环境漂移也不再是主阻塞 +- 当前第一主阻塞已经进一步收紧到 controller 代理池不可用 - worker 的时光机异常是客观存在的次级问题 - 不是控制面未接管 - 不是同步链未打通 @@ -132,14 +157,11 @@ - “检测启动已经发布,但 worker 可能静默漏收”的代码风险 -这组修复还没有证明能够解决的是: - -- `controller` 代理池校验后 `0 available` 的外部执行阻塞 - 所以当前最准确的状态是: - 代码级控制链缺口已补上 -- 运行态是否恢复,还要看线上节点拉代码重启后的观测结果 +- 线上部署验证已通过 +- 但 `controller` 代理池校验后 `0 available` 的现场阻塞仍然存在 ## 当前已闭合的问题 @@ -156,15 +178,14 @@ 当前唯一主问题仍然是: -- 检测执行面停滞 +- 检测执行面没有恢复到持续产出 -但其下应拆成两个层次: +但现在已经不需要再拆成“代码待验证”和“现场阻塞”两层。 -- 已补代码、待验证: - - worker 控制消息补偿消费链 -- 已确认现场阻塞: - - controller 代理池可用性为 0 - - 因此没有持续产生新的 domain 级结果 +当前唯一剩余现场阻塞就是: + +- controller 代理池可用性为 0 +- 因此没有持续产生新的 domain 级结果 换句话说: @@ -186,9 +207,9 @@ 当前结论: -- 可以继续做最小部署验证 -- 也可以继续做执行恢复类排查 -- 但还不能把当前状态视作“后台检测已经稳定恢复” +- 可以继续做最小运行态排查 +- 但不需要再优先验证 worker 控制消息链 +- 当前还不能把状态视作“后台检测已经稳定恢复” ## 当前是否建议直接上线 @@ -199,9 +220,9 @@ 原因不是接管面,而是执行面: - 三台节点都已接入 +- worker / controller 都已重新接上控制链 - 但当前任务没有持续吞吐 - controller 代理池全部验不过会直接影响检测产出 -- 并且这轮刚补上的 worker 控制消息修复还没经过线上运行验证 ## 当前优先级判断 @@ -221,8 +242,6 @@ 如果下一轮确认: -- 大陆节点已拉到这版控制消息修复 -- `domaincheck-worker` 重启后稳定收新指令 - controller 代理池恢复可用 - `domain_*` 开始继续增长 - `items_completed` 和近窗吞吐重新前进 diff --git a/docs/ops_center_runtime/TASK_BOARD.md b/docs/ops_center_runtime/TASK_BOARD.md index fd5c263..fd32b83 100644 --- a/docs/ops_center_runtime/TASK_BOARD.md +++ b/docs/ops_center_runtime/TASK_BOARD.md @@ -1,6 +1,6 @@ # TASK_BOARD -更新时间:2026-04-19 03:38 CST +更新时间:2026-04-19 03:41 CST ## 当前主批次 @@ -18,7 +18,7 @@ ## 本轮最新状态 -本轮在只读取证基础上,已经补了一处最小代码修复,但还没有完成线上节点拉代码后的运行验证。 +本轮已经完成“代码修复 -> 两台大陆节点部署 -> 运行态复查”的完整一轮验证。 ### 已完成的最小修复 @@ -34,41 +34,52 @@ - `unittest domain-api/tests/test_worker_control_service.py` - `python -m py_compile domainCheck/detect_worker.py domain-api/app/services/worker_control_service.py` -### 仍未完成的事情 +### 已完成的线上验证 -- 大陆节点尚未基于这版修复完成拉代码并重启 `domaincheck-worker` -- 因此这轮还不能把“检测停滞”完全归因成单一外部代理问题 -- 当前更准确的表述应为: - - `controller` 代理池可用数为 `0` 是已确认现场阻塞 - - worker 控制消息存在“可能丢发布、pending 不被运行态补偿消费”的代码风险,现已本地修复,待线上验证 +- `mainland-worker-01` + - 已拉到 `main` 最新提交 `c33f4f1` + - 已重启 `domaincheck-worker` + - 启动后明确出现: + - `发现待执行 Worker 控制指令` + - `已接受检测启动指令` + - `开始执行远程检测任务` +- `mainland-controller-01` + - 已拉到 `main` 最新提交 `c33f4f1` + - 已重启 `domaincheck-worker` + - 发现运行环境漂移: + - `/etc/default/domaincheck-worker` 中 `REDIS_PASSWORD` 为空 + - 已最小修正该节点运行环境后再次重启 + - 修正后明确出现: + - `Redis 连接成功: 127.0.0.1:6379` + - `已接受检测启动指令` + - `开始执行远程检测任务` + +### 本轮仍未完成的事情 + +- 中央 `items_completed` 仍未在短观察窗口内继续增长 +- `mainland-controller-01` 仍然持续报: + - `代理已启用,但当前无可用代理` +- 因此当前剩余阻塞已经进一步收紧到: + - controller 现场代理池没有可用代理 ## 本轮最新复查结果 -本轮没有新增实现,只做了中央只读复查 + 节点现场日志取证 + 远端 `domaincheck-worker` 日志采样: +本轮在完成修复部署后,中央与节点现场出现了新的运行证据: - 活跃任务仍是 `detect-20260417170546-96023e` -- 三台节点都在参与: - - `mainland-controller-01` - - `mainland-worker-01` - - `overseas-control-01` -- 但连续一个完整观察窗口内,任务进度没有前进: +- `mainland-worker-01` 最新事件时间已经从旧窗口推进到: + - `2026-04-19 16:37:00` +- `runtime/sync-summary` 最新记录已继续增长到: + - `id = 5491` + - `created_at = 2026-04-19 03:40:45` +- 说明中央已经重新收到新的运行侧同步流量 +- 但短窗口内主进度仍未松动: - `completed = 21` - `running = 14` - `claimed = 34` - `pending = 931` -- mainland `domain_*` 事件仍停在 `10` 条,没有继续增长 -- 最新 mainland `detect_result_ingest` 仍是: - - `id = 5382` - - `created_at = 2026-04-19 03:10:14` -- `activity-stream` 已明确显示: - - `近窗刚有吞吐 0 台` -- 新增日志采样结果: - - `mainland-controller-01` - - 代理源拉取成功 - - 代理校验后 `共 0 个可用代理` - - `mainland-worker-01` - - 时光机依赖异常会降级继续执行 - - 收到重复启动指令时会忽略 +- controller 现场最新日志已收紧为: + - `代理已启用,但当前无可用代理` ## 关键证据 @@ -182,7 +193,7 @@ - 也不是“日志回传没回来” - 而是执行进程这段时间确实没有继续产生日志 -### 证据 7:worker 控制消息补偿链已补上代码缺口 +### 证据 7:worker 控制消息补偿链已在线上验证生效 之前运行态存在一个真实风险: @@ -198,7 +209,10 @@ - worker 心跳会主动补偿消费 pending 指令 - worker 真正收到并处理后,会按 `request_id` 清理 pending -这一步已经消除了“控制消息可能被静默漏掉”的代码风险,但还需要线上部署后再观察真实任务是否恢复推进。 +这一步现在已经不再是“待部署假设”,而是已被线上日志确认生效: + +- `mainland-worker-01` 已从 pending 指令恢复执行 +- `mainland-controller-01` 在修正 Redis 环境后,也已重新接受并执行 `start_detection` ## 当前结论 @@ -206,10 +220,10 @@ - 接管链路已基本完成 - 同步链路已至少成功贯通一次 -- 当前主阻塞依旧是检测执行面停滞 -- 其中已确认的现场问题有两个层次: +- 当前主阻塞仍是检测执行面没有恢复到“持续产出” +- 但代码级控制链缺口已经闭合 +- 当前唯一剩余现场阻塞可以收紧为: - `mainland-controller-01` 代理池可用性为 `0` - - worker 控制消息补偿链之前存在代码缺口,现已本地修复,待部署验证 - worker 侧时光机异常仍是次级噪音,不应继续放大 ## 下一步唯一主批次 @@ -218,10 +232,10 @@ 本批次唯一目标: -- 先把控制消息补偿修复部署到线上 worker -- 再复查检测任务是否恢复推进 -- 若仍停滞,再把剩余问题继续收紧到 controller 代理池可用数为 0 -- 全程不做任何功能扩展 +- 保持当前不扩功能 +- 只围绕 controller 代理池可用性为 `0` 做收口 +- 继续观察修正后的 controller 是否开始产出 domain 级结果 +- 若仍无结果增长,则只给出代理层最小补救路径 ## 候选批次 @@ -258,16 +272,14 @@ 下一轮唯一应该继续做的事情: -- 只做最小部署与运行态收口: - - 大陆节点拉取最新代码 - - 重启 `domaincheck-worker` - - 复查 `/api/v1/detect/job/active` - - 复查 `/api/v1/runtime/sync-summary` - - 复查 controller / worker `scene-log` - - 必要时追加 `domaincheck-worker` 运行日志取证 +- 只做 controller 代理收口: + - 继续复查 controller `domaincheck-worker` 日志 + - 观察是否从 `当前无可用代理` 转为有可用代理 + - 继续复查 `/api/v1/detect/job/active` + - 继续复查 `/api/v1/runtime/sync-summary` + - 继续复查 recent domain events 是否出现 controller / 新 completed - 唯一判断问题是: - - 修复部署后,任务是否重新推进 - - 若仍不推进,是否只剩 controller 代理池 `0 available` 这一条主阻塞 + - controller 代理池恢复后,completed 是否开始继续增长 - 是否仍是 `近窗吞吐 0` - 是否仍是 `controller 可用代理数 0` - 代理恢复后 `domain_*` 是否重新增长