From 7118f4f7ffd8fb11c67ca1a1392f1093db588ca4 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 8 May 2026 15:40:44 +0800 Subject: [PATCH] chore: #1853 stub fix + #1860 Stage 1 diag changelog (PR #1879 #1881) --- ...ore_test_stub_and_cache_deps_diagnostic.md | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 changelogs/2026-05/08_chore_test_stub_and_cache_deps_diagnostic.md diff --git a/changelogs/2026-05/08_chore_test_stub_and_cache_deps_diagnostic.md b/changelogs/2026-05/08_chore_test_stub_and_cache_deps_diagnostic.md new file mode 100644 index 0000000..8d59d21 --- /dev/null +++ b/changelogs/2026-05/08_chore_test_stub_and_cache_deps_diagnostic.md @@ -0,0 +1,76 @@ +--- +date: 2026-05-08 +type: backend-internal +module: hl-user-service/test, hl-common-redis/cache +priority: low +notify: [] +status: tested-passed +restart_service: hl-common-redis (随 mp-service / user-service / 任何引用方升级) +gitea_pr: [1879, 1881] +gitea_issue: [1853] +gitea_issue_open: [1860, 1880] +--- + +# 测试 stub 修复 + 缓存反向索引诊断日志(前端无感) + +两个内部改动汇总, **不影响任何接口字段/路径/行为, 前端无需配合**。 + +## PR #1879 - InternalUserControllerTest stub 切到 default 方法路径 (Closes #1853) + +### 现象 / 根因 +PR #1814 把 `InternalUserController.getAdminsByRoleKey` 用到的 3 个 mapper 方法改为 default 方法实现: +- `SysRoleMapper.selectByRoleKey(String)` +- `AdminUserRoleMapper.selectByRoleId(Long)` +- `AdminUserMapper.selectActiveWithWechatByAdminIds(Collection)` + +旧 stub `when(mapper.selectOne(any(LambdaQueryWrapper.class)))` 在 Mockito 默认配置下不进 default 方法 body, 导致 5 个 `getAdminsByRoleKey_*` case fail。 + +### 修复 +3 个 mapper stub 全切到 default 方法本身, verify never 路径同步切签名。 + +### 工单偏差 +工单原描述说 DesignerProfileServiceTest / DesignerServiceTest 也是同根因。**核实不是**, 这俩 Service 生产代码仍在用 LambdaQueryWrapper, 原 stub 工作正常, 未触碰。 + +### 残留另起工单 +ServiceMonitorServiceTest 2 个 pre-existing failure (L:63, L:102) 与本工单无关, 已起 #1880 跟进。 + +## PR #1881 - putWithDeps SMEMBERS 自检 + ERROR stack (Refs #1860 Stage 1) + +### 背景 +PR #1855 / #1858 banner / dict / featuredReview hotfix 后, `DependencyAwareCacheManager` 反向索引 SADD 在 prod 仍有「总依赖=0, 实际删除=0」现象, 但日志 silent 看不出根因。 + +### Stage 1 改动(仅诊断) +**不动业务逻辑、不动 MpCacheAspect、不调 invalidateSource 主路径, 仅加日志。** + +1. `putWithDeps` 入口 INFO 日志: key/deps/ttlSec +2. `registerDeps` 每个 dep Lua 完成后立即 **SMEMBERS 自检**, INFO 输出 isMember + indexSize +3. `invalidateSource` 把成员快照(members=[...])打出来 +4. 序列化失败 / SET 失败 log.warn → log.error + stack trace + +业务降级语义零变化(仍 return 不抛), 仅日志级别+stack 提级。 + +### 后续 Stage 2(待 prod 日志暴露根因) +- 看到 `[cache-deps registerDeps OK] isMember=false` → SADD 静默失败, 修 Lua 路径 +- 看到 `序列化失败` ERROR + stack → 改 `MpCacheAspect` 缓存 result.getData() +- mp-service 完全没出现 `[cache-deps putWithDeps 开始]` → 修 aspect 上游 + +### 工单状态 +**#1860 保持 open**, 验收 4 项中第 1 条已勾, 第 3 条「prod 日志总依赖>=1」需 prod 部署后实测才能勾。 +**#1861 (D5 删 MpCacheEvict 重构) 继续阻塞**至 #1860 完全闭环。 + +## 测试 + +- PR #1879: `mvn -pl hl-user-service test`, IUT 5 case 全过 +- PR #1881: `mvn -pl hl-common/hl-common-redis test`, 47/0/0 (新增 4 case) + +## 重启服务 + +- `hl-user-service`(测试 stub 改动只影响单测, 但合 dev 后建议 deploy panel 部署一次) +- `hl-common-redis` 是公共模块, 实际部署需要 `mp-service` / `user-service` / `product-v2` / `order-v2` / `resource-service` 任何用到 `DependencyAwareCacheManager` 的服务都升级才生效 + +## 关联 + +- Closes wx/HL #1853 (PR #1879) +- Refs wx/HL #1860 Stage 1 (PR #1881, 工单不在本 PR 关闭) +- 起 #1880 (ServiceMonitor failure follow-up) +- 阻塞 #1861 (D5 重构, 等 #1860 Stage 2)