chore(changelog): #7980 前端实证翻 not_required(100503 走拦截器透 message)
changelog-filename-gate / validate (push) Failing after 2s

这个提交包含在:
Mimingguang
2026-09-20 16:39:25 +08:00
父节点 7bc90b0be6
当前提交 96ac790821
@@ -7,12 +7,12 @@ author: "wx(GIT)"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "not_required"
frontend_status: "pending"
frontend_status: "not_required"
frontend_owner: "mmg"
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "PR #8035 已 squash 合并 dev-v3(合并提交 ee1937950),2026-09-20 16:04 已部署测试服 hl-fleet-service(滚动更新两实例,部署前 53c2ff2d1,部署后 10efbaddf,7 秒内起监听;git merge-base --is-ancestor ee1937950 10efbaddf 返回 ANCESTOR_YES,确认本次改动已在运行版本内)。gateway_status 保持 not_required:四个端点路径/方法零变化,hl-gateway 版本未动(4cbccc26b),本次与网关路由无关,不是漏验证。测试服 redis-cli MONITOR 实时抓包证实 12 并发 batchSetPrices 只命中同一把锁键 lock4j:fleet:pricing-calendar:write#fleet:pricing-calendar:write(改前坏形态即锁键含方法名一次未现),12 次并发被序列化成 12 组干净的 acquire→release,未观察到两个持有者同时持锁;71 次单独/批量 PUT/DELETE 回归全部 code=200。🔴 100503 未能复现:额外用 4/8/17/34 并发 × 365 天多轮尝试均返回 200,一次未触发 100503(推断原因:单车型 366 天 DB 往返本次优化后从 732 次降到个位数,临界区极短,测试服并发规模下累计排队时间仍远小于 acquireTimeout 默认 3000ms)。该错误码源码路径真实存在(acquireTimeout 超时 + LockFailureExceptionHandler 转 100503 + HTTP 200 均已读码确认),但测试服未能触发,不代表更长事务/更大载荷/生产数据量下不会触发,详见正文「八、测试环境已验证」与各接口错误响应说明。工单 #7980 P0-1:hl-fleet-service 车型价格日历四个写口(批量设价/多车型批量设价/批量改状态/清除价格日历)此前虽各自写了相同的 @Lock4j keys,但没写 name;lock4j 落 Redis 的锁键含方法名,name 缺省时退化成类全限定名+方法名,四处因此各自持有一把互不相干的锁——接口文档里一直写着的「四个价格写端点全互斥」此前并不成立。本次给四处补上同一个显式 name,互斥才真正生效。接口路径、请求/响应字段、既有 4 个业务错误码(600500-600503)均无变化。测试数据写在未使用的未来年份(2027 部分/2028/2031/2032/2033,共 71 组车型×年份,改前全为空),已用 71 次 DELETE 逐一还原并按年 overview 复核归零,真实业务数据(2026-09 丰田普拉多 24 条)抽查与改前一致。"
status_note: "PR #8035 已 squash 合并 dev-v3(合并提交 ee1937950),2026-09-20 16:04 已部署测试服 hl-fleet-service(滚动更新两实例,部署前 53c2ff2d1,部署后 10efbaddf,7 秒内起监听;git merge-base --is-ancestor ee1937950 10efbaddf 返回 ANCESTOR_YES,确认本次改动已在运行版本内)。gateway_status 保持 not_required:四个端点路径/方法零变化,hl-gateway 版本未动(4cbccc26b),本次与网关路由无关,不是漏验证。测试服 redis-cli MONITOR 实时抓包证实 12 并发 batchSetPrices 只命中同一把锁键 lock4j:fleet:pricing-calendar:write#fleet:pricing-calendar:write(改前坏形态即锁键含方法名一次未现),12 次并发被序列化成 12 组干净的 acquire→release,未观察到两个持有者同时持锁;71 次单独/批量 PUT/DELETE 回归全部 code=200。🔴 100503 未能复现:额外用 4/8/17/34 并发 × 365 天多轮尝试均返回 200,一次未触发 100503(推断原因:单车型 366 天 DB 往返本次优化后从 732 次降到个位数,临界区极短,测试服并发规模下累计排队时间仍远小于 acquireTimeout 默认 3000ms)。该错误码源码路径真实存在(acquireTimeout 超时 + LockFailureExceptionHandler 转 100503 + HTTP 200 均已读码确认),但测试服未能触发,不代表更长事务/更大载荷/生产数据量下不会触发,详见正文「八、测试环境已验证」与各接口错误响应说明。工单 #7980 P0-1:hl-fleet-service 车型价格日历四个写口(批量设价/多车型批量设价/批量改状态/清除价格日历)此前虽各自写了相同的 @Lock4j keys,但没写 name;lock4j 落 Redis 的锁键含方法名,name 缺省时退化成类全限定名+方法名,四处因此各自持有一把互不相干的锁——接口文档里一直写着的「四个价格写端点全互斥」此前并不成立。本次给四处补上同一个显式 name,互斥才真正生效。接口路径、请求/响应字段、既有 4 个业务错误码(600500-600503)均无变化。测试数据写在未使用的未来年份(2027 部分/2028/2031/2032/2033,共 71 组车型×年份,改前全为空),已用 71 次 DELETE 逐一还原并按年 overview 复核归零,真实业务数据(2026-09 丰田普拉多 24 条)抽查与改前一致。 前端实证维持 not_required(mmg 2026-09-20):fleet/pricing/index.vue 四个写操作(setPricingCalendar/batchSetPricing/setPricingStatus/clearPricingCalendar)catch 均注释「错误文案由统一响应拦截器提示」、finally 复位提交态,100503 命中时拦截器透后端 message「资源被占用,请稍后重试」message.error 展示——提示可重试/不静默/不当系统异常三条全满足,100502 与 100503 文案由后端各自下发天然区分,同 #7529 先例不建字典。"
updated_at: "2026-09-20"
base: "dev-v3"
---