pbl_runtime_ext/.m11b2c_tmp/selftest_run1.txt
2026-09-21 11:52:57 +08:00

111 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=== CMD: .venv/bin/python scripts/m11b_selftest.py ===
=== DATE: 2026-09-21T11:23:30+08:00 ===
--- A. 离线单元 ---
partitions | partitions PASS:跨年命名 ['p202611', 'p202612', PASS partitions PASS:跨年命名 ['p202611', 'p202612', 'p202701', 'p202702']
partitions | partitions PASS:下月边界 2027-01-01 PASS partitions PASS:下月边界 2027-01-01
partitions | partitions PASS:已存在分区 skip、缺失分区 add PASS partitions PASS:已存在分区 skip、缺失分区 add
partitions | partitions PASS:DDL ALTER TABLE pbl_runtime PASS partitions PASS:DDL ALTER TABLE pbl_runtime_event ADD PARTITION (PARTITION p202602 VALUES LESS THAN (DATE'2026-03-01'))
partitions | partitions.self_check PASS PASS partitions.self_check PASS
partitions.self_check 整体 PASS
broadcast | broadcast PASS:after_cursor=4 只回 1 条 PASS broadcast PASS:after_cursor=4 只回 1 条
broadcast | broadcast PASS:环形缓冲溢出报 truncated=True PASS broadcast PASS:环形缓冲溢出报 truncated=True
broadcast | broadcast PASS:通道按 tenant.world 隔离 PASS broadcast PASS:通道按 tenant.world 隔离
broadcast | broadcast PASS:订阅者扇出成功 PASS broadcast PASS:订阅者扇出成功
broadcast | broadcast PASS:stats published=6 p95=0.018ms PASS broadcast PASS:stats published=6 p95=0.018ms 越界=0
broadcast | broadcast PASS:通道命名 pbl.world.7.1 PASS broadcast PASS:通道命名 pbl.world.7.1
broadcast | broadcast.self_check PASS PASS broadcast.self_check PASS
broadcast.self_check 整体 PASS
latency | latency PASS:裁决 120ms ≤ 200ms 未越界 PASS latency PASS:裁决 120ms ≤ 200ms 未越界
latency | latency PASS:裁决 450ms > 200ms 记越界 PASS latency PASS:裁决 450ms > 200ms 记越界
latency | latency PASS:summary avg=285.0 p95=450.0 breac PASS latency PASS:summary avg=285.0 p95=450.0 breaches=1
latency | latency PASS:轮询兜底 3000ms 已配置 PASS latency PASS:轮询兜底 3000ms 已配置
latency | latency PASS:p95=10 PASS latency PASS:p95=10
latency | latency PASS:Timer 实测 5.1ms PASS latency PASS:Timer 实测 5.1ms
latency | latency.self_check PASS PASS latency.self_check PASS
latency.self_check 整体 PASS
tx_write | tx_write PASS:幂等键同参同键、异参异键、≤32 字符(bebdba41666 PASS tx_write PASS:幂等键同参同键、异参异键、≤32 字符(bebdba416666…)
tx_write | tx_write PASS:client_event_id 原样透传(重放同键) PASS tx_write PASS:client_event_id 原样透传(重放同键)
tx_write | tx_write PASS:pbl_runtime_event 禁 UPDATE/DELE PASS tx_write PASS:pbl_runtime_event 禁 UPDATE/DELETE/TRUNCATE
tx_write | tx_write PASS:基表写保护生效(world 等 6 张) PASS tx_write PASS:基表写保护生效(world 等 6 张)
tx_write | tx_write PASS:pbl_runtime_event 用到的 13 列与 mod PASS tx_write PASS:pbl_runtime_event 用到的 13 列与 models 定义一致
tx_write | tx_write PASS:pbl_entity_state 用到的 9 列与 model PASS tx_write PASS:pbl_entity_state 用到的 9 列与 models 定义一致
tx_write | tx_write PASS:pbl_world_state_snapshot 用到的 9 PASS tx_write PASS:pbl_world_state_snapshot 用到的 9 列与 models 定义一致
tx_write | tx_write PASS:3 协程契约 + 1 同步守卫签名正确 PASS tx_write PASS:3 协程契约 + 1 同步守卫签名正确
tx_write | probe| PASS P1 正常写入(事件+2状态+快照)单事务提交:stmt=8 事件 PASS probe| PASS P1 正常写入(事件+2状态+快照)单事务提交:stmt=8 事件行=1 状态行=2 快照行=1 广播在commit后=True 占位符违规=0
tx_write | probe| PASS P2 幂等重放:dedup=True 事件行数=1 广播次数=0( PASS probe| PASS P2 幂等重放:dedup=True 事件行数=1 广播次数=0(重放不重复写、不重复广播)
tx_write | probe| PASS P3 乐观锁冲突回滚:错误码=PBL-STATE-CONFLICT PASS probe| PASS P3 乐观锁冲突回滚:错误码=PBL-STATE-CONFLICT commit=-1 rollback=5 事件行残留=0 广播=0
tx_write | probe| PASS P4 中途故障原子性:抛出=RuntimeError rollba PASS probe| PASS P4 中途故障原子性:抛出=RuntimeError rollback=5 已提交事件行=0 已提交状态行=0 广播=0
tx_write | probe| PASS P5 append-only:UPDATE/DELETE/TRUN PASS probe| PASS P5 append-only:UPDATE/DELETE/TRUNCATE 被代码守卫拦截=True 引擎兜底拦截=True
tx_write | probe| PASS P6 占位符/参数数门禁生效:'SELECT 1'+2参数 被拒( PASS probe| PASS P6 占位符/参数数门禁生效:'SELECT 1'+2参数 被拒(错误码=PBL-RTX-0005)
tx_write | probe| PASS P7 契约三处同步:6/6 对齐 PASS probe| PASS P7 契约三处同步:6/6 对齐
tx_write | probe| m11b_probe PASS:7 项探针(state_updates 非空 PASS probe| m11b_probe PASS:7 项探针(state_updates 非空端到端 P1~P4 + 守卫 P5 + 门禁有效性 P6 + 三处同步 P7)
tx_write | tx_write.self_check PASS PASS tx_write.self_check PASS
tx_write.self_check 整体 PASS
m11b_api | m11b_api PASS:5 个协程契约齐备 PASS m11b_api PASS:5 个协程契约齐备
m11b_api | m11b_api PASS:assert_append_only 同步守卫可调用 PASS m11b_api PASS:assert_append_only 同步守卫可调用
m11b_api | m11b_api PASS:contracts 清单 8 项与注册表一致 PASS m11b_api PASS:contracts 清单 8 项与注册表一致
m11b_api | m11b_api.self_check PASS PASS m11b_api.self_check PASS
m11b_api.self_check 整体 PASS
rtx_db | rtx_db PASS:仅用 sor.C/U/R/sqlExe + sqlorContext PASS rtx_db PASS:仅用 sor.C/U/R/sqlExe + sqlorContext(无模块级猜测签名)
rtx_db | rtx_db PASS:事务原语探测 sor/conn/sql 三级 PASS rtx_db PASS:事务原语探测 sor/conn/sql 三级
rtx_db | rtx_db PASS:无 begin/commit/rollback → 探测返回 Non PASS rtx_db PASS:无 begin/commit/rollback → 探测返回 None(上层抛 PBL-RTX-0002)
rtx_db | rtx_db PASS:库名不可得即抛 PBL-RTX-0001(不猜默认库) PASS rtx_db PASS:库名不可得即抛 PBL-RTX-0001(不猜默认库)
rtx_db.self_check 整体 PASS
A[三处同步] apply_runtime_event PASS impl=True export=True register=True
A[三处同步] poll_events PASS impl=True export=True register=True
A[三处同步] read_states PASS impl=True export=True register=True
A[三处同步] assert_append_only PASS impl=True export=True register=True
A[三处同步] pbl_runtime_broadcast_pull PASS impl=True export=True register=True
A[三处同步] pbl_runtime_broadcast_stats PASS impl=True export=True register=True
A[包出口可导入] pbl_runtime_broadcast_pull PASS
A[包出口可导入] pbl_runtime_broadcast_stats PASS
A[包出口可导入] apply_runtime_event PASS
A[包出口可导入] poll_events PASS
A[包出口可导入] read_states PASS
A[包出口可导入] assert_append_only PASS
A[M11b 注册清单完整(fail-closed 门禁)] PASS missing=[] total=12
A[M11a 注册清单完整] PASS total=6
--- B. 内存事务引擎端到端(真实 apply_runtime_event 主链路)---
B1[正常写入] ok 且非幂等命中 PASS seq_no=1 event_id=1
B1[正常写入] 事件表 1 行 PASS
B1[正常写入] 状态表 1 行 v1 PASS
B1[正常写入] 快照表 1 行 PASS
B1[正常写入] 单事务多语句 PASS stmt_count=3
B1[正常写入] 提交后广播进缓冲 PASS cursor=1
B2[无幽灵更新] 事务日志 begin→commit PASS log=['begin', 'commit']
B2[无幽灵更新] commit 时 hub 游标=0,广播后=1 PASS commit_cursor=0 now=1
B3[幂等重放] dedup=True PASS event_id=1
B3[幂等重放] 事件仍 1 行 PASS
B3[幂等重放] 未重复广播 PASS cursor 1→1
B4[乐观锁冲突] PBL-STATE-CONFLICT PASS entity_id=pos 乐观锁冲突:base_version=99 当前 state_version=1(整
B4[乐观锁冲突] 事件行数未增加(无脏数据) PASS 1→1
B4[乐观锁冲突] 冲突键未落库 PASS
B4[乐观锁冲突] 状态版本未污染(仍 v1) PASS
B4[乐观锁冲突] 未广播 PASS
B5[DML失败] 异常上抛(不静默) PASS 注入故障:pbl_entity_state INSERT 失败
B5[DML失败] 事件行不存在(回滚证据,非标记 rolled_back) PASS events=1
B5[DML失败] 无状态脏行 PASS
B5[DML失败] 未广播(无幽灵更新) PASS
B6[回滚证据] 日志含 rollback PASS log=['begin', 'commit', 'begin', 'commit', 'begin', 'rollback', 'begin', 'rollback']
Traceback (most recent call last):
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/scripts/m11b_selftest.py", line 555, in <module>
sys.exit(main())
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/scripts/m11b_selftest.py", line 542, in main
suite_memory()
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/scripts/m11b_selftest.py", line 473, in suite_memory
asyncio.new_event_loop().run_until_complete(run())
File "/usr/lib/python3.10/asyncio/base_events.py", line 649, in run_until_complete
return future.result()
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/scripts/m11b_selftest.py", line 389, in run
await wtx.apply_runtime_event(
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/pbl_runtime_ext/tx_write.py", line 338, in apply_runtime_event
st = await _apply_state(tx, tenant_id, session_id, upd, seq_no,
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/pbl_runtime_ext/tx_write.py", line 253, in _apply_state
vals = build_row(STATE_TABLE, {
File "/d/pipeline/workspaces/0/sdlc_general/modules/pbl_runtime_ext/pbl_runtime_ext/tx_write.py", line 128, in build_row
raise rtx_db.RtxError("PBL-RTX-0004",
pbl_runtime_ext.rtx_db.RtxError: [PBL-RTX-0004] pbl_entity_state 缺少 NOT NULL 列 ['tenant_id', 'session_id', 'entity_id', 'created_at']
=== EXIT_CODE=1 ===