
API Changelog Bot和Claude Opus 5
7bc90b0be6
changelog-filename-gate / validate (push) Failing after 2s
docs(changelog): #7980 价格日历四个写接口补齐真实并发互斥 + 新增可重试冲突码 100503
hl-fleet-service 车型价格日历四个写口(批量设价 / 多车型批量设价 / 批量改状态 / 清除价格日历)
此前虽各自写了相同的 @Lock4j keys,但都没写 name;lock4j 落 Redis 的锁键含方法名,
name 缺省时退化成「类全限定名 + 方法名」,四处因此各自持有一把互不相干的锁——
接口文档里一直写着的「四个价格写端点全互斥」此前并不成立。本次补上同一个显式 name,互斥才真正生效。
接口路径、方法、请求/响应字段、既有 4 个业务错误码(600500-600503)均零增删。
唯一的契约变化是新增一条可能返回的错误码 100503(RESOURCE_LOCKED,「资源被占用,请稍后重试」),
且它以 HTTP 200 + body code 的形式返回——前端只看 HTTP 状态码会把它当成功。
关于 100503 的触发频率,正文两面都写,缺一面都会误导前端:
- 该路径源码级真实存在(acquireTimeout 默认 3000ms + LockFailureExceptionHandler 转 100503
+ @ResponseStatus(HttpStatus.OK),三处均已读码确认);
- 但测试服用 4/8/17/34 并发 × 365 天多轮尝试均返回 200,一次未触发(推断原因:本次优化后
单车型 366 天的 DB 往返从 732 次降到个位数,临界区极短,累计排队远小于 3 秒)。
⇒ 前端仍应防御性处理并允许重试,但不必按高频路径设计交互;
同时不能因为测试服没测到就当它不会发生——更长事务 / 更大载荷 / 生产数据量下的行为未知。
测试服证据(backend_status 因此才从 pending 转为 deployed,此前门禁 E_BACKEND_PENDING 正确拦下过一次):
部署前 53c2ff2d1 → 部署后 10efbaddf,merge-base --is-ancestor ee1937950 10efbaddf 返回 ANCESTOR_YES;
redis-cli MONITOR 实时抓包证实 12 并发只命中同一把锁键
lock4j:fleet:pricing-calendar:write#fleet:pricing-calendar:write,改前那种含方法名的坏形态一次未现,
12 组干净的 acquire→release、未观察到两个持有者同时持锁;71 次回归调用全部 code=200。
测试数据写在原本全空的未来年份(2027 部分/2028/2031/2032/2033,71 组车型×年份),
已用 71 次 DELETE 逐一还原并按年复核归零,真实业务数据(2026-09 丰田普拉多 24 条)抽查与改前一致。
gateway_status 记 not_required:四端点路径/方法零变化、hl-gateway 版本未动(4cbccc26b),
是判定不是漏验证,判据已写进 status_note。
Refs #7980
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 16:29:13 +08:00
..
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-01 16:13:30 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 10:43:20 +08:00
2026-09-04 09:51:13 +08:00
2026-09-04 20:04:16 +08:00
2026-09-04 20:04:16 +08:00
2026-09-04 17:02:19 +08:00
2026-09-04 14:25:48 +08:00
2026-09-06 10:43:20 +08:00
2026-09-04 20:04:16 +08:00
2026-09-04 22:22:18 +08:00
2026-09-04 20:04:16 +08:00
2026-09-04 15:37:23 +08:00
2026-09-04 20:04:16 +08:00
2026-09-04 20:43:38 +08:00
2026-09-04 23:34:24 +08:00
2026-09-05 11:20:24 +08:00
2026-09-05 11:35:01 +08:00
2026-09-06 10:43:20 +08:00
2026-09-06 16:41:24 +08:00
2026-09-07 21:29:21 +08:00
2026-09-06 10:43:20 +08:00
2026-09-08 16:29:47 +08:00
2026-09-06 10:25:32 +08:00
2026-09-06 16:33:44 +08:00
2026-09-06 16:33:44 +08:00
2026-09-06 12:59:28 +08:00
2026-09-08 13:30:19 +08:00
2026-09-08 15:56:23 +08:00
2026-09-06 16:33:44 +08:00
2026-09-10 10:38:39 +08:00
2026-09-10 10:38:39 +08:00
2026-09-06 16:40:20 +08:00
2026-09-07 09:51:52 +08:00
2026-09-08 08:02:04 +08:00
2026-09-08 08:02:04 +08:00
2026-09-08 13:30:19 +08:00
2026-09-10 09:27:08 +08:00
2026-09-08 14:06:12 +08:00
2026-09-06 16:33:44 +08:00
2026-09-06 19:24:54 +08:00
2026-09-07 16:54:29 +08:00
2026-09-07 15:56:09 +08:00
2026-09-08 13:18:09 +08:00
2026-09-08 14:48:31 +08:00
2026-09-08 10:33:14 +08:00
2026-09-08 08:02:04 +08:00
2026-09-08 12:49:35 +08:00
2026-09-07 19:02:13 +08:00
2026-09-08 10:23:44 +08:00
2026-09-08 12:16:13 +08:00
2026-09-10 10:38:39 +08:00
2026-09-10 15:42:42 +08:00
2026-09-07 16:37:29 +08:00
2026-09-07 17:35:20 +08:00
2026-09-07 12:04:48 +08:00
2026-09-08 08:02:04 +08:00
2026-09-07 15:17:44 +08:00
2026-09-08 11:14:06 +08:00
2026-09-07 17:35:20 +08:00
2026-09-07 20:23:24 +08:00
2026-09-08 08:02:04 +08:00
2026-09-08 14:06:12 +08:00
2026-09-08 12:49:35 +08:00
2026-09-08 16:56:42 +08:00
2026-09-08 17:36:53 +08:00
2026-09-08 18:58:20 +08:00
2026-09-08 18:17:57 +08:00
2026-09-08 22:30:49 +08:00
2026-09-08 17:29:52 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:02:38 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 17:54:39 +08:00
2026-09-09 13:55:49 +08:00
2026-09-09 09:55:57 +08:00
2026-09-09 18:03:10 +08:00
2026-09-10 09:24:14 +08:00
2026-09-09 23:27:33 +08:00
2026-09-10 15:47:31 +08:00
2026-09-11 10:39:30 +08:00
2026-09-10 10:05:26 +08:00
2026-09-11 11:17:31 +08:00
2026-09-11 10:01:17 +08:00
2026-09-10 15:09:21 +08:00
2026-09-10 22:35:45 +08:00
2026-09-10 12:06:07 +08:00
2026-09-10 15:09:21 +08:00
2026-09-10 15:32:32 +08:00
2026-09-10 18:01:41 +08:00
2026-09-10 18:21:26 +08:00
2026-09-11 11:47:00 +08:00
2026-09-13 10:54:55 +08:00
2026-09-11 19:20:10 +08:00
2026-09-11 19:20:10 +08:00
2026-09-11 14:46:14 +08:00
2026-09-11 18:14:35 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:51:52 +08:00
2026-09-12 07:46:16 +08:00
2026-09-13 10:08:51 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 10:20:40 +08:00
2026-09-13 09:51:52 +08:00
2026-09-13 09:14:00 +08:00
2026-09-13 10:50:18 +08:00
2026-09-14 11:11:19 +08:00
2026-09-13 14:39:53 +08:00
2026-09-14 10:22:59 +08:00
2026-09-13 14:47:04 +08:00
2026-09-13 15:10:28 +08:00
2026-09-13 16:32:00 +08:00
2026-09-13 10:31:02 +08:00
2026-09-14 10:14:41 +08:00
2026-09-13 11:00:37 +08:00
2026-09-13 13:11:26 +08:00
2026-09-13 15:01:58 +08:00
2026-09-13 15:01:58 +08:00
2026-09-14 16:02:16 +08:00
2026-09-13 17:51:23 +08:00
2026-09-13 16:25:38 +08:00
2026-09-14 09:32:30 +08:00
2026-09-14 09:32:30 +08:00
2026-09-14 10:25:25 +08:00
2026-09-14 11:16:00 +08:00
2026-09-14 15:54:21 +08:00
2026-09-15 09:09:43 +08:00
2026-09-14 17:22:41 +08:00
2026-09-14 10:31:50 +08:00
2026-09-14 07:54:30 +08:00
2026-09-14 13:01:21 +08:00
2026-09-14 22:37:38 +08:00
2026-09-14 22:30:35 +08:00
2026-09-14 16:21:13 +08:00
2026-09-15 00:04:58 +08:00
2026-09-15 16:29:10 +08:00
2026-09-15 16:29:10 +08:00
2026-09-15 16:29:10 +08:00
2026-09-15 16:29:10 +08:00
2026-09-15 17:06:32 +08:00
2026-09-16 09:24:48 +08:00
2026-09-16 03:33:40 +08:00
2026-09-16 03:33:40 +08:00
2026-09-16 03:33:40 +08:00
2026-09-15 16:29:10 +08:00
2026-09-15 12:21:04 +08:00
2026-09-15 09:41:47 +08:00
2026-09-15 09:54:43 +08:00
2026-09-15 09:25:15 +08:00
2026-09-15 21:20:59 +08:00
2026-09-15 18:00:16 +08:00
2026-09-15 18:00:16 +08:00
2026-09-15 12:05:16 +08:00
2026-09-15 15:55:20 +08:00
2026-09-15 14:26:33 +08:00
2026-09-16 09:07:44 +08:00
2026-09-16 09:31:17 +08:00
2026-09-16 15:19:13 +08:00
2026-09-16 20:27:40 +08:00
2026-09-16 09:33:11 +08:00
2026-09-16 10:02:36 +08:00
2026-09-17 09:17:58 +08:00
2026-09-16 14:47:30 +08:00
2026-09-16 14:47:30 +08:00
2026-09-16 09:07:44 +08:00
2026-09-16 15:19:13 +08:00
2026-09-17 10:02:58 +08:00
2026-09-16 16:38:33 +08:00
2026-09-16 17:32:08 +08:00
2026-09-16 17:32:08 +08:00
2026-09-16 23:36:33 +08:00
2026-09-17 10:28:11 +08:00
2026-09-16 16:30:54 +08:00
2026-09-16 16:30:54 +08:00
2026-09-17 18:28:13 +08:00
2026-09-17 18:59:49 +08:00
2026-09-19 04:39:22 +08:00
2026-09-18 08:06:47 +08:00
2026-09-17 15:03:13 +08:00
2026-09-17 10:30:52 +08:00
2026-09-17 23:52:43 +08:00
2026-09-17 10:28:11 +08:00
2026-09-17 11:19:18 +08:00
2026-09-17 10:50:57 +08:00
2026-09-17 11:32:37 +08:00
2026-09-17 19:51:40 +08:00
2026-09-17 15:03:13 +08:00
2026-09-17 19:20:15 +08:00
2026-09-17 22:04:10 +08:00
2026-09-17 17:19:11 +08:00
2026-09-17 16:57:15 +08:00
2026-09-19 03:34:37 +08:00
2026-09-18 11:37:47 +08:00
2026-09-20 16:00:55 +08:00
2026-09-18 14:35:27 +08:00
2026-09-18 11:50:41 +08:00
2026-09-18 12:23:13 +08:00
2026-09-18 14:57:27 +08:00
2026-09-18 14:57:27 +08:00
2026-09-20 15:20:24 +08:00
2026-09-20 15:20:24 +08:00
2026-09-18 16:13:51 +08:00
2026-09-18 16:10:53 +08:00
2026-09-18 17:22:48 +08:00
2026-09-20 13:27:20 +08:00
2026-09-18 16:10:53 +08:00
2026-09-18 16:10:53 +08:00
2026-09-20 12:05:46 +08:00
2026-09-19 14:35:25 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 11:04:32 +08:00
2026-09-20 13:43:08 +08:00
2026-09-20 15:35:01 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 16:09:06 +08:00
2026-09-20 16:29:13 +08:00
2026-09-20 16:09:06 +08:00
2026-09-20 16:09:06 +08:00
2026-09-20 13:27:20 +08:00
2026-09-20 15:20:24 +08:00
2026-09-20 15:06:57 +08:00
2026-09-20 16:09:06 +08:00