Update runtime handoff after mainland deploy validation

This commit is contained in:
Your Name
2026-04-19 03:43:19 +08:00
parent c33f4f194b
commit e0406b5d0e
3 changed files with 254 additions and 81 deletions

View File

@@ -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 代理池无可用代理”。

View File

@@ -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,13 +178,12 @@
当前唯一主问题仍然是:
- 检测执行面停滞
- 检测执行面没有恢复到持续产出
其下应拆成两个层次:
现在已经不需要再拆成“代码待验证”和“现场阻塞”两层。
当前唯一剩余现场阻塞就是:
- 已补代码、待验证:
- worker 控制消息补偿消费链
- 已确认现场阻塞:
- 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` 和近窗吞吐重新前进

View File

@@ -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 @@
- 也不是“日志回传没回来”
- 而是执行进程这段时间确实没有继续产生日志
### 证据 7worker 控制消息补偿链已补上代码缺口
### 证据 7worker 控制消息补偿链已在线上验证生效
之前运行态存在一个真实风险:
@@ -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_*` 是否重新增长