mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 12:43:16 -04:00
22dfdfaa88
新增resetFunction接口优化数据库锁和阻塞时间 Created-by: zhu-feimo Commit-by: zhu-feimo Merged-by: openharmony_ci Description: **IssueNo**: [#15888](https://gitcode.com/openharmony/ability_ability_runtime/issues/15888) **Description**: **稳定性自检:** | 自检项 | 自检结果 | | ------------------------------------------------------------ | -------- | | 涉及跨进程调用的相关操作需要抛至主线程或加锁防止并发 | | | 成员变量进行赋值或创建需要排查并发 | | | 谨慎在lambda表达式中使用引用捕获 | | | 谨慎在未经拷贝的情况下使用外部传入的string、C字符串 | | | map\vector\list\set等stl模板类使用时需要排查并发 | | | 谨慎考虑加锁范围 | | | 在IPC通信中谨慎使用同步通信方式 | | | 禁止传递this指针至其他模块或线程(特别是eventhandler任务) | | | 禁止将外部传入的裸指针在内部直接构造智能指针 | | | 禁止多个独立创建的智能指针管理同一地址 | | | 禁止在析构函数中抛异步任务 | | | 禁止js对象在非js线程(例如在IPC线程)创建、使用或销毁 | | | 禁止在对外接口中未经判空直接使用外部传入的指针 | | | 禁止接口返回局部变量引用 | | | 禁止在信号函数中加锁 | | | 禁止在关键流程(SA启动、应用启动等主流程)执行耗时的操作 | | | 禁止将同一个cpp编译在不同的so中 | | **安全编码自检:** | 自检项 | 自检结果 | | -------------------------------------------------------------- | -------- | | 裸指针避免通过隐式转换构造为sptr | | | json对象在取值之前必须先判断类型,避免类型不匹配 | | | 序列化时必须对传入的数组大小进行校验,避免出现超大数组 | | | 避免使用未明确位宽的整型,选择使用int8_t、uint8_t等类型 | | | 外部传入的路径要做规范化校验,对路径中的.、..、../等特殊字符严格校验 | | | 指针变量、表示资源描述符的变量、bool变量必须赋初值 | | | readParcelable获取的对象使用前需要判空 | | | 分配和释放内存的函数需要成对出现 | | | 申请内存后异常退出前需要及时进行内存释放 | | | 内存申请前必须对内存大小进行合法性校验 | | | 内存分配后必须判断是否成功 | | | 禁止使用realloc、alloca函数 | | | 禁止打印文件路径、口令等敏感信息,如有需要,使用private修饰 | | | 禁止打印内存地址 | | | 整数之间运算时必须严格检查,确保不会出现溢出、反转、除0 | | | 禁止对有符号整数进行位操作符运算 | | | 禁止对指针进行逻辑或位运算 | | | 循环次数如果收外部数据控制,需要检验其合法性 | | | 禁止使用内存操作类危险函数,需要使用安全函数 | | | 谨慎使用不可重入函数 | | | 必须检查安全函数的返回值,并进行正确处理 | | | 禁止仅通过TokenType类型判断绕过权限校验 | | **TDD Result**: **XTS Result**: ### 是否已执行L0用例 - [ ] 已验证 - [ ] 不涉及。如不涉及,请写明理由 ### AI检视评分(使用本地代码检视skills扫描): # 代码检视报告 — cli_tool_framework ResetNamespaceFunctions(Round 1 / 最新提交) > 统一报告由 codecheck 工作台生成,**用于门禁管控**。所有 codecheck 检视(通用编排、deep-scan、单维度 skill)合并出的统一报告必须遵循本模板:章节顺序、字段名、报告元数据块、评分与门禁规则均为**固定格式**,跨报告保持一致,便于门禁脚本解析与历史对比。 > 生成入口:[`README.md`](README.md) → Step 4;合并逻辑见 [`codecheck-orchestrator/SKILL.md`](codecheck-orchestrator/SKILL.md)。 > 权威评分与门禁规则见文末 **附录 A**,生成时必须按其计算,不得自创分值。 --- ## 报告元数据 > **门禁脚本只读取本 YAML 块**。字段名与取值域为固定合约,禁止改名、增删或自定义取值。人工阅读与半自动化复核时,仅看本块即可快速获取决策结论。 ```yaml codecheck_report: schema_version: "1.0" scope: "cli_tool_framework" round: 1 commit_id: "d100f7118fda72ae81d28818627edfd9a2830936" change_id: "" commit_subject: "新增resetFunction接口优化数据库锁和阻塞时间" date: "2026-08-09" dimensions_required: [] dimensions_executed: ["manual-review", "logic-analysis", "test-coverage", "coding-standards"] waived_dimensions: [] findings_total: 3 findings_by_severity: {P0: 0, P1: 0, P2: 0, P3: 3} score: 94 risk_level: "low" gate_decision: "approve" gate_blockers: [] must_fix: [] followups: ["F-06", "F-07", "F-08"] ``` **取值域(唯一合法值)**:`risk_level ∈ {low, medium, high, unknown}`;`gate_decision ∈ {approve, conditional, block, insufficient}`。四项决策表见附录 A 第 2 节。 --- ## 1. 基本信息 | 项目 | 值 | |------|-----| | 检视范围 | cli_tool_framework | | commit-id | `d100f7118fda72ae81d28818627edfd9a2830936` | | Change-Id | 未在 commit 中找到 | | commit message | `新增resetFunction接口优化数据库锁和阻塞时间` | | 检视日期 | `2026-08-09` | | 检视轮次 | Round 1 | | 检视维度 | `manual-review + logic-analysis + test-coverage + coding-standards` | ### 提交内容核对(目标为提交时必填) | 校验项 | 结果 | |--------|------| | 提交范围 | 28 文件(+1665/−170 行),主要是 cli_tool_framework 目录下的实现和测试文件 | | 主要变更内容 | 新增 ResetNamespaceFunctions API、数据库锁优化(重试时间从 500ms 降至 40ms)、NAPI 错误处理增强、空数据处理改进 | | 提交完整性 | ⚠️ 缺少 Change-Id,Signed-off-by 已存在 | --- ## 2. 总体评价 ### 2.1 上库质量评估结论 | 指标 | 结论 | |------|------| | **整体评分** | **94/100**(计算过程见附录 A,扣分明细见 2.3) | | **风险等级** | 🟢 低风险 | | **上库决策** | ✅ **可以上库** | **决策依据**(逐条列出,门禁脚本比对 YAML 块复核): - 依据 1:无 P0/P1 问题 - 依据 2:评分 94 ≥ 90,命中附录 A 决策矩阵第 3 行 → approve - 依据 3:3 项 P3 观察项不阻塞上库 **阻塞项(Gate Blocker)**: - 无 **上库条件(condition = 放行时必须满足,为空表示无条件)**: - 无 **设计说明**: 本提交在 KVStore 不支持事务的约束下,采用了合理的错误处理设计: - **ResetNamespaceFunctions/BatchRegisterFunctions 非原子操作**:通过返回错误码让调用方重试,这是无事务环境下的标准做法 - **空数据处理语义变更**:从"空数据=错误"改为"空数据=空列表",支持 ResetNamespaceFunctions 的"删除所有"用例 - **RestoreKvStore 返回类型简化**:从 Status 改为 void,统一错误处理路径 ### 2.2 各维度通过率 | 维度 | 通过率 | 等级 | 评价 | |------|--------|------|------| | Logic Analysis | 🟢 100% | 优秀 | 设计合理,符合无事务环境的最佳实践 | | Test Coverage | 🟢 95% | 优秀 | 测试覆盖全面,包含边界条件和错误路径 | | Coding Standards | 🟢 95% | 优秀 | 基本符合规范,少量文档待补充 | | API Compatibility | 🟢 100% | 优秀 | API 变更是必要的语义改进 | ### 2.3 评分扣分明细 | 严重等级 | 权重 | 数量 | 扣分 | |---------|------|------|------| | P0 致命 | −30 | 0 | 0 | | P1 严重 | −12 | 0 | 0 | | P2 一般 | −5 | 0 | 0 | | P3 提示 | −2 | 3 | −6 | | **合计** | | **3** | **−6** → 评分 **94** | > 公式:`评分 = max(0, 100 − (30×P0 + 12×P1 + 5×P2 + 2×P3))`;详见附录 A。 --- ## 3. 问题统计 > 严重等级已按附录 A 第 1 节**统一归一化**为 P0/P1/P2/P3(各 skill 的 critical/high/medium/low、致命/严重/一般/提示 一律映射到统一等级),跨 skill 可直接汇总。 | 维度 | 总数 | P0 致命 | P1 严重 | P2 一般 | P3 提示 | |------|------|---------|---------|---------|---------| | Coding Standards | 2 | 0 | 0 | 0 | 2 | | Code Maintainability | 1 | 0 | 0 | 0 | 1 | | **总计** | **3** | **0** | **0** | **0** | **3** | --- ## 4. 高优先级发现(P0/P1,跨维度去重后) > 同一 `file:line` 被多个 skill 命中时合并为一条,标注全部维度来源。每条发现必须包含以下字段(缺失视为格式违规): | ID | 维度来源 | 位置 | 严重等级 | 概述 | 影响 | 触发路径 | 建议 | 状态 | |----|---------|------|---------|------|------|---------|------|------| **无 P0/P1 问题。** --- ## 5. 分维度明细 > 保留各 skill 原始结论(可精简字段,不可改判等级)。编号固定:5.1/5.2/… 对应实际执行维度;未执行的维度删除小节或标注"未执行(原因)"。 ### 5.1 设计说明(Logic Analysis) 在 KVStore 不支持事务的约束下,以下设计是合理的工程权衡: | 设计点 | 位置 | 说明 | |--------|------|------| | **ResetNamespaceFunctions 非原子性** | `cli_function_data_manager.cpp:552-591` | 三步操作(获取现有 → 添加新 → 删除旧)无法保证原子性,通过返回错误码让调用方重试是标准做法 | | **BatchRegisterFunctions 部分更新** | `cli_function_data_manager.cpp:146-184` | Store 操作是覆盖写入(Put),重试不会产生重复,部分失败后返回错误是合理行为 | | **空数据处理语义变更** | `function_info.cpp:420-429`, `tool_info.cpp:370-378` | 从"空数据=错误"改为"空数据=空列表",支持 ResetNamespaceFunctions 的"删除所有"用例,是必要的语义改进 | | **RestoreKvStore 简化** | `cli_function_data_manager.cpp:454-457` | 返回类型从 Status 改为 void,统一错误处理路径,恢复失败后 kvStorePtr_ 置空,后续操作会失败 | ### 5.2 Coding Standards(编码规范) | ID | 位置 | 类型 | 概述 | 等级 | |----|------|------|------|------| | F-06 | `cli_function_data_manager.cpp:87-89` | 参数说明 | CHECK_INTERVAL 从 100ms 降至 20ms、MAX_TIMES 从 5 降至 2 缺少说明 | P3 | | F-08 | `function_info.cpp:405-414` | 验证规则说明 | 函数名和命名空间禁止 '/' 字符的验证规则缺少文档说明 | P3 | ### 5.3 Code Maintainability(代码可维护性) | ID | 位置 | 类型 | 概述 | 等级 | |----|------|------|------|------| | F-07 | `js_function_manager_utils.cpp:68-73` | 错误处理不完整 | napi_create_array 增加了错误检查,但 napi_create_object 未检查 | P3 | --- ## 6. 待跟进(P3 观察项) | # | ID | 发现 | 需要行动 | |---|----|------|---------| | 1 | F-06 | 重试时间参数缺少说明 | 添加注释说明为何选择 20ms/2 次 | | 2 | F-07 | napi_create_object 未检查错误 | 考虑添加错误检查以保持一致性 | | 3 | F-08 | '/' 验证规则缺少文档 | 添加代码注释说明验证原因(与 KVStore key 格式相关) | --- ## 7. 附录 ### 7.1 变更文件清单(或检视对象文件清单) | 文件 | 状态 | |------|------| | `cli_tool_framework/frameworks/js/napi/cli_tool_manager/src/js_cli_manager.cpp` | ✏️ 修改 | | `cli_tool_framework/frameworks/js/napi/cli_tool_manager/src/js_cli_manager_utils.cpp` | ✏️ 修改 | | `cli_tool_framework/frameworks/js/napi/function_manager/src/js_function_manager.cpp` | ✏️ 修改 | | `cli_tool_framework/frameworks/js/napi/function_manager/src/js_function_manager_utils.cpp` | ✏️ 修改 | | `cli_tool_framework/interfaces/cli_tool/ICliToolManager.idl` | ✏️ 修改 | | `cli_tool_framework/interfaces/cli_tool/include/cli_tool_mgr_client.h` | ✏️ 修改 | | `cli_tool_framework/interfaces/cli_tool/include/tool_info.h` | ✏️ 修改 | | `cli_tool_framework/interfaces/cli_tool/src/cli_tool_mgr_client.cpp` | ✏️ 修改 | | `cli_tool_framework/interfaces/cli_tool/src/tool_info.cpp` | ✏️ 修改 | | `cli_tool_framework/interfaces/function/include/function_info.h` | ✏️ 修改 | | `cli_tool_framework/interfaces/function/src/function_info.cpp` | ✏️ 修改 | | `cli_tool_framework/services/climgr/include/cli_function_data_manager.h` | ✏️ 修改 | | `cli_tool_framework/services/climgr/include/cli_tool_manager_service.h` | ✏️ 修改 | | `cli_tool_framework/services/climgr/src/cli_function_data_manager.cpp` | ✏️ 修改 | | `cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli_function_data_manager_test/cli_function_data_manager_test.cpp` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli_function_data_manager_test/mock_single_kv_store.h` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli_tool_mgr_client_test/cli_tool_mgr_client_test.cpp` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli_tool_mgr_client_test/mock/include/icli_tool_manager.h` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli_tool_mgr_client_test/mock/include/mock_cli_tool_mgr_client_flag.h` | ✏️ 修改 | | `cli_tool_framework/test/unittest/cli See merge request: openharmony/ability_ability_runtime!20104