已合并
[feature] 配置文件解析增加 ock.mmc 前缀过滤及加载清单打印 #389
[feature] 配置文件解析增加 ock.mmc 前缀过滤及加载清单打印 #389
已合并
dajiang创建于 7月21日
dajiang成员
7月21日

合入来源

问题/功能描述

修改方案描述

新增 ock.mmc. 前缀过滤:在 mmc_kv_parser.cpp 的 KVParser::ParseLine 中,对 key 不以 "ock.mmc." 开头的行直接返回 MMC_OK,跳过后续的 SetItem 设置,仅加载目标前缀下的配置项。
新增配置加载清单打印:在 mmc_configuration.cpp 的 Configuration::LoadFromFile 中,解析完成后遍历所有配置项,通过 MMC_LOG_INFO 逐个输出 key = value,方便确认实际生效的配置。
新增 StartsWith 工具函数:在 mmc_functions.h 中添加 StartsWith 内联函数,用于判断字符串是否以指定前缀开头,作为前缀过滤判断的基础能力。

是否涉及UT/ST

开发自检

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

变更摘要

此 PR 为配置文件解析模块增加了两项功能:一是 ock.mmc. 前缀过滤机制,在 KVParser::ParseLine 中跳过不以 ock.mmc. 开头的配置项,确保只处理目标命名空间下的配置;二是在 Configuration::LoadFromFile 加载完成后,遍历并打印所有已加载的配置项清单,便于调试和运维排查。同时新增了 StartsWith 工具函数以支持前缀判断。

主要改动

  • 新增 ock.mmc. 前缀过滤:在 mmc_kv_parser.cppKVParser::ParseLine 中,对 key 不以 "ock.mmc." 开头的行直接返回 MMC_OK,跳过后续的 SetItem 设置,仅加载目标前缀下的配置项。
  • 新增配置加载清单打印:在 mmc_configuration.cppConfiguration::LoadFromFile 中,解析完成后遍历所有配置项,通过 MMC_LOG_INFO 逐个输出 key = value,方便确认实际生效的配置。
  • 新增 StartsWith 工具函数:在 mmc_functions.h 中添加 StartsWith 内联函数,用于判断字符串是否以指定前缀开头,作为前缀过滤判断的基础能力。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月21日 评论:

代码审查

我已完成对所有三个变更文件的全面审查。以下是我的分析:


逐文件审查结果

1. src/memcache/csrc/config/mmc_functions.h(第 79-82 行)

新增的 StartsWith 内联函数:

inline bool StartsWith(const std::string &str, const std::string &prefix)
{
    return str.size() >= prefix.size() && str.compare(0, prefix.size(), prefix) == 0;
}
  • ✅ 边界检查正确:str.size() >= prefix.size() 的短路求值确保 compare(0, n, prefix)n > str.size() 时不会被调用,从而避免了 std::out_of_range 异常。
  • ✅ 空前缀语义正确:空 prefix 对任意字符串返回 true(标准行为)。
  • ✅ 空字符串 + 非空前缀:返回 false(正确)。
  • ✅ 无命名冲突:common/mmc_functions.h 中不存在同名的 StartsWith,且两者使用相同的命名空间 ock::mmcinline 函数符合 ODR 规则。
  • ✅ 大小写敏感比较:与所有配置常量(ock.mmc.*,全小写)一致。

结论:无问题。


2. src/memcache/csrc/config/mmc_kv_parser.cpp(第 197-199 行)

ParseLine 中新增的前缀过滤器:

if (!StartsWith(strKey, "ock.mmc.")) {
    return MMC_OK;
}
  • ✅ 位置正确:在 key 裁剪之后(第 190 行 OckTrimString(strKey))、SetItem 调用之前,确保裁剪后的 key 被正确过滤。
  • ✅ 返回值正确:对不匹配的 key 返回 MMC_OK,与注释行和空行的处理方式一致,不会中断 FromFile 的解析循环。
  • ✅ 调用方影响可控:ParseLine 仅被 KVParser::FromFile 调用(第 65 行),FromFile 仅被 Configuration::LoadFromFile 调用(第 131 行),无其他调用方受影响。
  • ✅ 所有已注册的配置常量均以 ock.mmc. 为前缀(见 mmc_config_const.h),因此 CheckSet 中对 mMustKeys 的校验不会因过滤而产生误报。
  • FromFile 中的行数计数(count += 1)原本就包含注释行和空行,新增过滤不改变此行为。

结论:无问题。


3. src/memcache/csrc/config/mmc_configuration.cpp(第 156-162 行)

LoadFromFile 成功路径上新增的加载清单日志:

MMC_LOG_INFO("Loaded " << size << " config items:");
for (uint32_t i = 0; i < size; i++) {
    std::string key;
    std::string value;
    kvParser->GetI(i, key, value);
    MMC_LOG_INFO("  " << key << " = " << value);
}
  • ✅ 位置安全:日志循环在 CheckSet(第 151 行)之后、SAFE_DELETE(kvParser)(第 164 行)之前,kvParser 仍然有效。
  • size 有效性:size 来自 kvParser->Size()(第 136 行),反映的是经前缀过滤后的实际配置项数量。CheckSet 仅读取并清空 mGotKeys,不修改 mItems,因此 size 仍然准确。
  • ✅ 边界安全:GetI 内部有 index >= mItems.size() 检查(第 135 行),即使出现意外的索引越界也会安全返回。
  • ✅ 锁机制:GetI 每次调用均获取锁(GUARD(&mLock, mLock)),在启动阶段(单线程)无并发风险。
  • ⚠️ 日志循环与前面的处理循环(第 141-149 行)存在重复遍历,每次获取/释放锁。但 LoadFromFile 仅在启动时调用一次,性能影响可忽略不计。

结论:无问题。


最终总结

  • P0 发现: 0
  • P1 发现: 0
  • P2 发现: 0
  • P3 发现: 0

总体风险评估:此变更为低风险。 三个文件的改动均为简单、自包含的增量修改:添加一个工具函数(StartsWith)、在解析层增加前缀过滤、在加载成功后打印配置清单。所有改动均正确实现了"配置文件解析增加 ock.mmc 前缀过滤及加载清单打印"的功能目标,未引入逻辑错误、安全漏洞、可靠性问题或破坏性变更。

已审查文件清单:

  • src/memcache/csrc/config/mmc_configuration.cpp — 无问题
  • src/memcache/csrc/config/mmc_functions.h — 无问题
  • src/memcache/csrc/config/mmc_kv_parser.cpp — 无问题

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
不准确?
ascend-robot
ascend-robot成员
7月21日 评论:
流水线 PR-pipeline_memcache#1586 [ commitID:d4b58e56 ] 已完成
阶段 任务名 状态 详情
编译构建 Build_memcache >>>
恶意代码检查 Antipoison_memcache >>>
编码安全与规范检查 pre-commit >>>
CodeCheck_memcache >>>
开源片段检查 SCA_memcache >>>
开发者测试 UT_memcache >>>
流水线 PR-pipeline_memcache >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
Xxiangjie10成员
7月21日 添加了label:pr-audit-failed
此处折叠了61条消息 查看更多
mrh1024mrh1024成员
7月21日 将mrh1024设为评审人
mrh1024mrh1024成员
7月21日 通过了评审
Zzhangjinshi成员
7月21日 通过审查
Zzhangjinshi成员
7月21日 关闭了关联的issue
Zzhangjinshi成员
7月21日 合入了pull request