feat: publish atomic shadow snapshot generations

This commit is contained in:
zgw
2026-09-03 13:34:52 +08:00
parent 21cf0a5151
commit 3e9f61487c
5 changed files with 2426 additions and 450 deletions

View File

@@ -2,6 +2,15 @@
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT package_id, package_version, installed_at FROM alg.shadow_package_manifest;
SELECT warehouse_id, snapshot_generation, snapshot_status, synchronized_at, source_signature, DATEDIFF(SECOND, synchronized_at, SYSUTCDATETIME()) AS generation_age_seconds FROM alg.shadow_snapshot_state;
SELECT warehouse_id, snapshot_generation, COUNT_BIG(*) AS input_row_count FROM alg.shadow_inbound_request_snapshot GROUP BY warehouse_id, snapshot_generation;
SELECT warehouse_id, instance_id, claimed_at, last_seen_at FROM alg.shadow_instance_heartbeat;
SELECT warehouse_id, metric_name, bucket_upper_micros, metric_count, metric_total_micros, metric_max_micros FROM alg.shadow_runtime_metric;
SELECT warehouse_id, snapshot_generation, COUNT_BIG(*) AS comparison_completeness FROM alg.shadow_outbound_request_snapshot GROUP BY warehouse_id, snapshot_generation;
SELECT warehouse_id, COUNT_BIG(*) AS inventory_parity FROM alg.inventory_item_snapshot GROUP BY warehouse_id;
SELECT request_session_id, blocking_session_id, wait_type, resource_description FROM sys.dm_exec_requests WHERE wait_type IS NOT NULL AND resource_description LIKE '%alg.%';
SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar(30)) AS product_version,
DB_NAME() AS database_name,
SYSUTCDATETIME() AS checked_at_utc;

View File

