Files
junhong_cmp_fiber/openspec/changes/fix-main-package-activation-starvation/tasks.md
break a0de08d789
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m6s
避免套餐过期后排队权益永久失联
线上保持现有纯 Asynq 架构,以公平孤儿扫描和提交后投递消除永久饥饿及事务可见性竞态。

Constraint: 线上保持现有纯 Asynq 架构,不引入 Outbox、迁移或新任务基础设施。

Rejected: 事务内投递或扩大扫描 LIMIT | 无法消除竞态和永久饥饿。

Confidence: high

Scope-risk: narrow

Directive: 后续分支整合时按目标分支的套餐接续架构独立处理,不混用本热修实现。

Tested: go build ./...(退出码 0);git diff --check;openspec validate fix-main-package-activation-starvation --strict。

Not-tested: 按用户要求未新增、修改或运行自动化测试;线上 SQL、查询计划和日志待部署后核验。
2026-08-03 09:58:05 +08:00

1.3 KiB
Raw Blame History

1. Main 分支隔离与基线

  • 1.1 确认变更仅面向 main 的纯 Asynq 套餐接续链路,并保持 Outbox 与新任务基础设施为非目标。
  • 1.2 检索套餐激活方法的全部调用点及现有错误码、Redis 键和任务重试配置,锁定最小修改边界。

2. 过期接续与孤儿恢复

  • 2.1 将孤儿恢复改为数据库先按载体选择队首并排除 status IN (1,2) 占位套餐,最后限制 100 个真实孤儿,删除逐条占位查询。
  • 2.2 将旧主套餐过期后的下一套餐投递移到事务提交后,保留现有停机检查和周期孤儿补偿。

3. 激活结果与重试语义

  • 3.1 让指定套餐激活显式返回是否实际激活,并在 Redis 激活锁冲突时返回现有套餐激活冲突错误。
  • 3.2 调整 Asynq Handler 日志,仅在实际激活时记录成功,未激活时记录明确的跳过信息。

4. 文档、验证与提交

  • 4.1 更新功能总结和 README说明 main 纯 Asynq 热修边界、部署观察项及回滚方式。
  • 4.2 执行 gofmtgit diff --checkgo build ./... 和 OpenSpec 严格校验;按用户要求不新增、修改或运行自动化测试。
  • 4.3 仅暂存本热修代码、文档和独立 OpenSpec创建符合 Lore 协议的中文提交。