Files
orbit/pulse/model/task.go

77 lines
4.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 可空业务关联键,按精确Unicode值检索,区分大小写及尾部空格;不自动提供业务幂等。
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 冻结优先级,0至9,每级30秒排序优势;不提前最早执行时间。
Priority int16 `db:"priority"`
// DispatchAt 数据库生成的排序时间,AvailableAt 减 Priority 乘30秒;只读,不是执行授权。
DispatchAt time.Time `db:"dispatch_at"`
// 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" }