完善活动任务删除保护

扩展域名删除时的活动任务状态保护,补充 retry_wait 与 cancelling 回归测试。
This commit is contained in:
xuans 2026-09-30 01:17:15 +08:00
parent 00d62f3c47
commit 96c8f44e95
2 changed files with 13 additions and 1 deletions

View File

@ -113,7 +113,7 @@ func (r *SQLProjectMemberRepository) DeleteProjectDomain(ctx context.Context, ac
}
rows, err := tx.QueryContext(ctx, Rebind(r.driver, `SELECT id FROM tasks
WHERE domain_id = ? AND task_type IN ('certificate_issue', 'certificate_validate', 'certificate_deploy', 'certificate_import', 'certificate_restore')
AND status IN ('queued', 'running')`+r.resourceWriteLock()), domainID)
AND status IN ('queued', 'running', 'retry_wait', 'cancelling')`+r.resourceWriteLock()), domainID)
if err != nil {
return fmt.Errorf("检查域名任务失败:%w", err)
}

View File

@ -71,6 +71,18 @@ func TestProjectDomainRepositorySQLite(t *testing.T) {
t.Fatal(err)
}
trigger := `CREATE TRIGGER reject_project_domain_audit BEFORE INSERT ON audit_logs BEGIN SELECT RAISE(ABORT, 'audit-failure'); END`
for _, status := range []string{"retry_wait", "cancelling"} {
taskID := "domain-active-task-" + status
if err := taskRepo.CreateTask(t.Context(), Task{HistoryScope: HistoryScope{ProjectID: item.ProjectID, ScopeType: ScopeProject}, ID: taskID, DomainID: item.ID, TaskType: "certificate_deploy", Status: status}); err != nil {
t.Fatal(err)
}
if err := writer.DeleteProjectDomain(t.Context(), "domain-manager", item.ID); !errors.Is(err, ErrProjectDomainBusy) {
t.Fatalf("任务状态 %s 下删除应拒绝:%v", status, err)
}
if _, err := db.DB.ExecContext(t.Context(), Rebind(cfg.Driver, "UPDATE tasks SET status = 'partial_success' WHERE id = ?"), taskID); err != nil {
t.Fatal(err)
}
}
if _, err := db.DB.ExecContext(t.Context(), trigger); err != nil {
t.Fatal(err)
}