feat: schedule persistent archive jobs with console management
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
-- 周期计划、固定范围作业和领取租约;不使用数据库外键,不删除历史源记录。
|
||||
CREATE TABLE orbit_archive_plans (
|
||||
namespace_id BINARY(16) NOT NULL COMMENT '所属命名空间,由事务核验',
|
||||
kind VARCHAR(16) NOT NULL COMMENT '固定历史类别,同一命名空间每类一个计划',
|
||||
revision BIGINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '配置版本,后台触发不修改此版本',
|
||||
enabled BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否触发新作业,不中断已有作业',
|
||||
policy_revision BIGINT UNSIGNED NOT NULL COMMENT '管理员确认的保留策略版本',
|
||||
storage_id BINARY(16) NOT NULL COMMENT '固定归档卷身份,接管节点必须挂载同一物理卷',
|
||||
interval_seconds INT UNSIGNED NOT NULL COMMENT '周期秒数,3600至2592000,错过多次合并一次',
|
||||
batch_size INT UNSIGNED NOT NULL COMMENT '每批根记录上限,1至100',
|
||||
max_bytes BIGINT UNSIGNED NOT NULL COMMENT '新作业累计文件字节预算,1MiB至1GiB',
|
||||
next_run_at DATETIME(6) NOT NULL COMMENT '下次触发UTC时间,首次启用立即到期',
|
||||
active_job_id BINARY(16) NULL COMMENT '未完成或失败待处理作业,成功或关闭后为空',
|
||||
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '首次保存UTC时间',
|
||||
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '配置最后修改UTC时间',
|
||||
PRIMARY KEY(namespace_id,kind),
|
||||
KEY ix_archive_plan_due(storage_id,enabled,next_run_at),
|
||||
CONSTRAINT ck_archive_plan_kind CHECK(kind IN ('tasks','workflows','events','audit','deliveries','inbox','idempotency')),
|
||||
CONSTRAINT ck_archive_plan_config CHECK(revision>0 AND policy_revision>0 AND interval_seconds BETWEEN 3600 AND 2592000 AND batch_size BETWEEN 1 AND 100 AND max_bytes BETWEEN 1048576 AND 1073741824)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_as_cs COMMENT='按命名空间和类别配置的周期归档计划,无外键';
|
||||
CREATE TABLE orbit_archive_jobs (
|
||||
namespace_id BINARY(16) NOT NULL COMMENT '所属命名空间,由事务核验',
|
||||
id BINARY(16) NOT NULL COMMENT '作业及目录及文件清单的固定标识',
|
||||
kind VARCHAR(16) NOT NULL COMMENT '创建时固定的历史类别',
|
||||
plan_revision BIGINT UNSIGNED NOT NULL COMMENT '创建时固定的计划版本',
|
||||
policy_revision BIGINT UNSIGNED NOT NULL COMMENT '创建时固定的保留策略版本',
|
||||
storage_id BINARY(16) NOT NULL COMMENT '固定归档卷身份,不允许跨独立磁盘接管',
|
||||
batch_size INT UNSIGNED NOT NULL COMMENT '创建时固定的单批根记录上限',
|
||||
max_bytes BIGINT UNSIGNED NOT NULL COMMENT '累计文件字节预算,人工重试仅可提高',
|
||||
state VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING待领取RUNNING执行中SUCCEEDED完成FAILED待处理ABANDONED已关闭',
|
||||
revision BIGINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态并发版本,领取确认和人工操作递增',
|
||||
attempts INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '累计领取次数,包含分批继续和崩溃接管',
|
||||
batches INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已验证并入库的连续文件批次数',
|
||||
roots BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已确认根记录总数',
|
||||
bytes BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '已确认清单及批次总字节数',
|
||||
last_sha256 CHAR(64) NOT NULL DEFAULT '' COMMENT '已确认文件链尾摘要,恢复必须验证此前缀',
|
||||
error_code VARCHAR(32) NOT NULL DEFAULT '' COMMENT '固定失败分类,不记录原始异常或业务内容',
|
||||
lease_id BINARY(16) NULL COMMENT '领取随机代次,非执行中为空',
|
||||
lease_until DATETIME(6) NULL COMMENT 'UTC租约截止,过期可接管,非执行中为空',
|
||||
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '作业创建UTC时间',
|
||||
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '状态最后变更UTC时间',
|
||||
PRIMARY KEY(namespace_id,id),
|
||||
KEY ix_archive_job_claim(storage_id,state,lease_until,updated_at),
|
||||
KEY ix_archive_job_list(namespace_id,created_at,id),
|
||||
CONSTRAINT ck_archive_job_state CHECK(state IN ('PENDING','RUNNING','SUCCEEDED','FAILED','ABANDONED')),
|
||||
CONSTRAINT ck_archive_job_config CHECK(revision>0 AND plan_revision>0 AND policy_revision>0 AND batch_size BETWEEN 1 AND 100 AND max_bytes BETWEEN 1048576 AND 1073741824),
|
||||
CONSTRAINT ck_archive_job_lease CHECK((state='RUNNING' AND lease_id IS NOT NULL AND lease_until IS NOT NULL) OR (state<>'RUNNING' AND lease_id IS NULL AND lease_until IS NULL))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_as_cs COMMENT='持久归档作业及租约,只读源数据,无外键';
|
||||
Reference in New Issue
Block a user