已合并
[feature] 配置文件解析增加 ock.mmc 前缀过滤及加载清单打印 #389
dajiang创建于 7月21日
[feature] 配置文件解析增加 ock.mmc 前缀过滤及加载清单打印 #389
已合并
Pull Request已成功合入, 合并人@zhangjinshi
(感谢 dajiang 的贡献)atomgit-bot
7月21日 评论:
7月21日 评论:
变更摘要
此 PR 为配置文件解析模块增加了两项功能:一是 ock.mmc. 前缀过滤机制,在 KVParser::ParseLine 中跳过不以 ock.mmc. 开头的配置项,确保只处理目标命名空间下的配置;二是在 Configuration::LoadFromFile 加载完成后,遍历并打印所有已加载的配置项清单,便于调试和运维排查。同时新增了 StartsWith 工具函数以支持前缀判断。
主要改动
- 新增
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内联函数,用于判断字符串是否以指定前缀开头,作为前缀过滤判断的基础能力。


不准确?
ascend-robot
7月21日 评论:
7月21日 评论:
atomgit-bot
7月21日 评论:
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::mmc,inline函数符合 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— 无问题
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


不准确?
ascend-robot
7月21日 评论:
7月21日 评论:
流水线 PR-pipeline_memcache#1586 [ commitID:d4b58e56 ] 已完成
| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_memcache | ✅ | >>> |
| 恶意代码检查 | Antipoison_memcache | ✅ | >>> |
| 编码安全与规范检查 | pre-commit | ✅ | >>> |
| CodeCheck_memcache | ✅ | >>> | |
| 开源片段检查 | SCA_memcache | ✅ | >>> |
| 开发者测试 | UT_memcache | ✅ | >>> |
| 流水线 | PR-pipeline_memcache | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


7月21日 添加了label:pr-audit-failed
此处折叠了61条消息 查看更多
7月21日 将mrh1024设为评审人
7月21日 通过了评审
7月21日 通过审查
7月21日 关闭了关联的issue
7月21日 合入了pull request
合入来源
问题/功能描述
修改方案描述
新增 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
开发自检