已合并
fix(logging): 统一日志文件名校验规范 #2124
fix(logging): 统一日志文件名校验规范 #2124
已合并
guoyang创建于 2 天前
guoyang
guoyang成员
2 天前

这是什么类型的PR?

/kind fix


1. 问题背景 / 问题现象

Issue #1089 中,不同入口对 log name 使用了不同的校验逻辑:部分入口复用了路径字符校验,导致 /.- 等字符可以通过;另一些入口只接受字母、数字和下划线。相同配置在 Builder、gflag 和环境变量入口的行为不一致。

本问题为 pre-existing。修复目标是统一所有 log name 的非空字符规范为 ^[a-zA-Z0-9_]+$,不扩充 -;可选配置仍保留空字符串表示未配置的既有语义。

2. 修改方案 / 解决方案

将 log name 校验收敛到公共 Validator::ValidateLogName,并让 Builder、全局 flag、日志环境变量及 access log 配置复用该实现。删除 Logging 和 Builder 中的重复定义,补齐配置说明、API 文档和单元测试。

classDiagram
    class Validator {
        ValidateLogName
    }
    class KVClientConfigBuilder
    class CommonFlags
    class Logging
    class AccessRecorder
    KVClientConfigBuilder --> Validator
    CommonFlags --> Validator
    Logging --> Validator
    AccessRecorder --> Validator

修改文件清单:

