feat: serialize keyed tasks across queues with durable fencing tokens

This commit is contained in:
2026-09-17 18:25:00 +08:00
parent 993786476e
commit 958b4a8cea
43 changed files with 1319 additions and 82 deletions

View File

@@ -21,6 +21,7 @@ type Capability struct {
// ConnectInput 在每次连接时提交;同一进程恢复时保留实例和秘密。
type ConnectInput struct {
ConcurrencyKeys bool `json:"concurrency_keys,omitempty"` // ConcurrencyKeys 显式支持互斥资源键和单调序号交付,重连不可变。
CancellationNotifications bool `json:"cancellation_notifications,omitempty"` // CancellationNotifications 显式接受 task.cancel 提示;事实仍从持久化租约核对。
InstanceID core.ID `json:"instance_id"` // InstanceID 进程标识,重启换新值。
InstanceSecret string `json:"instance_secret"` // InstanceSecret 32 字节随机秘密,只保存摘要。
@@ -56,12 +57,13 @@ type CapacityInput struct {
// Assignment 仅通过已认证执行连接交付,包含敏感尝试秘密。
type Assignment struct {
Task service.TaskView `json:"task"` // Task 受理快照及业务参数。
AttemptID core.ID `json:"attempt_id"` // AttemptID 本次尝试标识。
Epoch uint64 `json:"epoch,string"` // Epoch 任务执行代次,隔离旧尝试。
LeaseSecret string `json:"lease_secret"` // LeaseSecret 执行秘密,禁止普通日志及查询返回。
LeaseUntil time.Time `json:"lease_until"` // LeaseUntil 尚未开始时的预占有效期。
ServerTime time.Time `json:"server_time"` // ServerTime 领取时数据库时间。
ConcurrencyToken uint64 `json:"concurrency_token,omitempty,string"` // ConcurrencyToken 资源键的单调许可序号;无资源键时为零,不能代替当前授权。
Task service.TaskView `json:"task"` // Task 受理快照及业务参数。
AttemptID core.ID `json:"attempt_id"` // AttemptID 本次尝试标识。
Epoch uint64 `json:"epoch,string"` // Epoch 任务执行代次,隔离旧尝试。
LeaseSecret string `json:"lease_secret"` // LeaseSecret 执行秘密,禁止普通日志及查询返回。
LeaseUntil time.Time `json:"lease_until"` // LeaseUntil 尚未开始时的预占有效期。
ServerTime time.Time `json:"server_time"` // ServerTime 领取时数据库时间。
}
// AttemptRef 证明对一次尝试的控制权;连接代次仍由 Binding 单独验证。