feat: support durable task cancellation without foreign keys

This commit is contained in:
2026-09-17 17:03:23 +08:00
parent 6805506450
commit 3ce7d2c104
48 changed files with 1642 additions and 164 deletions

View File

@@ -84,8 +84,11 @@ func TestIntegrationSchemaAndConstraints(t *testing.T) {
taskA, taskB := id(), id()
exec(taskSQL, nsA, taskA, queueA)
exec(taskSQL, nsA, taskB, queueA)
t.Run("namespace_isolation_and_safe_task_states", func(t *testing.T) {
reject(1452, taskSQL, nsB, id(), queueA)
t.Run("no_foreign_keys_and_safe_task_states", func(t *testing.T) {
var count int
if err := db.QueryRowContext(ctx, `SELECT COUNT(*) FROM information_schema.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_SCHEMA=DATABASE()`).Scan(&count); err != nil || count != 0 {
t.Fatalf("foreign keys must be absent: %d %v", count, err)
}
reject(3819, "UPDATE pulse_tasks SET state='RUNNING' WHERE namespace_id=? AND id=?", nsA, taskA)
reject(3819, "UPDATE pulse_tasks SET state='UNRECOGNIZED' WHERE namespace_id=? AND id=?", nsA, taskA)
reject(3819, "UPDATE pulse_tasks SET state='SUCCEEDED' WHERE namespace_id=? AND id=?", nsA, taskA)