文件 变更说明
src/datasystem/common/util/validator.h 新增统一的 log name 校验入口
src/datasystem/common/log/* 删除重复校验并复用公共 Validator
src/datasystem/common/flags/* 统一 gflag 和 KVClientConfig Builder 校验
include/datasystem/utils/kv_client_config.h 更新对外 API 字符规范说明
cli/deploy/conf/*k8s/helm_chart/datasystem/values.yaml 更新部署配置说明
docs/source_zh_cn/* 更新 dscli、C++ API 和日志指南
tests/ut/common/{util,flags,log}/* 增加统一规范及入口回归测试
tests/perf/zmq/zmq_perf_agt_exe.cpp 将测试 log name 调整为新规范允许的格式

3. 验证方案

  • 编译:在 ds-test 远端执行 Bazel 定向目标编译及测试;同时执行 bash build.sh -j 30 -X off -t build 检查 CMake 构建链路。
  • 部署:本修改不改变服务启动流程或组件协议,不单独部署;通过 worker/coordinator 配置说明及 flag 校验用例覆盖部署参数入口。
  • 测试:覆盖空字符串、字母、数字、下划线、连字符、点、斜杠和空格;验证公共 Validator、KVClientConfig Builder、access log Builder 及 log_filename flag。PR HEAD 已 rebase 到验证时的最新 upstream/master,变更仅 1 个提交。

4. 验证结果

验证项 结果 数据
Bazel 定向编译与测试 PASS 32 actions 编译成功;2/2 test targets 通过,0 失败
validator_test PASS 1 个目标通过,耗时 0.5s
flags_test PASS 1 个目标通过,耗时 0.6s
JSON 配置解析 PASS 2/2 配置文件解析通过,0 失败
git diff --check PASS 1/1 检查通过,0 whitespace error
本地差异审查 PASS 2 轮审查,文档入口补齐后 0 个阻断项
CMake 全量构建 BLOCKED 0/1 通过;在 datasystem 源码编译前,第三方 BRPC 的 protoc-gen-mcpack 链接阶段因 Snappy 符号未解析失败

CMake 失败发生在第三方依赖链接阶段,未进入本 PR 修改源码的编译;因此未将该项标记为通过。

6. 自检清单

构建

正确性

安全

对外接口变更


Fixes #1089

likedislike
Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 guoyang 的贡献)
guoyangguoyang成员
2 天前 创建了 pull request,commit 1b6fb0bf
guoyangguoyang成员
2 天前 关联了issue:【bug】CI分析绿区,KVClientConfig Builder 非法 LogName 校验仅打印日志,未向上返回错误
atomgit-bot
atomgit-bot
2 天前 评论:

变更摘要

本 PR 修复 Issue #1089:此前不同入口对 log name 使用不同校验逻辑(部分入口复用路径字符校验,允许 /.- 等字符;部分入口仅接受字母、数字、下划线),行为不一致。本次修改将 log name 校验收敛到公共的 Validator::ValidateLogName(非空字符规范统一为 ^[a-zA-Z0-9_]+$,不扩充 -),并让 KVClientConfig::Builder、全局 flag log_filename、日志环境变量及 access log 配置全部复用该实现,同时删除 Logging 与 Builder 中的重复定义,补齐配置说明、API 文档和单元测试。可选配置(如 access log 名)仍保留空字符串表示未配置的既有语义。

主要改动

  • 新增统一校验入口:在 src/datasystem/common/util/validator.h 中新增静态方法 Validator::ValidateLogName,使用正则 ^[a-zA-Z0-9_]+$ 校验 log 文件基础名,空字符串视为非法。
  • 删除重复实现并复用公共校验src/datasystem/common/log/logging.cpplogging.h 删除 Logging::ValidateLogName 定义与声明,logging.cpp 的环境变量覆盖逻辑及 access_recorder.cppAccessRecorderManager::ResetWriteLogger 改用 Validator::ValidateLogName,并移除两处 @re2 依赖。
  • 统一 flag 与 Builder 校验common_flags_validate.cpp 新增 ValidateOptionalLogName(空值放行、非空值按新规范校验),log_filename 的 validator 由 Validator::ValidateEligibleChar 切换为该函数;kv_client_config.cpp 删除本地 RE2 校验,新增 ValidateLogNameArg 统一处理 log_filename(不允许为空)与 client_access_log_filename(允许为空)。
  • 更新对外接口文档与部署配置说明include/datasystem/utils/kv_client_config.hLogNameAccessLogName 的 API 注释、docs/source_zh_cn/api_reference/api/cpp/KVClientConfig.rstcli/deploy/conf/coordinator_config.jsonworker_config.jsonk8s/helm_chart/datasystem/values.yaml 均改为"非空时仅允许字母、数字和下划线"的说明。
  • 补充单元测试并适配既有用例:在 tests/ut/common/util/validator_test.cpptests/ut/common/flags/flags_test.cpp(覆盖空字符串、字母、数字、下划线、连字符、点、斜杠和空格等场景)及 tests/ut/common/log/logging_test.cpp 中新增/调整用例;tests/perf/zmq/zmq_perf_agt_exe.cpp 将 log name 中的分隔符由 . 调整为 _%s_%d)以符合新规范。
likedislike
openeuler-ci-botopeneuler-ci-bot成员
2 天前 将luozhancheng,liangyi1234,yuchaow,yche-huawei,slichengsong,iewauh,tianyi-huawei设为审查人
atomgit-bot
atomgit-bot
2 天前 评论:

代码审查

✅ 未发现问题

likedislike
此处折叠了62条消息 查看更多
openeuler-ci-botopeneuler-ci-bot成员
11 小时前 添加了label:approvedlgtm
openeuler-ci-bot
openeuler-ci-bot成员
11 小时前 评论:

Review Code Feedback

  • The label lgtm, approved was added to this pull request. It means that yaohaolin reviewed the code changes. 👋
Tips
  • If this pull request is not merged while all conditions are met, comment /check-pr to try again. 😄
likedislike
openeuler-ci-botopeneuler-ci-bot成员
11 小时前 关闭了关联的issue
openeuler-ci-botopeneuler-ci-bot成员
11 小时前 合入了pull request,合并节点 SHA:60d56ab67c640ed769729ddb57165c4f0e0841a3
yuanrong-ci-robot
10 小时前 评论:

【OpenYuanRong PROCESS 部署 Actor 冒烟 · PR验证报告】

✅ 总结论:通过

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PR 信息
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
仓库:yuanrong-datasystem
PR 编号:#2124
分支:master
提交:04bb99568cb2610bd75d7bd2f399b5921facf2e0
作者:young_0105@163.com
操作:merge

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
分语言汇总
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
语言 总用例 成功 失败 跳过 通过率
C++ 43 43 0 0 100.0%
Python 90 90 0 0 100.0%
Java 26 26 0 0 100.0%
合计 159 159 0 0 100.0%


Jenkins 构建: http://jenkins.openyuanrong.com/job/openyuanrong/job/OpenYR_Actor_Smoke_Process_X86/604/

likedislike