Fuchsia 诊断持久性服务将诊断数据从 设备重新启动。
工作原理
当服务触发时,Persistence 会读取多组诊断数据并 将数据存储到磁盘。持久性将存储的数据发布到自己的 在下次启动时检查层次结构。
持久性由配置文件中的条目配置。每个条目指定一个 服务名称、服务中的标记和一组选择器。服务 name 配置 FIDL 服务。
持久保留数据的请求由 FIDL 传送至 Persistence,请求 应保留标记的选择器。没有定期采样。每个 消息包含一个标记。
每个代码都受到两个方面的限制:大小有限制, 受限。
请求到达得过快将被延迟,直到退避时间结束。 在退避期内收到的多个请求将合并为一个请求。
如果请求的选择器提取了过多的数据,就会存储错误 该字符串将覆盖之前为该请求存储的所有数据。
如何使用持久化
如需保留数据并发布,请按以下步骤操作:
定义数据
确定要保留的数据。如果它尚未被写入 检查并添加代码,以进行发布。请注意,Google Cloud 服务可能会抓取数据 请求发送后保留一段时间,尤其是在 退避时间。
将数据列入许可名单
持久性从 FeedbackArchiveAccessor
读取数据,因此您需要
检查在该流水线的配置文件中列入许可名单的数据。
配置持久性
将文件放入 //src/diagnostics/config/persistent 或 //vendor/*/diagnostics/config/persistence. 文件必须命名为 *.persist。将文件添加到 BUILD.gn 中的 persistent_files 中。
.persist 文件采用 JSON5 格式。每个文件都包含一个 对象数组。 每个对象都具有以下架构:
{
tag: 'any-name-you-like', // lowercase and hyphens only
service_name: 'service-name', // lowercase and hyphens only
max_bytes: 1000, // limit on size of JSON-format data persisted
min_seconds_between_fetch: 60, // limit on frequency
selectors: [
'INSPECT:core/component:root/path:leaf_name',
'INSPECT:core/component:root/*:another_leaf',
],
},
所有字段均为必填字段。可以从任何组件中提取数据 只能由将该服务路由至这些组件的组件请求。
每项服务的标记名称必须是唯一的。配置文件名可以任意设置 无法在配置目录之间复制。
获得隐私权批准
隐私权需要检查持久性配置。如需申请审核,请按以下步骤操作:
- 获取 CL +2
- 将 cphoenix@ 和 miguelfrde@ 添加到 CL。
- 我们将对该 CL +1,并将隐私权团队添加到该 CL。
- 负责隐私保护的人员将会对该 CL +2(或提出疑虑)。
- 当隐私权功能为 CL +2 时(此过程可能需要大约一周的时间),它会显示 获得所有者批准后即可提交。
路由和使用服务
每个服务名称都将发布为 fuchsia.diagnostics.persist.DataPersistence-service-name。这必须通过 任何组件将使用为该服务定义的标记。
该服务的 FIDL 协议位于 //src/diagnostics/persistence/fidl/persist.fidl.函数调用为
protocol DataPersistence {
Persist(string:MAX_NAME_SIZE tag) -> (PersistResult result);
};
预期结果为 PersistResult::QUEUED
。
使用已发布的数据
下次启动时,存储的数据将在延迟一段时间后发布到“检查” (目前为 120 秒)。
对于 INSPECT:core/test_component:root/path:number
的选择器和某项服务
下为 my-service
和 my-tag
标记,数据可在以下位置找到:
core/diagnostics-persistence:root/persist/my-service/my-tag/core\test_component/root/path:number
。