- U06/N03:Dispatcher 逐条循环显式排除 KAFKA_SCHD(唯一出口 flushSchd 批量聚合), 修复 schd 事件被无条件 markSent 吞掉、flush 永远 claim 不到的整链死路;flush 失败整批 保持 PENDING、lastFlush 仅成功后推进(N24) - U08 部分:Pump/Dispatcher loop 异常隔离(单次异常不静默死亡,U12 补告警日志); processOne FAILED 入口 attempts 毒丸升级 DEAD(防退避到期后无限重试); N28:backoffFor(attempt≤0) 下界保护不再抛异常 - U10/N21:未注册 handler → FAILED(UNSUPPORTED)+退避(绝不写终态);占位安全化—— HistorySweep.pickHistory 占位改空集(T07 修订)、SnapshotFlow staging 未实装改 FAILED(UNSUPPORTED)+退避而非 DEAD(N05),CAS 冲突 FAILED(INFRA)+退避(N06 紧循环修复) - U11/T06:decode 失败差异化——MALFORMED→DEAD 不重试;CODEC_ERROR→FAILED 可重放 - 新增 ErrorClass.UNSUPPORTED;单测:DispatcherTickTest(3)/MessageProcessorTest(6)/ PipelinePropsTest(2),19 个测试全绿
83 lines
3.8 KiB
SQL
83 lines
3.8 KiB
SQL
-- =====================================================================
|
||
-- ACMA-8 v4 数据模型(六表)· Flyway 基线迁移
|
||
-- 与 issue「综合架构设计」数据模型节逐字一致;影子实例在独立 schema 执行同一脚本。
|
||
--
|
||
-- U04/R01 前置声明:本脚本只建六张辅助表,假定 CMINMSGS/CMINMSGS_HST/COUTMSGS 等 legacy
|
||
-- 旧表已存在(本仓库不声明旧表 V1,归 legacy 仓库维护)。全新空库请先按 legacy schema
|
||
-- 建旧表再执行本脚本,否则收报首句 SQL 会报表不存在(详见 README「数据库初始化」)。
|
||
-- =====================================================================
|
||
|
||
-- ① 处理状态伴生表(不动 CMINMSGS 旧列;
|
||
-- 回滚兼容:SUCCEEDED 时回填 CMINMSGS.DATE_PROCESSED/STATUS,旧系统可接管续跑)
|
||
CREATE TABLE PROC_STATE (
|
||
CMINMSGS_ID BIGINT PRIMARY KEY,
|
||
STATE VARCHAR(16) NOT NULL, -- PENDING/FAILED/SUCCEEDED/SKIPPED/DEAD
|
||
IDENTITY_KEY VARCHAR(200) NULL, -- SNDR|TYPE|STYP|SEQN,decode 后首次绑定(I3)
|
||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||
NEXT_ATTEMPT_AT TIMESTAMP NULL,
|
||
ERROR_CLASS VARCHAR(20) NULL, -- MALFORMED/CODEC_ERROR/EXHAUSTED/INFRA/UNSUPPORTED
|
||
LAST_ERROR VARCHAR(1000) NULL,
|
||
UPDATED_AT TIMESTAMP NOT NULL,
|
||
UNIQUE KEY UK_PROC_IDENTITY (IDENTITY_KEY),
|
||
INDEX IDX_PROC_HEAD (STATE, CMINMSGS_ID) -- 主泵队头查询(I1)
|
||
);
|
||
|
||
-- ② 统一投递事件(outbox)
|
||
CREATE TABLE MSG_EVENT (
|
||
EVENT_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
TARGET VARCHAR(30) NOT NULL, -- KAFKA:msg / KAFKA:schd(A起);ES:flight_hts / REDIS:flightInfo(B起)
|
||
PARTITION_KEY VARCHAR(64) NULL, -- schd 事件恒为 FLID
|
||
PAYLOAD_JSON MEDIUMTEXT NOT NULL,
|
||
STATE VARCHAR(16) NOT NULL, -- PENDING/SENT/DEAD
|
||
ATTEMPTS INT NOT NULL DEFAULT 0,
|
||
NEXT_ATTEMPT_AT TIMESTAMP NULL,
|
||
ERROR_CLASS VARCHAR(20) NULL,
|
||
LAST_ERROR VARCHAR(1000) NULL,
|
||
CREATED_AT TIMESTAMP NOT NULL,
|
||
INDEX IDX_EVT_HEAD (TARGET, STATE, EVENT_ID) -- 每 target 队头查询(I1 双层同策略)
|
||
);
|
||
|
||
-- ③ 参考数据 + SCHD generation 元数据(21 类;SCHD_GEN 行 RKEY=日期)
|
||
CREATE TABLE REF_DATA (
|
||
RTYPE VARCHAR(20) NOT NULL, -- AIRL/ARPT/... | SCHD_GEN
|
||
RKEY VARCHAR(64) NOT NULL,
|
||
PAYLOAD_JSON MEDIUMTEXT NOT NULL, -- SCHD_GEN: {"flids":[...],"version":N}
|
||
VERSION BIGINT NOT NULL DEFAULT 0, -- putGenIfVersion CAS 依据(流程 4)
|
||
SOURCE VARCHAR(20) NOT NULL, -- ADMINAPI / AODB / PIPELINE
|
||
REFRESHED_AT TIMESTAMP NOT NULL,
|
||
PRIMARY KEY (RTYPE, RKEY)
|
||
);
|
||
|
||
-- ④ 请求状态机(15 类,流程 6)
|
||
CREATE TABLE REQ_TRACK (
|
||
REQ_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
REQ_TYPE VARCHAR(20) NOT NULL,
|
||
PARAMS_JSON VARCHAR(500) NOT NULL,
|
||
STATE VARCHAR(16) NOT NULL, -- REGISTERED/SENT/WAITING/DONE/EXPIRED
|
||
COUTMSGS_ID INT NULL,
|
||
SENT_AT TIMESTAMP NULL,
|
||
COMPLETED_AT TIMESTAMP NULL,
|
||
INDEX IDX_REQ_OPEN (REQ_TYPE, STATE)
|
||
);
|
||
|
||
-- ⑤ 泵作业队列(定时任务统一入口:cron 触发入队,主泵 FIFO 执行)
|
||
CREATE TABLE PUMP_JOB (
|
||
JOB_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
KIND VARCHAR(20) NOT NULL, -- ARCHIVE / HISTORY_SWEEP / PROJECTION_REBUILD
|
||
STATE VARCHAR(16) NOT NULL, -- QUEUED/RUNNING/DONE/FAILED
|
||
CREATED_AT TIMESTAMP NOT NULL,
|
||
UPDATED_AT TIMESTAMP NOT NULL,
|
||
LAST_ERROR VARCHAR(1000) NULL
|
||
);
|
||
|
||
-- ⑥ 航班状态权威(阶段 B 启用;此前 Redis 为权威,I5)
|
||
CREATE TABLE FLIGHT_STATE (
|
||
FLID VARCHAR(32) PRIMARY KEY,
|
||
FDAY DATE NOT NULL,
|
||
VERSION BIGINT NOT NULL,
|
||
MAID VARCHAR(32) NULL,
|
||
PAYLOAD_JSON MEDIUMTEXT NOT NULL, -- 投影兼容格式的 FLTR JSON
|
||
UPDATED_AT TIMESTAMP NOT NULL,
|
||
INDEX IDX_FS_DAY (FDAY, VERSION)
|
||
);
|