feat: add durable relative task delays and outage recovery regression

This commit is contained in:
2026-09-17 23:43:57 +08:00
parent 522fe2ef3e
commit a664ec9370
34 changed files with 811 additions and 28 deletions

View File

@@ -0,0 +1,34 @@
package mysql
import (
"encoding/json"
"testing"
"git.yuntuo.hk/k2safe/orbit/pulse/service"
)
func TestRelativeDelayPreservesLegacySubmissionDigest(t *testing.T) {
// 升级前已规范化的实际请求形状;新可选字段为零时不能改变原幂等摘要。
legacy := json.RawMessage(`{"queue_id":"11111111111111111111111111111111","handler":"object.prepare","handler_version":"v1","payload_version":"v1","payload":{"n":9007199254740993},"task_timeout_ms":86400000,"recovery_safety":"RECONCILE_ONLY","retry":{"max_attempts":1,"initial_delay_ms":0,"max_delay_ms":0,"attempt_timeout_ms":30000}}`)
var in service.SubmitInput
if err := json.Unmarshal(legacy, &in); err != nil {
t.Fatal(err)
}
in, err := service.NormalizeSubmit(in)
if err != nil {
t.Fatal(err)
}
want, err := requestDigest(legacy)
if err != nil {
t.Fatal(err)
}
got, err := requestDigest(in)
if err != nil || got != want {
t.Fatal("zero delay changed a legacy request identity", err)
}
in.DelayMS = 1000
changed, err := requestDigest(in)
if err != nil || changed == want {
t.Fatal("nonzero delay missing from request identity", err)
}
}