order-tx-retry.php

20260916-201504 轮 · 看它的历史
  ✔ 隔离库 jnc_ma_e2e_h8 就绪(105 张表,缺列 0)
夹具:uid=990863 商品 id=289 pnode=[50],[23] → 分类 [50,23]  配送 id=38  支付 key_id=7

【组 A dbTxRetryable 判据】
  ✅ A0 真的造出了一次冲突(否则 A1 是空转)
  ✅ 🔴 A1 真 ER_CHECKREAD → 判可重试
  ✅ A2 守卫:普通业务异常 → 不重试
  ✅ A3 守卫:券冲突(业务硬失败)→ 不重试

【组 D DecodemyArr —— pnode 不是 JSON】
  ✅ D1 多分类 "[39],[40],[8]" → [39,40,8]
  ✅ D2 单分类 "[50]" → [50](旧 json_decode 碰巧也对,所以坑活到了今天)
  ✅ D3 空 "[]" → []
  ✅ D4 空串 → []
  ✅ D5 EncodemyArr 往返
  ✅ 🔴 D6 旧写法在多分类上确实解不出(本用例的分辨力来源)

【组 C 守卫:没有冲突时照常一次成功】
  ✅ C1 没有打重试日志
  ✅ C2 没有渲染出错页(否则下面几条无意义)
  ✅ C3 建出了 1 个汇总行
  ✅ C4 购物车行已被消费
  ✅ C5 作品已锁 tplrecycle=2
  ✅ C6 psellnumall 恰好 +2
  ✅ 🔴 C7 分类 50 的 nnumall 恰好 +2(pnode 解析对了才会动)
  ✅ 🔴 C7 分类 23 的 nnumall 恰好 +2(pnode 解析对了才会动)

【组 B 撞上 ER_CHECKREAD 之后必须整笔重跑】
  ✅ B0 拦路进程已攥住商品行(否则整组是空转)
  ✅ 🔴 B1 第一次尝试真的撞了 1020 并重跑(retry 日志 1 行)
  ✅ B2 没有走到"放弃"那一行
  ✅ B3 用户没看到出错页
  ✅ 🔴 B4 订单建出来了:1 个汇总行
  ✅ B5 1 个商品行
  ✅ B6 购物车行已被消费
  ✅ B7 作品已锁 tplrecycle=2
  ✅ 🔴 B8 psellnumall 恰好 +2(不是 0、也不是重跑导致的 2 倍)
  ✅ B9 分类 50 的 nnumall 恰好 +2
  ✅ B9 分类 23 的 nnumall 恰好 +2

【组 F 关掉 snapshot_isolation:计数器仍不许丢增量】
  ✅ F0 拦路进程已攥住商品行(否则整组是空转)
  ✅ F1 用户没看到出错页
  ✅ F2 关了开关就没有 1020,也就不该重试(证明本组走的确实是另一条路)
  ✅ F3 建出了 1 个汇总行
  ✅ 🔴 F4 psellnumall = +5(并发那笔)+2(本单),一笔都没被盖掉

【组 E 守卫:非冲突失败仍然是一次性硬失败】
  ✅ E1 拒了(出错页)
  ✅ E2 没有重试
  ✅ E3 一行 dd 都没留下

────────────────────────────────
PASS=37  FAIL=0
  ✔ 已销毁 jnc_ma_e2e_h8