Fuchsia.update

添加时间:7

协议

尝试次数监控

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 中定义

是谁发起了更新检查,或是谁启动了该检查。

姓名说明
1

更新检查是由交互式用户发起的,或者用户会被阻止并等待更新检查的结果。只有在用户与之互动的界面元素或流程已发起此更新检查时,才应使用此元素。

2

更新检查由服务启动,而不是由面向用户的系统启动。

InstallationDeferralReason 灵活性

类型:uint32

fuchsia.update/update.fidl 中定义

这是推迟安装更新时提供的一组值。

姓名说明
1

未提交更新,因为当前启动的系统未提交。建议使用方使用 CommitStatusProvider 确定何时重试更新检查,以便安装更新。

表格

尝试选项

fuchsia.update/update.fidl 中定义

更新尝试监控的详细信息。

序数字段类型说明
initiator Initiator

是谁或什么操作发起了此更新尝试。这可能会影响执行更新检查的方式。

检查选项

fuchsia.update/update.fidl 中定义

更新检查的配置选项。

序数字段类型说明
initiator Initiator

是谁或什么操作发起了此更新尝试。这被视为政策的输入,可能会影响更新检查的执行方式。

这是必填字段

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 状态相关的一组数据。

序数字段类型说明
update UpdateInfo
deferral_reason InstallationDeferralReason

安装错误数据

fuchsia.update/update.fidl 中定义

这是与 installation_error 状态相关的一组数据。(目前没有)

序数字段类型说明
update UpdateInfo
installation_progress InstallationProgress

安装进度

fuchsia.update/update.fidl 中定义

用于指明目前安装的更新的安装进度。

序数字段类型说明
fraction_completed float32

已完成的安装所占的比例 [0-1.0f]。

安装数据

fuchsia.update/update.fidl 中定义

下面是与更新相关的状态相关的一组数据集:

  • installing_update
  • waiting_for_reboot

序数字段类型说明
update UpdateInfo
installation_progress InstallationProgress

无可用更新

fuchsia.update/update.fidl 中定义

这是与 no_update_available 状态相关的一组数据。(目前没有)

序数字段类型说明

UpdateInfo

fuchsia.update/update.fidl 中定义

用于描述可供安装的更新。

序数字段类型说明
version_available string[128]

描述可用版本的字符串。它可以是语义版本 (A.B.C.D),也可以是不透明哈希。客户端不得尝试检查此值,该值仅用于显示目的。

download_size uint64

可供下载以应用此更新的总字节数。

urgent bool

更新是否被标记为紧急。默认值为 false。

联合会

Manager_CheckNow_Result 严格

fuchsia.update/update.fidl 中定义

序数变体类型说明
response Manager_CheckNow_Response
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        |
                                 +---------------------------------+
序数变体类型说明
checking_for_updates CheckingForUpdatesData

经理正在检查更新。

后续状态:

  • installing_update 项更新可用且政策允许
  • 发生错误 error_checking_for_update
  • update_deferred_by_policy 项更新可用,但受政策延迟
error_checking_for_update ErrorCheckingForUpdateData

管理器在检查是否存在新的更新时遇到错误。

此为终止状态

no_update_available NoUpdateAvailableData

目前没有可用更新。

此为终止状态

installation_deferred_by_policy InstallationDeferredData

管理器已找到可用更新,但由于政策限制,目前无法进行更新。

此为终止状态

installing_update InstallingData

管理器正在安装可用更新。

后续状态:

  • 成功 waiting_for_reboot
  • 发生错误 installation_error
waiting_for_reboot InstallingData

已安装更新,并且设备正在等待重新启动。

后续状态:

  • (无,设备重新启动)

此为终止状态

installation_error InstallationErrorData

管理器在安装更新时遇到了更新。

此为终止状态

代表

姓名类型说明
MAX_VERSION_STRING_SIZE 128 uint32

这是协议将返回的版本字符串的最大长度