Files
ability_ability_runtime/cli_tool_framework
openharmony_ci 22dfdfaa88 !20104 merge 降低数据库初始化失败阻塞时间 into master
新增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
2026-08-11 09:30:45 +08:00
..