统一P0-10任务尝试取消状态

This commit is contained in:
xuans 2026-09-30 05:30:47 +08:00
parent 32d5e45df0
commit bd3f9e27ec
6 changed files with 78 additions and 1 deletions

View File

@ -304,7 +304,7 @@ func (r *SQLTaskRepository) CancelTask(ctx context.Context, id, message string,
rollback()
return errors.New("任务当前无法取消")
}
if _, err := tx.ExecContext(ctx, r.query(`UPDATE task_attempts SET status = 'cancelled', message = ?, finished_at = ? WHERE task_id = ? AND status IN ('queued', 'running')`), message, nullableTime(finishedAt), id); err != nil {
if _, err := tx.ExecContext(ctx, r.query(`UPDATE task_attempts SET status = 'cancelled', message = ?, finished_at = ? WHERE task_id = ? AND status IN ('queued', 'running', 'retry_wait', 'cancelling')`), message, nullableTime(finishedAt), id); err != nil {
rollback()
return fmt.Errorf("取消任务尝试失败:%w", err)
}

View File

@ -182,6 +182,39 @@ func TestSQLTaskRepositoryCancelMarksRunningAttempt(t *testing.T) {
}
}
func TestSQLTaskRepositoryCancelMarksAllActiveAttempts(t *testing.T) {
repository, db := newTaskRepositoryTest(t)
defer db.Close()
ctx := context.Background()
now := time.Now().UTC()
activeStatuses := []string{"queued", "running", "retry_wait", "cancelling"}
domainIDs := []string{"domain-1", "domain-2", "domain-3", "domain-1"}
for index, status := range activeStatuses {
taskID := "task-cancel-active-" + status
attemptID := "attempt-cancel-active-" + status
if err := repository.CreateTask(ctx, Task{
ID: taskID, DomainID: domainIDs[index], TaskType: "certificate_issue",
Status: status, Stage: "certificate_issue", Message: "\u6b63\u5728\u6267\u884c", CreatedAt: now, UpdatedAt: now,
}); err != nil {
t.Fatalf("create %s task: %v", status, err)
}
if err := repository.CreateAttempt(ctx, TaskAttempt{
ID: attemptID, TaskID: taskID, AttemptNumber: 1,
Stage: "certificate_issue", Status: status, Message: "\u6b63\u5728\u6267\u884c", StartedAt: &now, CreatedAt: now,
}); err != nil {
t.Fatalf("create %s attempt: %v", status, err)
}
finished := now.Add(time.Second)
if err := repository.CancelTask(ctx, taskID, "\u4efb\u52a1\u5df2\u7531\u7528\u6237\u53d6\u6d88", &finished); err != nil {
t.Fatalf("cancel %s task: %v", status, err)
}
attempts, err := repository.ListAttempts(ctx, taskID)
if err != nil || len(attempts) != 1 || attempts[0].Status != "cancelled" || attempts[0].FinishedAt == nil {
t.Fatalf("cancel %s attempt state: %+v %v", status, attempts, err)
}
}
}
func TestSQLTaskRepositoryDoesNotOverwriteCancelledTask(t *testing.T) {
repository, db := newTaskRepositoryTest(t)
defer db.Close()

View File

@ -3681,3 +3681,14 @@ Linux Ubuntu 22.04 上的 `Scert-admin` 手动启停、无开机自启动、无
- [~] P0-10 其他任务入口、任务尝试矩阵、跨数据库实机矩阵和统一复审继续进行。
- [ ] P0-12 备份恢复、浏览器、密码 SSH、远端部署和最终生产门禁尚未完成。
- [!] 总体验收继续保持 **P0-03:完成,待复审**,不得将本地自动化结果标记为生产验收通过。
## 最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 **P0-03:完成,待复审**;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- [x] 已完成,等待复审:通用 `CancelTask` 取消任务时,任务尝试同步覆盖 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入 `cancelled` 并记录完成时间。
- [x] 已完成,等待复审:`go test ./...`、`go vet ./...`、`git diff --check` 均通过。
- [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03:完成,待复审**,没有新增 `[✓]` 复审通过项。

View File

@ -985,3 +985,14 @@ P0-05 从 `[!]` 调整为 `[~]`,并未标记完成;P0-04 剩余门禁和全
- [~] 进行中:P0-10 仍需继续审查其他任务入口、重试、幂等、恢复和跨数据库行为。
- [ ] 未开始:P0-12 备份恢复以及最终生产流程门禁。
- [!] 总体验收保持 **P0-03:完成,待复审**,没有新增 `[✓]`。
## 最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 **P0-03:完成,待复审**;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- [x] 已完成,等待复审:通用 `CancelTask` 取消任务时,任务尝试同步覆盖 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入 `cancelled` 并记录完成时间。
- [x] 已完成,等待复审:`go test ./...`、`go vet ./...`、`git diff --check` 均通过。
- [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03:完成,待复审**,没有新增 `[✓]` 复审通过项。

View File

@ -1632,3 +1632,14 @@ P0-11 生产验收门禁
- [~] 进行中:P0-10 其余任务入口、跨数据库实机矩阵、崩溃恢复复核和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复、最终浏览器清缓存、密码 SSH、远端部署和生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03 完成,待复审**,没有新增 `[✓]` 复审通过项。
## 最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 **P0-03:完成,待复审**;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- [x] 已完成,等待复审:通用 `CancelTask` 取消任务时,任务尝试同步覆盖 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入 `cancelled` 并记录完成时间。
- [x] 已完成,等待复审:`go test ./...`、`go vet ./...`、`git diff --check` 均通过。
- [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03:完成,待复审**,没有新增 `[✓]` 复审通过项。

View File

@ -563,3 +563,14 @@ P0-06 与 P0-07 均维持 `[~]`,六阶段中的隔离、生产和最终验收
- [~] P0-10 其他任务链与三数据库实机复核仍在进行。
- [ ] P0-12 备份恢复及最终生产门禁尚未开始。
- [!] 总体验收不得升级,仍为 **P0-03:完成,待复审**。
## 最新进度追加(2026-09-29,P0-10 通用取消入口状态一致性)
总体验收继续保持 **P0-03:完成,待复审**;本轮补齐通用仓储取消入口,不代表 P0-10 统一复审或生产部署验收通过。
- [x] 已完成,等待复审:通用 `CancelTask` 取消任务时,任务尝试同步覆盖 `queued`、`running`、`retry_wait`、`cancelling` 四种活动状态。
- [x] 已完成,等待复审:新增四种活动状态的仓储回归测试,确认任务及任务尝试均进入 `cancelled` 并记录完成时间。
- [x] 已完成,等待复审:`go test ./...`、`go vet ./...`、`git diff --check` 均通过。
- [~] 进行中:P0-10 其他任务入口、跨数据库实机矩阵、崩溃恢复、重试幂等和统一复审仍需继续。
- [ ] 未开始:P0-12 备份恢复及最终生产门禁仍未完成。
- [!] 总体验收不得升级,当前仍为 **P0-03:完成,待复审**,没有新增 `[✓]` 复审通过项。