docs: mark bug-1494 fully fixed (worker rejoin slots update, bug-1511)
bug-1510 (dispatch-fail re-PEND,6928f74) + bug-1511 (sched_update_workers in-place update on re-push,1a2bd3f) together close bug-1494. Update left_scheduler_work.md and buglog. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
1a2bd3f6a8
commit
7720d15cf9
3 changed files with 30 additions and 11 deletions
|
|
@ -14972,5 +14972,27 @@
|
|||
],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-08-11"
|
||||
},
|
||||
{
|
||||
"id": "bug-1511",
|
||||
"timestamp": "2026-08-11",
|
||||
"error_message": "controller 重启 / worker 死亡后,worker 重新 join(slots=8)但 scheduler 资源视图仍 slots=0,PEND 作业永不派发(即使 worker 已恢复容量)",
|
||||
"file": "src/scheduler/src/scheduler.c (sched_update_workers)",
|
||||
"root_cause": "worker 死亡时 mark_worker_unavail 正确清零 slots=0;worker 重新 join 时 controller 推送新 worker(slots=8),scheduler 的 sched_update_workers 创建新 worker 后 sched_add_worker 用 key_add 遇 EEXIST 丢弃新对象,scheduler 永久保留旧的 slots=0 worker → 分配失败(unsatisfy slots total 0)→ 全部 PEND。与 bug-1510(dispatch-fail 不重试)同属 bug-1494 症状的另一根因。",
|
||||
"fix": "sched_update_workers 对已存在 worker 就地更新:交换新 resvals/resInUse/status 到现有 worker,释放被丢弃对象(注意 w->name 是 makeString 驻留串不能 free,否则 ASAN bad-free);NULL-guard make_sched_worker。集群验证:scheduler 在 worker 死亡时启动(slots=0)→ worker 重新 join(slots=8)→ 卡住 PEND 作业全部派发完成,无 ASAN。commit 1a2bd3f。",
|
||||
"tags": [
|
||||
"scheduler",
|
||||
"pend",
|
||||
"slots",
|
||||
"worker-rejoin",
|
||||
"key_add-eexist",
|
||||
"fixed"
|
||||
],
|
||||
"related_bugs": [
|
||||
"bug-1494",
|
||||
"bug-1510"
|
||||
],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-08-11"
|
||||
}
|
||||
]
|
||||
|
|
@ -7380,3 +7380,4 @@
|
|||
| 09:00 | Session end: 10 writes across 6 files (frpcdbg_mon.sh, frpc_prod.toml, frpc_mon.sh, frpc_watchdog.sh, frpc-watchdog.sh) | 2 reads | ~2247 tok |
|
||||
| 09:01 | Session end: 10 writes across 6 files (frpcdbg_mon.sh, frpc_prod.toml, frpc_mon.sh, frpc_watchdog.sh, frpc-watchdog.sh) | 2 reads | ~2247 tok |
|
||||
| 03:2x | Merged js branch sched.c NULL guard (commit 5657fca); fixed bug-1510 scheduler dispatch-fail re-PEND (commit 6928f74) | src/controller/sched.c, src/scheduler/{src,include,testsuite} | verified full job lifecycle on t1 cluster (job PEND->RUN->EXIT, all daemons healthy, 0 ASAN) | ~120k tok |
|
||||
| 06:1x | Fixed bug-1494 sub-2: scheduler kept stale slots=0 after worker rejoin (key_add EEXIST dropped fresh worker); fixed sched_update_workers in-place update (commit 1a2bd3f), verified jobs dispatch after worker rejoin | src/scheduler/src/scheduler.c | verified on t1 (worker dead->rejoin slots 0->8, PEND jobs dispatch, no ASAN) | ~150k tok |
|
||||
|
|
|
|||
|
|
@ -10,17 +10,13 @@
|
|||
|
||||
## 一、最紧急:当前影响集群的 bug
|
||||
|
||||
### 1. bug-1494 — 作业全部 PEND 不调度【部分已修复,2026-08-11】
|
||||
- **状态**:部分解决。**子问题一(派发失败作业不重试)已修复(bug-1510,commit 6928f74)**;**子问题二(controller 重启后 worker/scheduler 不自愈重连)仍开放**。
|
||||
### 1. bug-1494 — 作业全部 PEND 不调度【已修复,2026-08-11】
|
||||
- **状态**:已解决(两个子问题均已修复并集群验证)。
|
||||
- **来源**:`CLAUDE.md`、`docs/Scheduler-Agent-设计文档.md` §10.2b
|
||||
- **子问题一(已修复)**:scheduler 在 worker 未就绪(down/joining)时派发,controller 拒绝(`dispatch_a_job_ worker t1 status=0x10000 ep nil`)并回 `jobDispatchFail` 通知,但 scheduler 的 `sched_handle_notify` 无此 case(丢弃)→ 作业保持 RUN 视图永不重选 → 永久 PEND(worker 恢复也不派发)。**修复**:handler.c 加 `jobDispatchFail` case + `sched_requeue_pend_job()`(重置 PEND + 重新入 fcfs pendJobs),作业持续重试直到 worker 就绪 → 派发 → EXIT。集群已验证。
|
||||
- **子问题二(仍开放)**:controller 重启后,worker + scheduler **都不能自愈重连**,导致 scheduler 资源视图 slots=0 → 无法派发:
|
||||
1. **worker 不重连**:controller 重启后 t1 保持 `UNAVAIL`(NCPUS/MAX_SLOT=-,HOST_TYPE=UNKNOWN),每 15s `Failed to send load indices error -1`,无 rejoin 尝试(worker 连接监控 `checking_connection` 未检测到 controller 重启)
|
||||
2. **scheduler 无重连逻辑**:controller 重启后 scheduler 连接断开,重启后重新 join 时看到 t1 UNAVAIL、0 slots(`resource 0 (slots) total 0.000000 shortfall 1.0`)
|
||||
3. scheduler 无法分配 → 全部 PEND(`main decision = (nil)`)
|
||||
- **已排除**:不是 wbuf 污染(bug-1508 修复无效);不是 resources.yaml(缺 slots 定义但 slots 是内置资源,来自 host config `mxj`/`maxcpus`)
|
||||
- **关联**:component-failover-adoption(scheduler 重连)+ worker 连接监控健壮性——**这是 P2.5/component-failover-adoption 的核心,尚未实现**
|
||||
- **临时恢复**:全量重启 daemon(clean restart)可恢复,但集群无自愈能力
|
||||
- **子问题一(已修复,commit 6928f74,bug-1510)**:scheduler 在 worker 未就绪(down/joining)时派发,controller 拒绝(`dispatch_a_job_ worker t1 status=0x10000 ep nil`)并回 `jobDispatchFail` 通知,但 scheduler 的 `sched_handle_notify` 无此 case(丢弃)→ 作业保持 RUN 视图永不重选 → 永久 PEND(worker 恢复也不派发)。**修复**:handler.c 加 `jobDispatchFail` case + `sched_requeue_pend_job()`(重置 PEND + 重新入 fcfs pendJobs)。
|
||||
- **子问题二(已修复,commit 1a2bd3f)**:controller 重启 / worker 死亡后,scheduler 资源视图 slots=0 → 无法派发。**根因**:worker 死亡时 `mark_worker_unavail` 正确清零 slots=0;worker 重新 join(slots=8)时 controller 推送新 worker,但 scheduler 的 `sched_update_workers` → `sched_add_worker` 用 `key_add` 遇 EEXIST **丢弃新 worker**,scheduler 永久保留旧的 slots=0 → PEND 作业永不派发。**修复**:`sched_update_workers` 对已存在 worker **就地更新**(交换新 resvals/resInUse/status,释放旧对象),并 NULL-guard make_sched_worker。**集群验证**:scheduler 在 worker 死亡时启动(slots=0)→ worker 重新 join(slots=8)→ 之前卡住的 PEND 作业全部派发完成,无 ASAN。
|
||||
- **关联**:scheduler 运行时重连(component-failover-adoption)仍为独立待办——scheduler 本身不会在 controller 重启后自动重连,需手动重启(但重连后 slots 恢复正常)。
|
||||
- **临时恢复**:不再需要(worker 重新 join 即可恢复 slots)。
|
||||
|
||||
### 2. bug-1490 — apiserver control HTTP 500【已修复,2026-08-07】
|
||||
- **状态**:已修复
|
||||
|
|
@ -166,7 +162,7 @@ spec 声称 36/36 任务完成,但 re-audit(research.md)发现缺陷。来
|
|||
| Bug | 影响 |
|
||||
|-----|------|
|
||||
| **bug-1490** | ✅ 已修复(c90e63e)。MCP 写工具(submit/hold/release/cancel)集群 E2E 验证通过;`scheduler_get_job` 的 CompConditions 过滤 bug 也已修复(0572740)。另修了部署缺口:/opt/xce/config 缺 rbac.yaml 导致 mcp API key 全 403 |
|
||||
| **bug-1494** | 作业全 PEND 不调度,Agent 提交流程无法完成。**部分已修复(2026-08-11)**:派发失败作业重试(bug-1510)已解决;controller 重启后 worker/scheduler 不自愈重连仍开放(见第一节) |
|
||||
| **bug-1494** | 作业全 PEND 不调度,Agent 提交流程无法完成。**已修复(2026-08-11)**:子问题一 dispatch-fail 重试(bug-1510)+ 子问题二 worker 重新 join 后 slots 不更新(见第一节) |
|
||||
| **chatbot 过度建议** | ✅ 已缓解(3db216c):mcp-server 加 server instructions + 状态工具 report-only 描述,防止 LLM 把非 OK 状态当事故、主动给一堆排查建议 |
|
||||
|
||||
### 2. Phase 2:监控 + 纠错闭环(未开始,估 2-3 天)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue