Provision the isolated game-source writer path, bind source uploads to GameSourceArchive manifests, and require every immutable storage field for pending-to-committed CAS. Reuse the gate-validated runtime manifest snapshot, normalize remote storage errors, and record the staging object/CAS evidence.
44 lines
4.6 KiB
SQL
44 lines
4.6 KiB
SQL
-- =============================================================================
|
||
-- 契约 #2 DB 迁移 | 模块:runtime/storage(对象存储版本状态)| owner:WS3 + WS2
|
||
-- 文件:V34.0.0__create_game_artifact_storage.sql
|
||
-- 目的:保存对象存储清单的桶、key、hash、源修订身份和 pending/committed 状态。
|
||
-- 边界:本表只负责对象存储提交状态;运行包自身的取包状态仍由 runtime 表管理。
|
||
-- =============================================================================
|
||
|
||
CREATE TABLE `game_artifact_storage` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '对象存储记录 ID',
|
||
`tenant_id` BIGINT NOT NULL DEFAULT 0 COMMENT '租户 ID',
|
||
`game_id` BIGINT NOT NULL COMMENT '游戏项目 ID(project.game_project.id)',
|
||
`version_id` BIGINT NOT NULL COMMENT '游戏版本 ID(project.game_version.id)',
|
||
`artifact_bucket` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '运行包/素材/证据清单所在桶',
|
||
`artifact_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'artifact-manifest.json 对象 key',
|
||
`artifact_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GameArtifactManifest/1 manifestHash(域标签 + 去自身字段 canonical JSON SHA-256)',
|
||
`artifact_manifest_bytes` BIGINT NOT NULL DEFAULT 0 COMMENT 'artifact-manifest.json 字节数',
|
||
`runtime_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'GamePackage manifest.json 对象 key',
|
||
`runtime_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GamePackage manifest.json 原始字节 SHA-256;与 runtime checksum 对账',
|
||
`source_bucket` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '引擎无关源归档所在桶;Tier2 外部源修订可为空',
|
||
`source_provider` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '源修订 provider:tier2_source_project/game_source_archive',
|
||
`source_game_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '源修订所属稳定标识',
|
||
`source_revision_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '源修订不可变标识',
|
||
`source_manifest_key` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'GameSourceArchive source-manifest.json key',
|
||
`source_manifest_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'GameSourceArchive/1 manifestHash(域标签 + 去自身字段 canonical JSON SHA-256)',
|
||
`source_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '源文件树 SHA-256',
|
||
`package_type` VARCHAR(16) NOT NULL DEFAULT '' COMMENT '运行包形态:phaser/littlejs/canvas',
|
||
`object_count` INT NOT NULL DEFAULT 0 COMMENT 'artifact manifest 正文对象数量',
|
||
`total_bytes` BIGINT NOT NULL DEFAULT 0 COMMENT '运行包、素材和证据对象总字节数',
|
||
`asset_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '素材 tree hash',
|
||
`bundle_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT '运行 bundle SHA-256;无 bundle 时为空',
|
||
`status` VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '对象状态:pending=已上传并回读校验;committed=数据库 CAS 提交;abandoned=失败回收',
|
||
`failure_reason` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '失败或回收原因,正常状态为空',
|
||
`committed_at` DATETIME NULL COMMENT '数据库 CAS 成功时间',
|
||
`creator` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`updater` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '更新者',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`deleted` BIT(1) NOT NULL DEFAULT b'0' COMMENT '逻辑删除标志;不可用它替换同一 game/version 记录',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_tenant_game_version` (`tenant_id`, `game_id`, `version_id`) COMMENT '同一租户游戏版本不可绑定第二份对象清单',
|
||
KEY `idx_status_created` (`status`, `create_time`) COMMENT '扫描 pending/abandoned 记录',
|
||
KEY `idx_manifest_hash` (`artifact_manifest_hash`) COMMENT '按清单 hash 查询幂等记录'
|
||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '游戏对象存储版本状态记录(与运行包状态分离)';
|