-- ============================================================================ -- P3·3b-A 派发面 e2e·发布翻转(把 gameId=9302 的 feed 卡翻到【回调链新建的】version) -- 缘由:回调链 handleCallback 建【新】version(N)+runtime_package(engineBundle=stub 回的 pong),但 -- 新 runtime_package 落库 status=0(未发布),且 project.current_version_id/feed_rank 仍指占位 93020。 -- 本脚本把三处翻到回调新版本 N,使 feed 服务【回调链产物】(=派发面真产物),证 plumbing 闭环。 -- 自动选 N:gameId=9302 下 gen_task_id 非空(=回调建的,占位 93020 的 gen_task_id 为 NULL)的最新 version。 -- 幂等:纯 UPDATE 翻指针,可重复执行(再跑选同一 N)。 -- 用法:docker exec -i game-staging-mysql mysql --default-character-set=utf8mb4 -uroot -p"$MYSQL_ROOT_PASSWORD" < 本文件 -- ============================================================================ USE `ruoyi-vue-pro`; SET NAMES utf8mb4; START TRANSACTION; -- 选回调新建的最新 version N(gen_task_id 非空 = 回调链建的;占位 93020 gen_task_id 为 NULL 被排除) SET @vid := (SELECT id FROM game_version WHERE game_id = 9302 AND gen_task_id IS NOT NULL AND deleted = b'0' ORDER BY id DESC LIMIT 1); -- 防御:未找到回调新版本则不翻(保持占位态,避免把 feed 指向不存在版本) -- (@vid 为 NULL 时下方 UPDATE 的 WHERE 不命中任何行,安全空操作) -- ① 把回调新版本对应的 runtime_package 发布(status 0→1);占位 93020 包仍在但不再被 feed 指 UPDATE game_runtime_package SET status = 1, updater = 'p3b-flip', update_time = NOW() WHERE game_id = 9302 AND version_id = @vid AND @vid IS NOT NULL; -- ② project.current_version_id 指向回调新版本 N UPDATE game_project SET current_version_id = @vid, updater = 'p3b-flip', update_time = NOW() WHERE id = 9302 AND @vid IS NOT NULL; -- ③ feed_rank.version_id 指向回调新版本 N(feed 卡 /play 取此 version 的包 = 回调产物 pong) UPDATE game_feed_rank SET version_id = @vid, updater = 'p3b-flip', update_time = NOW() WHERE game_id = 9302 AND @vid IS NOT NULL; COMMIT; -- 回读:翻转后的指针 + 新版本运行包态(@vid 即 feed 现服务的 versionId,供 CDP driver 用) SELECT @vid AS flipped_version_id; SELECT 'project.current_version' k, current_version_id v FROM game_project WHERE id=9302 UNION ALL SELECT 'feed_rank.version', version_id FROM game_feed_rank WHERE game_id=9302 UNION ALL SELECT 'new_pkg.status', status FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid UNION ALL SELECT 'new_pkg.bundleSize', bundle_size FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid; -- 校验 engineBundle 真入包(LENGTH>0 = 回调把 pong bundle 落进 package_json) SELECT 'engineBundle_in_pkg_len' k, CHAR_LENGTH(JSON_UNQUOTE(JSON_EXTRACT(package_json, '$.engineBundle'))) v FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid; -- 校验 checksum 自洽(列值 == 对所存 package_json 重算的 sha256)——宿主完整性校验链不变量 SELECT 'checksum_selfconsistent' k, (checksum = LOWER(SHA2(package_json, 256))) v FROM game_runtime_package WHERE game_id=9302 AND version_id=@vid;