【待评审】UpdateService 接口新增 AC 掉电前通知信号与屏蔽开关属性

背景

BMC 升级某些固件(如 CPLD)时,生效方式为整机 AC 掉电(ResetAC)。由升级生效引发的 AC 掉电不应该触发 0x0300001F(PSUServerPowerFailure)告警。

当前 firmware_mgmt 在升级完成时广播 UpgradeFinishSignal,power_mgmt 据此在 FirmwareType 包含 Cpld 时提前置位屏蔽标志 ShieldAclostEventRecord=1,屏蔽本次掉电告警。但该逻辑未区分生效方式:对于生效方式为复位 BMC(ResetBMC)的场景(如 A5),升级完成后到真正生效之间可能没有 AC 动作,屏蔽标志长期残留,导致下一次真实 AC 掉电告警被误屏蔽,0x0300001F 不上报。

因此需要在 firmware_mgmt 真正执行 AC 掉电动作前发送信号,由电源组件屏蔽本次掉电告警,并且新增一个开关,由power_mgmt配置firmware_mgmt是否发送信号。

关联ISSUE

整体方案

  1. 在已有资源协作接口 bmc.kepler.UpdateService 上新增信号 BeforeActiveActionSignal(SystemId, ActiveAction, Phase, AdditionalOptions):firmware_mgmt 在真正执行 AC 掉电(PowerCtrl('ACCycle'))之前发送 Phase=Starting;在AC动作未执行或执行失败时发送 Phase=Exception,通知消费方撤销准备。
  2. 在 bmc.kepler.UpdateService 上新增确认方法 BeforeActiveActionReply(SystemId, ActiveAction, Result, AdditionalOptions):电源组件收到 Starting、把屏蔽标志落盘后调用该方法回复 Result=0;firmware_mgmt 发送信号后“上锁”,收到确认后“解锁”才真正执行 AC。信号是单向广播、没有应答,必须由该方法提供确认。确认等待最多 60s(硬编码 1min),超时后发 Exception 并按失败策略处理。
  3. 在 bmc.kepler.UpdateService 上新增可读可写属性 BeforeActiveActionSignalEnabled(默认 false,不持久化):由电源组件置 true 表示支持并承诺回复确认,firmware_mgmt 读取该属性决定是否发送信号并等待确认。

评审点

评审点1:变更资源协作接口 bmc.kepler.UpdateService,新增信号 BeforeActiveActionSignal、确认方法 BeforeActiveActionReply 与属性 BeforeActiveActionSignalEnabled。

详细描述

评审点1:变更资源协作接口 bmc.kepler.UpdateService

变更描述: 接口已承载固件升级管理能力,本次变更同属于升级流程中的生效控制:升级固件生效方式为 ResetAC 时,需在真正执行 AC 掉电前通知电源组件屏蔽本次掉电告警,并等待电源组件确认准备完成后(登记屏蔽信号)再执行;同时提供开关属性,由电源组件配置,决定firmware_mgmt是否发送信号。变更类型为在已有接口上新增信号、方法和属性,不修改、不废弃已有成员。

接口链接: mdb_interface/json/intf/mdb/bmc/kepler/UpdateService.json-代码预览-mdb_interface:基于 D-Bus 协议的资源协作接口模型定义项目 - AtomGit

变更属性

变更类型 属性名称 签名 变化通知 属性描述 访问权限 持久化类型 变更影响
新增 BeforeActiveActionSignalEnabled Boolean false 标识电源组件是否支持AC掉电前通知机制,默认值为 false。true:电源组件已订阅 BeforeActiveActionSignal,并承诺回复 BeforeActiveActionReply,firmware_mgmt 在 AC 掉电前发送信号;false:firmware_mgmt 不发送信号、不等待确认,保持旧行为 Read: ReadOnly
Write: BasicSetting
不持久化(内存),进程重启后恢复默认 false,由电源组件启动时重新置位 新增属性,无兼容性影响;默认 false,旧版本电源组件不置位时 firmware_mgmt 保持旧行为

变更信号

变更类型 信号名称 签名 参数描述 信号描述 变更影响
新增 BeforeActiveActionSignal issa{ss}SystemId:系统ID(S32),取值规则同升级三阶段信号:单系统为 1,多系统为触发本次生效的 ctx.SystemId,255 表示所有 host
ActiveAction:即将执行的生效方式(String),取值参考 common_def.active_mode:None / ResetBMC / ResetAC / DelayResetBMC / ForceResetBMC;当前场景为 ResetAC
State:阶段(String),Starting-即将执行,请消费方准备并确认;Exception-未执行或执行失败,请撤销准备
AdditionalOptions:预留扩展字典(Dictionary),Exception 时可带 Reason
ActiveAction 执行前通知信号:Starting 表示 firmware_mgmt 即将执行该生效动作,请消费方完成必要准备(如屏蔽 AC 掉电告警置位)并调用 BeforeActiveActionReply 确认;Exception 表示该动作未执行或执行失败(含确认失败/超时),请消费方撤销准备(删除置位记录) 新增信号,无兼容性影响;未订阅该信号的组件不受影响

说明:

  • 签名 issa{ss} 为信号 payload 签名(不含框架自动附加的 context a{ss};运行时实际 D-Bus 完整签名为 a{ss}issa{ss})。四个字段依次为 SystemId(i/S32)、ActiveAction(s)、Phase(s)、AdditionalOptions(a{ss}),与现有 UpgradeFinishSignal(isa{ss})的签名风格一致。
  • Starting 只在进入 AC 重试循环前发送一次;AC 执行成功不再发 Exception;确认失败/超时、或 AC 最终失败时发 Exception 撤销准备,避免屏蔽标志残留。

变更方法

变更类型 方法名称 请求参数 响应参数 方法描述 访问权限 变更影响
新增 BeforeActiveActionReply SystemId:系统ID(S32),与信号中的值一致
ActiveAction:生效方式(String),取值参考 common_def.active_mode,当前为 ResetAC
Result:准备结果(S32),0-已就绪,-1-准备失败
AdditionalOptions:预留扩展字典(Dictionary),建议带 Reason
无 ActiveAction 执行前准备结果确认:电源组件收到 Phase=Starting 的信号、完成屏蔽标志落盘后调用;Result=0 表示已就绪,firmware_mgmt 可解锁并执行 AC;Result=-1 表示准备失败 BasicSetting 新增方法,无兼容性影响;未调用该方法的旧电源组件通过属性 false 保持旧行为

请求签名:issa{ss}(不含框架自动附加的 context);响应签名为空 {}。

变更接口影响

路径 变更接口影响 CSR配置影响 持久化影响 其他影响
/bmc/kepler/UpdateService 新增 BeforeActiveActionSignal 信号、BeforeActiveActionReply 方法和 BeforeActiveActionSignalEnabled 属性,提供 ActiveAction 执行前通知、确认与告警屏蔽能力 不涉及 新增属性为内存属性,不涉及主键变更,无兼容性问题 firmware_mgmt 新增发送信号、上锁等待确认、失败撤销的逻辑;电源组件新增信号订阅、确认方法调用和开关置位逻辑

是否准备好AI预审

否

评审结论

遗留问题