@@ -1,103 +1,24 @@
/*
Removes only the exact FT546 shadow package version after ownership checks.
Export alg.decision_log and stop the shadow application first.
No Legacy WMS business row is modified by this script.
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF SCHEMA_ID(N'alg') IS NULL
THROW 51010, 'FT546 shadow uninstall refused: alg schema does not exist', 1;
IF OBJECT_ID(N'alg.shadow_package_manifest', N'U') IS NULL
THROW 51011, 'FT546 shadow uninstall refused: shadow package manifest does not match', 1;
IF (SELECT COUNT(*) FROM alg.shadow_package_manifest
WHERE package_id = 'FT546WMS_SHADOW_ONLY'
AND package_version = '2026-08-12-1') <> 1
OR (SELECT COUNT(*) FROM alg.shadow_package_manifest) <> 1
THROW 51012, 'FT546 shadow uninstall refused: shadow package manifest does not match', 1;
DECLARE @expected_objects TABLE (
object_name sysname NOT NULL PRIMARY KEY,
object_type char(2) NOT NULL
);
INSERT INTO @expected_objects (object_name, object_type) VALUES
(N'shadow_package_manifest', 'U'),
(N'warehouse_policy', 'U'),
(N'project_policy', 'U'),
(N'space_role', 'U'),
(N'space_topology', 'U'),
(N'inventory_item_snapshot', 'U'),
(N'space_inventory_summary', 'U'),
(N'lane_state', 'U'),
(N'reservation', 'U'),
(N'deep_workflow_lock', 'U'),
(N'decision_log', 'U'),
(N'v_inventory_item', 'V'),
(N'v_active_job', 'V'),
(N'v_space_state', 'V'),
(N'usp_rebuild_space_topology', 'P'),
(N'usp_sync_inventory_snapshot', 'P'),
(N'usp_compute_lane_semantic_fingerprint', 'P'),
(N'usp_rebuild_lane_state', 'P'),
(N'usp_refresh_dirty_lanes', 'P');
IF EXISTS (
SELECT 1
FROM sys.objects object
LEFT JOIN @expected_objects expected
ON expected.object_name = object.name AND expected.object_type = object.type
WHERE object.schema_id = SCHEMA_ID(N'alg')
AND object.is_ms_shipped = 0
AND object.parent_object_id = 0
AND expected.object_name IS NULL
)
THROW 51013, 'FT546 shadow uninstall refused: unknown object exists in alg schema', 1;
IF EXISTS (
SELECT 1
FROM @expected_objects expected
LEFT JOIN sys.objects object
ON object.schema_id = SCHEMA_ID(N'alg')
AND object.name = expected.object_name
AND object.type = expected.object_type
WHERE object.object_id IS NULL
)
THROW 51014, 'FT546 shadow uninstall refused: expected object is missing or has wrong type', 1;
IF SCHEMA_ID(N'alg') IS NULL THROW 51010, 'FT546 shadow uninstall refused: alg schema does not exist', 1;
IF OBJECT_ID(N'alg.shadow_package_manifest', N'U') IS NULL THROW 51011, 'FT546 shadow uninstall refused: shadow package manifest does not match', 1;
IF (SELECT COUNT(*) FROM alg.shadow_package_manifest WHERE package_id='FT546WMS_SHADOW_ONLY' AND package_version='2026-09-03-3')<>1 OR (SELECT COUNT(*) FROM alg.shadow_package_manifest)<>1 THROW 51012, 'FT546 shadow uninstall refused: shadow package manifest does not match', 1;
DECLARE @expected_objects TABLE (object_name sysname NOT NULL PRIMARY KEY, object_type char(2) NOT NULL);
INSERT INTO @expected_objects VALUES
(N'shadow_package_manifest','U'),(N'warehouse_policy','U'),(N'project_policy','U'),(N'space_role','U'),(N'space_topology','U'),(N'inventory_item_snapshot','U'),(N'space_inventory_summary','U'),(N'lane_state','U'),(N'reservation','U'),(N'deep_workflow_lock','U'),(N'decision_log','U'),(N'shadow_snapshot_state','U'),(N'cargo_space_snapshot','U'),(N'active_job_snapshot','U'),(N'shadow_inbound_request_snapshot','U'),(N'shadow_outbound_request_snapshot','U'),(N'shadow_runtime_metric','U'),(N'shadow_instance_heartbeat','U'),
(N'v_inventory_item','V'),(N'v_active_job','V'),(N'v_space_state','V'),(N'usp_rebuild_space_topology','P'),(N'usp_sync_inventory_snapshot','P'),(N'usp_compute_lane_semantic_fingerprint','P'),(N'usp_rebuild_lane_state','P'),(N'usp_refresh_dirty_lanes','P'),(N'usp_claim_shadow_instance','P'),(N'usp_refresh_shadow_snapshot','P');
IF EXISTS (SELECT 1 FROM sys.objects object LEFT JOIN @expected_objects expected ON expected.object_name = object.name AND expected.object_type = object.type WHERE object.schema_id = SCHEMA_ID(N'alg') AND object.is_ms_shipped = 0 AND object.parent_object_id = 0 AND expected.object_name IS NULL) THROW 51013, 'FT546 shadow uninstall refused: unknown object exists in alg schema', 1;
IF EXISTS (SELECT 1 FROM @expected_objects expected LEFT JOIN sys.objects object ON object.schema_id=SCHEMA_ID(N'alg') AND object.name=expected.object_name AND object.type=expected.object_type WHERE object.object_id IS NULL) THROW 51014, 'FT546 shadow uninstall refused: expected object is missing or has wrong type', 1;
BEGIN TRY
BEGIN TRANSACTION;
DROP PROCEDURE alg.usp_refresh_dirty_lanes;
DROP PROCEDURE alg.usp_rebuild_lane_state;
DROP PROCEDURE alg.usp_compute_lane_semantic_fingerprint;
DROP PROCEDURE alg.usp_sync_inventory_snapshot;
DROP PROCEDURE alg.usp_rebuild_space_topology;
DROP VIEW alg.v_space_state;
DROP VIEW alg.v_active_job;
DROP VIEW alg.v_inventory_item;
DROP TABLE alg.decision_log;
DROP TABLE alg.deep_workflow_lock;
DROP TABLE alg.reservation;
DROP TABLE alg.lane_state;
DROP TABLE alg.space_inventory_summary;
DROP TABLE alg.inventory_item_snapshot;
DROP TABLE alg.space_topology;
DROP TABLE alg.space_role;
DROP TABLE alg.project_policy;
DROP TABLE alg.warehouse_policy;
DROP TABLE alg.shadow_package_manifest;
EXEC(N'DROP SCHEMA alg');
COMMIT TRANSACTION;
BEGIN TRANSACTION;
DROP PROCEDURE alg.usp_refresh_shadow_snapshot; DROP PROCEDURE alg.usp_claim_shadow_instance; DROP PROCEDURE alg.usp_refresh_dirty_lanes; DROP PROCEDURE alg.usp_rebuild_lane_state; DROP PROCEDURE alg.usp_compute_lane_semantic_fingerprint; DROP PROCEDURE alg.usp_sync_inventory_snapshot; DROP PROCEDURE alg.usp_rebuild_space_topology;
DROP VIEW alg.v_space_state; DROP VIEW alg.v_active_job; DROP VIEW alg.v_inventory_item;
DROP TABLE alg.shadow_instance_heartbeat; DROP TABLE alg.shadow_runtime_metric; DROP TABLE alg.shadow_outbound_request_snapshot; DROP TABLE alg.shadow_inbound_request_snapshot; DROP TABLE alg.active_job_snapshot; DROP TABLE alg.cargo_space_snapshot; DROP TABLE alg.shadow_snapshot_state; DROP TABLE alg.decision_log; DROP TABLE alg.deep_workflow_lock; DROP TABLE alg.reservation; DROP TABLE alg.lane_state; DROP TABLE alg.space_inventory_summary; DROP TABLE alg.inventory_item_snapshot; DROP TABLE alg.space_topology; DROP TABLE alg.space_role; DROP TABLE alg.project_policy; DROP TABLE alg.warehouse_policy; DROP TABLE alg.shadow_package_manifest;
DROP SCHEMA alg;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
THROW;
IF @@TRANCOUNT>0 ROLLBACK TRANSACTION;
THROW;
END CATCH;
GO

File diff suppressed because it is too large Load Diff