feat: 跨 worker 真 kill(kill_requests 意图表 + 收殓器)与自动化触发入闸
机制 A 移植自旧 PR #101(分支 feat-residual-b,头 895e004),
不合旧 PR:旧基线 6e3eb7b 已 CONFLICTING,本批重做到现 main
6d4f87e(#151 合并后)上。
- kill_requests 意图表:cloud/db.py POSTGRES_SCHEMA + migrations
清单补表;server.ensure_kill_requests_table / request_kill
(同一任务只留一条 pending,写失败返回 False);init_db 的
SQLite 分支补建表(PG 分支由 POSTGRES_SCHEMA 全量建表覆盖)。
- 取消/sweep 写请求 best-effort:_cancel_task 在 commit 后调
request_kill(失败不挡取消);sweep_stale_tasks 在同一事务
内为被扫任务写 system 请求。
- worker 收殓器 _reap_kill_requests:owner 活着(心跳停滞未超
300 秒,COALESCE(last_heartbeat, updated_at))绝不抢杀;只
有 owner 已死且任务仍 interrupted 时,按任务派生容器名
(executor.container_name,codex-<安全字符任务 id>)在本机
真杀,绝不按前缀扫、绝不杀自由传入的名字;本机无容器时
请求照常终结;任务行失踪或已不在 interrupted 时请求直接
终结;单条异常只记日志。run loop 每轮调一次,放在 sweep
块外(旧 PR 只在 sweep 块内,sweep 关掉时请求会积压)。
- 自动化入闸只补两条旁路:worker._coord_sync_children 建子任
务前过 _quota_exceeded(超限跳过建任务、记审计,同一 worker
内同一分工只记一次);automations.run_due_automation
(claim 抢单 -> 配额门 -> 建任务 -> 记产出,超限记
skipped_quota 不进失败重试)。triage/webhook/续跑/后续/
分叉未动。
- 单测:旧 PR 三份单测原样移植(Worker/Server 签名与现 main
兼容,未改用例语义)。
This commit is contained in:
1 parent
b306b56517
commit
3a06205d8b
8 files changed
+938
-12
No files matched your search
+4
-2
@@ -57,17 +57,19 @@ MIGRATION_TABLES = (
|
||||
# (本批后无行按默认额度处理,不再是无限额,但显式
|
||||
# 管理员额度仍需原样迁过去,不能丢)。
|
||||
"user_quotas",
|
||||
# P2-ops 对齐:以下 4 张表在 POSTGRES_SCHEMA 里有、
|
||||
# P2-ops 对齐:以下 5 张表在 POSTGRES_SCHEMA 里有、
|
||||
# 原清单里没有,补进后清单与 schema 表集合一致。
|
||||
# uploads / task_attachments:附件包与任务附件;
|
||||
# task_followups:任务间互发消息的后续消息队列;
|
||||
# environments:项目环境(分支/executor)。
|
||||
# 四张表主键均为 TEXT 或复合主键,没有身份列,
|
||||
# kill_requests:跨 worker 真 kill 的意图表(残留批次 B)。
|
||||
# 五张表主键均为 TEXT 或复合主键,没有身份列,
|
||||
# 不需要序列拨动(见 SEQUENCE_TABLES)。
|
||||
"uploads",
|
||||
"task_attachments",
|
||||
"task_followups",
|
||||
"environments",
|
||||
"kill_requests",
|
||||
# Cloud identity batch: TEXT primary keys, no sequence to sync.
|
||||
"user_profiles",
|
||||
"identity_memories",
|
||||
|
||||
Reference in new issue
Block a user