Основные изменения:
состояние окон видимости, расписания планов, попыток выдачи и job’ов перенесено в БД; план и попытка выдачи разделены на разные сущности; Kafka-события теперь двигают persisted state/jobs, а не локальную память pod’а; BPMN createSatelliteMission теперь отвечает только за одну попытку выдачи плана; обновление слотов после принятия плана вынесено в отдельный BPMN-процесс; workers используют DB claim/lock model и безопасны для нескольких pod’ов; тестовый ручной API вынесен в отдельный disabled-by-default controller
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
||||
CREATE TABLE IF NOT EXISTS spacecraft_snapshot (
|
||||
spacecraft_id VARCHAR(255) PRIMARY KEY,
|
||||
norad_id BIGINT NOT NULL,
|
||||
nsi_id VARCHAR(255),
|
||||
business_key VARCHAR(255),
|
||||
name VARCHAR(1024),
|
||||
status VARCHAR(255),
|
||||
mission VARCHAR(1024),
|
||||
valid_from TIMESTAMP,
|
||||
valid_to TIMESTAMP,
|
||||
active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS spacecraft_visibility_snapshot (
|
||||
spacecraft_id VARCHAR(255) PRIMARY KEY,
|
||||
norad_id BIGINT NOT NULL,
|
||||
payload_json TEXT NOT NULL,
|
||||
payload_hash VARCHAR(128) NOT NULL,
|
||||
fetched_at TIMESTAMP NOT NULL,
|
||||
visibility_from TIMESTAMP,
|
||||
visibility_to TIMESTAMP,
|
||||
windows_count INTEGER,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS planned_plan (
|
||||
plan_id UUID PRIMARY KEY,
|
||||
spacecraft_id VARCHAR(255) NOT NULL,
|
||||
start_time TIMESTAMP NOT NULL,
|
||||
end_time TIMESTAMP NOT NULL,
|
||||
kpp_id VARCHAR(255) NOT NULL,
|
||||
status VARCHAR(64) NOT NULL,
|
||||
issue_not_before TIMESTAMP,
|
||||
base_plan_id UUID,
|
||||
chain_version BIGINT NOT NULL DEFAULT 0,
|
||||
accepted_at TIMESTAMP,
|
||||
superseded_by_plan_id UUID,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL,
|
||||
CONSTRAINT uq_planned_plan_business_key UNIQUE (spacecraft_id, start_time, end_time, kpp_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_planned_plan_due
|
||||
ON planned_plan (status, issue_not_before, start_time);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_planned_plan_spacecraft_start
|
||||
ON planned_plan (spacecraft_id, start_time);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS plan_issue_attempt (
|
||||
attempt_id UUID PRIMARY KEY,
|
||||
plan_id UUID NOT NULL REFERENCES planned_plan(plan_id),
|
||||
attempt_no INTEGER NOT NULL,
|
||||
status VARCHAR(64) NOT NULL,
|
||||
process_instance_key BIGINT,
|
||||
decision_event_id UUID,
|
||||
decision_reason TEXT,
|
||||
started_at TIMESTAMP,
|
||||
finished_at TIMESTAMP,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL,
|
||||
CONSTRAINT uq_plan_issue_attempt_no UNIQUE (plan_id, attempt_no)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_plan_issue_attempt_plan
|
||||
ON plan_issue_attempt (plan_id, attempt_no);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS visibility_refresh_job (
|
||||
spacecraft_id VARCHAR(255) PRIMARY KEY,
|
||||
norad_id BIGINT,
|
||||
status VARCHAR(64) NOT NULL,
|
||||
reason VARCHAR(255),
|
||||
locked_by VARCHAR(255),
|
||||
locked_until TIMESTAMP,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
requested_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS plan_recalculation_job (
|
||||
spacecraft_id VARCHAR(255) PRIMARY KEY,
|
||||
status VARCHAR(64) NOT NULL,
|
||||
reason VARCHAR(255),
|
||||
locked_by VARCHAR(255),
|
||||
locked_until TIMESTAMP,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
requested_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS processed_plan_decision_event (
|
||||
event_id UUID PRIMARY KEY,
|
||||
received_at TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE spacecraft_planning_state
|
||||
ADD COLUMN IF NOT EXISTS active_plan_id UUID;
|
||||
|
||||
ALTER TABLE spacecraft_planning_state
|
||||
ADD COLUMN IF NOT EXISTS active_attempt_id UUID;
|
||||
|
||||
ALTER TABLE spacecraft_planning_state
|
||||
ADD COLUMN IF NOT EXISTS chain_version BIGINT NOT NULL DEFAULT 0;
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
CREATE TABLE IF NOT EXISTS accepted_plan_slots_update_job (
|
||||
plan_id UUID PRIMARY KEY,
|
||||
status VARCHAR(32) NOT NULL,
|
||||
process_instance_key BIGINT NULL,
|
||||
locked_by VARCHAR(255) NULL,
|
||||
locked_until TIMESTAMP NULL,
|
||||
attempts INT NOT NULL DEFAULT 0,
|
||||
last_error TEXT NULL,
|
||||
created_at TIMESTAMP NOT NULL,
|
||||
updated_at TIMESTAMP NOT NULL
|
||||
);
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE visibility_refresh_job
|
||||
ADD COLUMN IF NOT EXISTS rerun_requested BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
ALTER TABLE plan_recalculation_job
|
||||
ADD COLUMN IF NOT EXISTS rerun_requested BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
Reference in New Issue
Block a user