75 lines
4.1 KiB
Go
75 lines
4.1 KiB
Go
package model
|
||
|
||
import (
|
||
"time"
|
||
|
||
core "git.yuntuo.hk/k2safe/orbit/model"
|
||
)
|
||
|
||
// Task 表示任务主记录,执行尝试另存历史,终态不自动回退。
|
||
// 对应表 pulse_tasks;这是服务端持久化模型,不直接作为 API 响应。
|
||
type Task struct {
|
||
// Record 包含命名空间、记录标识、并发版本和 UTC 时间。
|
||
core.Record
|
||
// QueueID 任务所属队列,必须属于同一命名空间。
|
||
QueueID core.ID `db:"queue_id"`
|
||
// GateID 可选执行门控;为空表示没有流程级门控,仍受队列与权限控制。
|
||
GateID *core.ID `db:"gate_id"`
|
||
// State 任务状态;与执行尝试状态分开,未知业务效果进入待核查。
|
||
State TaskState `db:"state"`
|
||
// Handler 业务 Worker 注册的处理器名称。
|
||
Handler string `db:"handler"`
|
||
// HandlerVersion 处理器兼容版本,受理后不得静默替换。
|
||
HandlerVersion string `db:"handler_version"`
|
||
// PayloadVersion 输入参数的解释版本。
|
||
PayloadVersion string `db:"payload_version"`
|
||
// Payload 版本化输入或事件内容;仅承载通用 JSON,不解释行业规则。
|
||
Payload core.JSON `db:"payload"`
|
||
// Result 已保存的结果或结果引用 JSON;未取得结果时为空。
|
||
Result core.JSON `db:"result"`
|
||
// EffectUncertain 曾有已授权执行的效果尚未核实;重试/超时不能清除,仅权威成功或后续核查可解除。
|
||
EffectUncertain bool `db:"effect_uncertain"`
|
||
// PolicySnapshot 受理时冻结的实际生效策略 JSON。
|
||
PolicySnapshot core.JSON `db:"policy_snapshot"`
|
||
// RecoverySafety 恢复安全等级;未知值按需要核查处理,不能默认自动重跑。
|
||
RecoverySafety RecoverySafety `db:"recovery_safety"`
|
||
// BusinessKey 业务侧关联键,用于检索追踪,不自动提供业务幂等;可为空,表示尚未设置该关联或值。
|
||
BusinessKey *string `db:"business_key"`
|
||
// ConcurrencyKey 显式互斥资源键,命名空间内跨队列共享;空表示不启用。
|
||
ConcurrencyKey *string `db:"concurrency_key"`
|
||
// ConcurrencyKeyDigest 资源键精确 UTF-8 字节的域分隔摘要,与键同时为空或非空。
|
||
ConcurrencyKeyDigest *core.Digest `db:"concurrency_key_digest"`
|
||
// OwnerKind 来源资源类型,例如流程激活;为空表示无来源关联。
|
||
OwnerKind *string `db:"owner_kind"`
|
||
// OwnerID 来源资源标识,必须与来源类型同时有值或同时为空。
|
||
OwnerID *core.ID `db:"owner_id"`
|
||
// Priority 同一调度范围内的优先级,不承诺跨队列全局顺序。
|
||
Priority int16 `db:"priority"`
|
||
// AvailableAt 最早可被领取或处理的时间,统一 UTC。
|
||
AvailableAt time.Time `db:"available_at"`
|
||
// StartDeadlineAt 最晚允许新尝试开始的时间;为空时仅受总时限约束。
|
||
StartDeadlineAt *time.Time `db:"start_deadline_at"`
|
||
// DeadlineAt 总截止时间,统一 UTC;到期不能证明外部业务没有生效。
|
||
DeadlineAt time.Time `db:"deadline_at"`
|
||
// AttemptTimeoutMS 单次尝试的超时时长,单位毫秒。
|
||
AttemptTimeoutMS uint64 `db:"attempt_timeout_ms"`
|
||
// MaxAttempts 最多执行尝试数,包含首次尝试。
|
||
MaxAttempts uint32 `db:"max_attempts"`
|
||
// AttemptCount 已产生的执行尝试数,恢复时不得重置。
|
||
AttemptCount uint32 `db:"attempt_count"`
|
||
// CurrentAttemptID 当前关联的执行尝试,必须属于本任务;可为空,表示尚未设置该关联或值。
|
||
CurrentAttemptID *core.ID `db:"current_attempt_id"`
|
||
// LeaseEpoch 递增的执行或消费代次,用于隔离旧授权。
|
||
LeaseEpoch uint64 `db:"lease_epoch"`
|
||
// LeaseUntil 当前执行授权截止时间;没有有效授权时为空。
|
||
LeaseUntil *time.Time `db:"lease_until"`
|
||
// CancelRequestedAt 取消意图的持久化时间;不等于取消已完成;可为空,表示尚未设置该关联或值。
|
||
CancelRequestedAt *time.Time `db:"cancel_requested_at"`
|
||
// RetryOf 来源记录标识,人工重新发起时用于保留历史关联;可为空,表示尚未设置该关联或值。
|
||
RetryOf *core.ID `db:"retry_of"`
|
||
// CompletedAt 终结时间;非终态为空,进入终态时必须写入。
|
||
CompletedAt *time.Time `db:"completed_at"`
|
||
}
|
||
|
||
func (Task) TableName() string { return "pulse_tasks" }
|