已合并
fix:修复检视bug #416
fix:修复检视bug #416
已合并
dajiang创建于 7月28日
dajiang成员
7月28日

合入来源

问题/功能描述

修改方案描述

是否涉及UT/ST

开发自检

likedislike
Pull Request已成功合入, 合并人@zhangjinshi
(感谢 dajiang 的贡献)
atomgit-bot
atomgit-bot
7月28日 评论:

变更摘要

本次 PR 主要针对 memcache 模块进行多项缺陷修复:包括 rewarm 流程中状态机的完善(新增 ALLOCATED_OKREAD_START 状态转换及回滚逻辑)、GetByRank 中读写锁与时序优化(将 READ_START 加锁提取为 AttachReadLocks 方法,与异步 rewarm 任务并行执行)、PendingWait 超时从硬编码改为可配置项、UBSIO 生命周期管理修复(StopStart 中的回调解绑与资源销毁顺序),以及多处参数校验和错误处理增强。

主要改动

  • Rewarm 流程状态机增强:在 ClassifyAndGroupKeys 中为 rewarm 分配的新 blob 增加 MMC_ALLOCATED_OK 状态更新,失败时回滚 READ_FINISH 并释放已分配资源;在 ApplyRewarm 中为已完成 copy 的目标 blob 增加 READ_START 状态更新,失败时释放目标 blob 并回滚源 blob 的 READ_FINISH

  • GetByRank 读写锁与时序重构:将原本在 rewarm 任务完成后才串行执行的 READ_START 加锁逻辑抽取为独立的 AttachReadLocks 方法,通过新增的 DeferredLockEntry 结构体收集需要加锁的条目,使异步 rewarm/pendingWait 任务与主线程加锁操作并行执行,缩小锁持有时隙。

  • PendingWait 超时可配置化:新增配置项 OCK_MMC_PENDING_WAIT_TIMEOUT_MS(默认 300ms,范围 1-60000),通过 MmcMetaExtConfig::pendingWaitTimeoutMsmmc_meta_service_config_t::pendingWaitTimeoutMs 链路传递,替换 PendingWaitAndFill 中原先硬编码的 kPendingWaitTimeout

  • UBSIO 生命周期管理修复:在 MmcLocalServiceDefault::Stop() 中调整销毁顺序——先解绑回调、排空事件队列,再销毁 UBSIO;在 Start()RegisterBm 失败时增加 UBSIO 清理;在 InitUbsIoInitUbsIo 失败时解绑回调;在 DlUbsioApi::CleanupLibrary() 中新增 UbsioKvCacheExit() 调用以正确退出 KV 缓存。

  • 参数校验与错误处理增强mmcc_batch_getmmcc_batch_put 增加 results 空指针校验;MmcacheStore::GetBatch 增加 BatchGetKeyInfo 返回值数量校验、分配失败及批量获取失败时的内存清理;MmcMemObjMeta::AddBlob 将 blob 空指针检查前置并修正日志信息;ResolveAndFillMetaDesc 增加 selectedBlob 为空时的安全返回。

likedislike
atomgit-bot
atomgit-bot
7月28日 评论:

代码审查

审查总结

此 diff 共涉及 13 个文件,核心变更包括:

  • 新增 pendingWaitTimeoutMs 可配置超时参数(从硬编码 300ms 改为可配置)
  • 重构 GetByRank 的读写锁时序:将 READ_START 从分类阶段延迟到专门的 AttachReadLocks 阶段,与异步 rewarm 并行
  • 在 rewarm 路径引入 MMC_ALLOCATED_OK 状态转换以保护新分配的 blob
  • Stop() 生命周期改进:将 started_ = false 提前、回调解绑/事件排空/UBSIO 销毁的顺序调整
  • mmcache_store::GetBatch 错误处理增强:检测 batch get 整体失败和逐 key 失败
  • UBSIO 清理流程新增 UbsioKvCacheExit 调用
  • mmcc_batch_get / mmcc_batch_put 新增 results 空指针校验

发现汇总:

优先级 数量 说明
P2 1 FillFrom++numBlobs_ 应为 numBlobs_ = 1,语义与 blobs_.clear() 不一致
P3 2 PendingWaitAndFill 中不必要的 staticUbsioKvCacheExit 使用强制加载可能导致旧版库加载失败

总体风险评估:低风险。 核心逻辑变更(rewarm 时序重构、状态机引入 ALLOCATED_OK)经过审查未发现正确性问题。三个发现均为边缘场景或代码质量改进项,不影响当前功能正确性。

逐文件审查确认:

  • src/memcache/csrc/config/mmc_config_const.h — 无问题
  • src/memcache/csrc/config/mmc_configuration.h — 无问题
  • src/memcache/csrc/entities/mmc_mem_obj_meta.cpp — 无问题
  • src/memcache/csrc/local_service/mmc_local_service_default.cpp — 无问题
  • src/memcache/csrc/meta_service/mmc_meta_manager.cpp — 1 个 P3 发现
  • src/memcache/csrc/meta_service/mmc_meta_manager.h — 1 个 P2 发现
  • src/memcache/csrc/meta_service/mmc_meta_service.cpp — 无问题
  • src/memcache/csrc/mmc.cpp — 无问题
  • src/memcache/csrc/mmc_client.cpp — 无问题
  • src/memcache/csrc/mmcache_store.cpp — 无问题
  • src/memcache/csrc/under_api/ubs_io/dl_ubsio_api.cpp — 1 个 P3 发现
  • src/memcache/csrc/under_api/ubs_io/dl_ubsio_api.h — 无问题
  • src/memcache/include/mmc_def.h — 无问题
类型 数量
🔴 阻塞 0
🟡 建议 2

💬 仅评论

likedislike
ascend-robot
ascend-robot成员
7月28日 评论:
流水线 PR-pipeline_memcache#1749 (重试第1次) [ commitID:66370679 ] 已完成
阶段 任务名 状态 详情
编译构建 Build_memcache >>>
恶意代码检查 Antipoison_memcache >>>
编码安全与规范检查 pre-commit >>>
CodeCheck_memcache >>>
开源片段检查 SCA_memcache >>>
开发者测试 UT_memcache >>>
流水线 PR-pipeline_memcache >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
Xxiangjie10成员
7月28日 添加了label:pr-audit-failed
此处折叠了152条消息 查看更多
haiyunhaiyun成员
7月30日 将huanghaiyun_设为评审人
haiyunhaiyun成员
7月30日 通过了评审
Zzhangjinshi成员
7月30日 通过审查
Zzhangjinshi成员
7月30日 解决了最后一个问题
Zzhangjinshi成员
7月30日 合入了pull request