协议
尝试次数监控
在 fuchsia.update/update.fidl 中定义
监控尝试在启动后的更新。
有意接收更新检查进度信息的客户端应实现此协议,并将客户端提供给 Manager.MonitorAllUpdateChecks。如果待处理请求超过 2 个,管理器将关闭 TrysMonitor 的客户端。
启动
在新的更新尝试开始时调用。
参数:
- |options| 应如何执行此请求的选项。
- |monitor| 用于接收进度更新的协议。
请求
姓名 | 类型 |
---|---|
options |
AttemptOptions
|
monitor |
server_end<Monitor>
|
回复
<空>
提交状态提供程序
在 fuchsia.update/commit.fidl 中定义
报告程序,用于确认当前启动的系统是否已提交。提交更新后,这意味着:
- 当前启动的槽位被标记为健康状况良好(例如,已成功启动)。
- 备用槽(如果存在)已标记为不可启动。
- 重新启动后,系统不会回滚到先前的操作系统版本。
- 旧版操作系统可能会进行垃圾回收。
在提交更新之前,系统会保留旧版操作系统。这样一来,如果我们发现新编写的版本有问题(例如它本身无法更新),系统就可以回退到先前的提交版本。
当前系统已提交
确定是否已启动当前启动的系统,并立即返回 EventPair。
- 如果提交了当前启动的系统,就在 EventPair 上断言了
ZX_USER_SIGNAL_0
信号,例如,在返回 EventPair 之前就断言了该信号。 - 如果提交处于待处理状态,则不会在 EventPair 上断言任何信号。提交系统后,系统会在 EventPair 上断言
ZX_USER_SIGNAL_0
。 - 如果系统无法提交当前启动的版本,系统将会重新启动并终止提供 CommitStatusProvider 的组件(这些组件会断言
ZX_EVENTPAIR_PEER_CLOSED
)。此时,任何剩余的 EventPair 都会观察ZX_EVENTPAIR_PEER_CLOSED
信号。
- 响应
event
一个权利为ZX_RIGHTS_BASIC
的 EventPair。
请求
<空>
回复
姓名 | 类型 |
---|---|
event |
handle<eventpair>
|
经理
在 fuchsia.update/update.fidl 中定义
管理器管理器供希望检查更新或关注持续更新的状态的客户端使用。
该管理器提供了一种通过 Manager.CheckNow 消息检查更新的机制。
立即检查
立即检查更新,并视需要跟踪更新检查的状态和进度。
-
request
options
请求应如何执行的选项。 例如,发起此类请求的实体是什么? 例如,监控已在进行中的现有更新检查是否可接受? -
request
monitor
用于接收此更新检查的状态事件的接口。该监视器仅对单次更新检查有效,之后它将不再收到任何通知,因此会被关闭。
- error 如果无法启动更新检查,将返回错误。监测器(如果有)不会收到任何通知。
请求
姓名 | 类型 |
---|---|
options |
CheckOptions
|
monitor |
Monitor?
|
回复
姓名 | 类型 |
---|---|
payload |
Manager_CheckNow_Result
|
监控所有更新检查
监控所有启动时的尝试尝试,以及正在进行的尝试(如有)。
参数:
- |attempts_monitor| 尝试更新时接收 |Monitor| 实例的协议。
请求
姓名 | 类型 |
---|---|
attempts_monitor |
AttemptsMonitor
|
执行待处理重新启动
如果已经为下次系统启动预演了更新,则会执行任何待重新启动的系统到更新后的操作系统。
平台已配置为允许产品驱动程序重新启动重新启动时,应使用此政策。如果在平台未配置为允许产品驱动重新启动安排时调用此方法,则不会发生重新启动,系统会在更新后自行重新启动。
在产品驱动的重新启动配置中,平台仍包含更新后重新启动的停止点。这意味着,如果安装了更新,但系统在停止时间之前未重新启动,那么更新系统会自动将系统作为安全措施重新启动。为了避免受到这种退避的影响,想要控制重新启动时间的产品应每天大约调用此方法。
- 如果系统正在重新启动,则返回
rebooting
true;如果没有更新处于待重新启动状态,则返回 false。
请求
<空>
回复
姓名 | 类型 |
---|---|
rebooting |
bool
|
显示器
在 fuchsia.update/update.fidl 中定义
监控单个更新检查。
有意接收更新检查进度信息的客户端应实现此协议,并将客户端提供给 Manager.CheckNow。
OnState
接收此更新检查的状态更新。
系统会针对所有状态更改调用此请求,而不会跳过任何请求。但是,实现传送消息时,消息传送可能会受到限制。
节流递送不会影响 Manager 的底层状态。它不会等待任何确认,才会进入其状态机中的下一个状态。管理器只会将状态传递给 Monitor 实现,以接收它们。
在 install_update 状态期间,如果 Monitor 实现未及时响应 OnState()
请求,Manager 可能会自由地折叠多余的信息(例如已完成的分数)。
- request
state
更新检查的新状态。
请求
姓名 | 类型 |
---|---|
state |
State
|
回复
<空>
结构
Manager_CheckNow_Response
在 fuchsia.update/update.fidl 中定义
<空>
ENUMS
CheckNotStartedReason 严格
类型:uint32
在 fuchsia.update/update.fidl 中定义
这是请求立即检查更新所返回的一组值。
姓名 | 值 | 说明 |
---|---|---|
内部 |
1 |
启动更新检查时发生内部错误。客户端应该无法对此错误采取有意义的操作,只是在稍后(在出现多个错误后,在适当的延迟和退避后)重试。 |
选项无效 |
2 |
如果存在通过 CheckOptions 表提供给 CheckNow 所必需的参数或选项(或选项值冲突),则返回此错误。 |
已阅读进度 |
3 |
发出此请求时,目前正在进行另一项更新检查。系统不会启动新的更新检查。 |
受到限制 |
4 |
由于客户端在短时间内发出的更新检查请求过多,因此未启动更新检查。 注意:客户端不得尝试以高于 fuchsia.update.Manager 的频率执行后台更新检查。 如果客户端尝试滥用此接口,则它会受到限制。 |
启动器严格
类型:uint32
在 fuchsia.update/update.fidl 中定义
是谁发起了更新检查,或是谁启动了该检查。
姓名 | 值 | 说明 |
---|---|---|
USER |
1 |
更新检查是由交互式用户发起的,或者用户会被阻止并等待更新检查的结果。只有在用户与之互动的界面元素或流程已发起此更新检查时,才应使用此元素。 |
服务 |
2 |
更新检查由服务启动,而不是由面向用户的系统启动。 |
InstallationDeferralReason 灵活性
类型:uint32
在 fuchsia.update/update.fidl 中定义
这是推迟安装更新时提供的一组值。
姓名 | 值 | 说明 |
---|---|---|
当前_未_已提交 |
1 |
未提交更新,因为当前启动的系统未提交。建议使用方使用 CommitStatusProvider 确定何时重试更新检查,以便安装更新。 |
表格
尝试选项
在 fuchsia.update/update.fidl 中定义
更新尝试监控的详细信息。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
initiator |
Initiator
|
是谁或什么操作发起了此更新尝试。这可能会影响执行更新检查的方式。 |
检查选项
在 fuchsia.update/update.fidl 中定义
更新检查的配置选项。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
initiator |
Initiator
|
是谁或什么操作发起了此更新尝试。这被视为政策的输入,可能会影响更新检查的执行方式。 这是必填字段。 |
2 |
allow_attaching_to_existing_update_check |
bool
|
如果更新检查已在进行中,则可以改为将监视器附加到正在进行的更新,而不是让此请求检查更新。这可能会转换导致 ALREADY_IN_PROGRESS 被视为非错误情况的情况。 |
检查更新数据
在 fuchsia.update/update.fidl 中定义
这是与 checking_for_updates
关联的数据集。(目前没有)
序数 | 字段 | 类型 | 说明 |
---|
ErrorCheckingForUpdateData
在 fuchsia.update/update.fidl 中定义
这是与 error_checking_for_update
状态相关的一组数据。(目前没有)
序数 | 字段 | 类型 | 说明 |
---|
安装推迟数据
在 fuchsia.update/update.fidl 中定义
这是与 installation_deferred_by_policy
状态相关的一组数据。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
update |
UpdateInfo
|
|
2 |
deferral_reason |
InstallationDeferralReason
|
安装错误数据
在 fuchsia.update/update.fidl 中定义
这是与 installation_error
状态相关的一组数据。(目前没有)
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
update |
UpdateInfo
|
|
2 |
installation_progress |
InstallationProgress
|
安装进度
在 fuchsia.update/update.fidl 中定义
用于指明目前安装的更新的安装进度。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
fraction_completed |
float32
|
已完成的安装所占的比例 [0-1.0f]。 |
安装数据
在 fuchsia.update/update.fidl 中定义
下面是与更新相关的状态相关的一组数据集:
installing_update
waiting_for_reboot
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
update |
UpdateInfo
|
|
2 |
installation_progress |
InstallationProgress
|
无可用更新
在 fuchsia.update/update.fidl 中定义
这是与 no_update_available
状态相关的一组数据。(目前没有)
序数 | 字段 | 类型 | 说明 |
---|
UpdateInfo
在 fuchsia.update/update.fidl 中定义
用于描述可供安装的更新。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
version_available |
string[128]
|
描述可用版本的字符串。它可以是语义版本 (A.B.C.D),也可以是不透明哈希。客户端不得尝试检查此值,该值仅用于显示目的。 |
2 |
download_size |
uint64
|
可供下载以应用此更新的总字节数。 |
3 |
urgent |
bool
|
更新是否被标记为紧急。默认值为 false。 |
联合会
Manager_CheckNow_Result 严格
在 fuchsia.update/update.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
response |
Manager_CheckNow_Response
|
|
2 |
err |
CheckNotStartedReason
|
州严格
在 fuchsia.update/update.fidl 中定义
监控在更新检查期间可以接收的状态集。
更新检查在进入终止状态时(即以图右侧的状态表示,且无箭头指向外)时结束。
状态机图
+----------------------+ +---------------------------------+
| checking_for_updates |---->| error_checking_for_update |
+----------------------+ +---------------------------------+
|
| +---------------------------------+
+---------------->| no_update_available |
| +---------------------------------+
|
| +---------------------------------+
+---------------->| installation_deferred_by_policy |
| +---------------------------------+
v
+----------------------+ +---------------------------------+
| installing_update |---->| installation_error |
+----------------------+ +---------------------------------+
|
| +---------------------------------+
+---------------->| waiting_for_reboot |
+---------------------------------+
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
checking_for_updates |
CheckingForUpdatesData
|
经理正在检查更新。 后续状态:
|
2 |
error_checking_for_update |
ErrorCheckingForUpdateData
|
管理器在检查是否存在新的更新时遇到错误。 此为终止状态 |
3 |
no_update_available |
NoUpdateAvailableData
|
目前没有可用更新。 此为终止状态 |
4 |
installation_deferred_by_policy |
InstallationDeferredData
|
管理器已找到可用更新,但由于政策限制,目前无法进行更新。 此为终止状态 |
5 |
installing_update |
InstallingData
|
管理器正在安装可用更新。 后续状态:
|
6 |
waiting_for_reboot |
InstallingData
|
已安装更新,并且设备正在等待重新启动。 后续状态:
此为终止状态 |
7 |
installation_error |
InstallationErrorData
|
管理器在安装更新时遇到了更新。 此为终止状态 |
代表
姓名 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_VERSION_STRING_SIZE |
128
|
uint32 |
这是协议将返回的版本字符串的最大长度 |