背景
自研 RAID 卡一致性校验(Consistency Check)在固件 1.0 与 2.0 上能力不同:
| 能力项 | 固件1.0 | 固件2.0 |
|---|---|---|
| 校验周期 | 按天配置(北向以 24 的倍数小时表达,24~1440h) | 按小时配置(步长 1h,范围 1~60h) |
| 自动修复开关 | 全局 1 个 | 按 RAID 级别两组:镜像组 RAID(1/10)、校验组 RAID(5/6/50/60) |
| 任务等待时间(DelayToStart) | 0~24 小时 | 0~250 小时 |
问题场景与影响点 :客户通过 Web/Redfish 配置 自研 RAID 卡一致性校验策略。在固件 2.0 上:自动修复按 RAID 级别分为镜像组与校验组两个开关,而北向只有全局 1 个开关,用户无法对两组分别控制;校验周期支持任意小时配置,但北向受"24 的倍数"限制无法表达;任务等待时间上限扩展到 250 小时,超出当前 0~24 校验范围会被拒绝。
当前系统差距 :后端未识别固件能力差异,资源协作接口无按级别修复属性与对应下发方法,Redfish/Web 北向零感知,全部按固件 1.0 全局模型工作。
调研结论:按 RAID 级别分组设置自动修复为 自研 固件 2.0 私有差异化能力——博通官方工具链(StorCLI/HII)一致性校验配置(cc/ccrate/abortcconerror)均为控制器级全局属性,无按级别区分;Redfish DMTF 标准仅有 ConsistencyCheckRatePercent,现有 VolumeConsistencyCheckConfig 本为 OEM 扩展,故新增能力继续走 OEM 扩展。
兼容性约束 :存量属性/方法签名一律不动;固件能力差异为后端内部概念(按一致性校验查询响应的 version_mask 判断,无效/失败按 1.0 处理,不获取固件版本);新增字段仅固件 2.0 有效,其余场景北向不显示/null;老客户端与其他厂商卡行为零变化。北向仅新增 2 个按级别修复字段,周期/等待时间范围的变更不新增北向属性,由后端校验常量分档承载。
关联ISSUE
- 【openUBMC】自研 RAID 卡一致性校验适配固件类型1.0和2.0 — 资源协作接口/Redfish/Web 三口适配按 RAID 级别自动修复与周期差异
整体方案
资源协作接口:
bmc.kepler.Systems.Storage.Controller.ConsistencyCheck新增 2 个按级别修复属性 + 2 个 V2 方法(EnableV2/SetParametersV2,存量 Enable/SetParameters 签名冻结不动);V2 为北向统一入口(指参数能力版本,非固件版本限定),后端 RPC 内部按 version_mask 分流:分组字段有效走固件 2.0 命令,无效(固件1.0/其他厂商卡)且分组参数缺省时降级走原 1.0 命令(行为=V1)
北向接口:
2. Redfish Storage 资源 OEM VolumeConsistencyCheckConfig 扩展 2 个属性增量透传
3. Web rest 接口一致性校验配置 GET/PATCH ConsisCheckInfo 对象新增 2 个属性
兼容策略: 全局 AutoRepairEnabled 在固件 2.0 上写=展开写两组、读=两组 AND,老客户端仅用全局字段即可正确工作(V1 方法路径不变);新增 V2 方法不携带全局入参,北向 PATCH 的全局字段由映射层合成为分组参数下发。
评审点
资源协作接口
- 变更
bmc.kepler.Systems.Storage.Controller.ConsistencyCheck:新增 2 个按级别修复属性与 2 个 V2 方法(EnableV2/SetParametersV2)
Redfish接口
- Storage 资源 OEM
VolumeConsistencyCheckConfig新增 2 个按级别自动修复属性
Web接口
- 一致性校验配置 GET/PATCH
ConsisCheckInfo对象新增 2 个按级别自动修复属性
详细描述
评审点1:变更资源协作接口 bmc.kepler.Systems.Storage.Controller.ConsistencyCheck
变更描述 :该接口承载一致性校验全部配置能力,新增的按级别自动修复同属一致性校验功能的一部分。仅新增,不变更/废弃任何存量属性与方法。采用新增 V2 方法(而非扩展存量方法入参或新增独立分组设置方法),北向映射统一调用 V2(单一路径,映射层无需感知固件类型做分流),后端 RPC 内部按 version_mask 分流固件 1.0/2.0:V2 指参数能力版本(第二版参数集,支持分组字段),非固件版本限定——固件 1.0/其他厂商卡在分组参数缺省时降级执行 V1 语义,分组参数显式给出才返回"不支持"。V2 不设全局修复开关入参(两个分组字段为参数全集,全局读=两组 AND、写=展开两组均可由分组字段合成),存量方法签名冻结、存量调用方零影响(V2 后缀沿用本仓库 SetBootDevices/SetBootDevicesV2 并存惯例)。
接口链接 :bmc.kepler.Systems.Storage.Controller.ConsistencyCheck 接口定义(storage mds/model.json)
变更属性
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 |
|---|---|---|---|---|---|---|---|---|---|
| 新增 | AutoRepairMirrorRaidEnabled | y | True | false | 镜像 RAID(1/10) 组自动修复开关:0-关闭 1-开启;默认值 0xFF 表示无效 | Read: ReadOnly | 带外获取 | 无需持久化 | 新增属性,无影响 |
| 新增 | AutoRepairParityRaidEnabled | y | True | false | 校验 RAID(5/6/50/60) 组自动修复开关:0-关闭 1-开启;默认值 0xFF 表示无效 | Read: ReadOnly | 带外获取 | 无需持久化 | 新增属性,无影响 |
存量属性语义约定(不变更定义,仅明确固件 2.0 行为)
| 属性 | 固件1.0 | 固件2.0 |
|---|---|---|
| AutoRepairEnabled(全局) | 固件实际值 | 读 = 两组 AND;写 = 展开写两组(兼容全局配置扩展场景) |
变更方法
| 变更类型 | 方法名称 | 请求签名 | 请求参数描述 | 响应签名 | 响应参数描述 | 方法描述 | 访问权限 | 变更影响 |
|---|---|---|---|---|---|---|---|---|
| 新增 | EnableV2 | qyuyy | Period:0xFFFF-不修改;Rate:0xFF-不修改;DelayToStart:0xFFFFFFFF-不修改;AutoRepairMirrorRaidEnabled:0-关闭 1-开启 0xFF-不修改;AutoRepairParityRaidEnabled:0-关闭 1-开启 0xFF-不修改 | 无 | 无 | 使能一致性校验并下发参数; | BasicSetting | 新增方法,无影响;存量方法行为不变 |
| 新增 | SetParametersV2 | qyyy | Period:0xFFFF-不修改;Rate:0xFF-不修改;AutoRepairMirrorRaidEnabled:0-关闭 1-开启 0xFF-不修改;AutoRepairParityRaidEnabled:0-关闭 1-开启 0xFF-不修改 | 无 | 无 | 仅设置参数不改变使能状态; | BasicSetting | 新增方法,无影响;存量方法行为不变 |
变更接口影响
| 路径 | 变更接口影响 | CSR配置影响 | 持久化影响 | 其他影响 |
|---|---|---|---|---|
| /bmc/kepler/Systems/:SystemId/Storage/Controllers/:Id | 新增 2 个属性和 2 个方法(EnableV2/SetParametersV2),提供固件2.0 一致性校验差异能力 | 不涉及重名属性,无影响 | 不涉及持久化,无影响 | 新增属性仅 自研 固件2.0 返回有效值;存量属性/方法行为不变 |
本次变更不涉及信号与错误消息的新增/变更/废弃。
冲突与异常约定
- 北向 PATCH 请求中全局
AutoRepairEnabled与分组字段可任意组合出现,由映射层 Statements 取值函数合成(显式分组值优先;分组缺省且全局显式 → 填全局值;均缺省 → 0xFF 不修改):全局值与显式分组值矛盾(全局=false 且任一分组=true、全局=true 且任一分组=false)→ 取值函数内抛错返回参数冲突;取值一致/无矛盾 → 合成后随 V2 一次下发。V2 方法不设全局入参,方法层无此歧义(Disable 无入参,固件1.0/2.0 行为一致,无需 V2) - 固件1.0/其他厂商卡:V2 调用分组参数全缺省(0xFF)→ 降级执行原 1.0 命令(行为与 V1 方法一致);分组参数显式给出 → 返回"当前控制器不支持该属性"错误(避免误以为生效)
评审点2:Storage 资源 OEM VolumeConsistencyCheckConfig 新增属性
资源URI :/redfish/v1/Systems/{ComputerSystemId}/Storage/{StorageId}
资源版本 :OEM Schema openUBMCStorage.v1_0_0(扩展 Oem/openUBMC/StorageControllers/VolumeConsistencyCheckConfig,json 与 csdl 同步新增,只加不改)
属性列表 (仅列新增,存量 Enabled/State/PeriodOfHours/Rate/AutoRepairEnabled/DelayToStart 等不变):
注1:列表内属性默认均支持 GET 操作。
注2:若属性在 Schema 中未显式定义 readonly 关键字,则默认为只读。
| 属性名 | 类型 | 示例/取值约束 | readonly | 易变属性 | 实现PATCH | 操作权限 | 描述 |
|---|---|---|---|---|---|---|---|
| AutoRepairMirrorRaidEnabled | [boolean,null] | true;null 表示不支持(固件1.0/其他厂商卡) | false | 否 | 是 | BasicSetting | 镜像 RAID(1/10) 组自动修复开关,仅固件2.0 |
| AutoRepairParityRaidEnabled | [boolean,null] | true;null 同上 | false | 否 | 是 | BasicSetting | 校验 RAID(5/6/50/60) 组自动修复开关,仅固件2.0 |
PATCH 行为约定 :
- Method 块统一改调 V2(Enabled:true→EnableV2、Enabled:false→Disable(不变)、无 Enabled→SetParametersV2),不再按固件类型分流(单一路径,单次 RPC、单条固件设置命令);分组参数与其他参数随同一方法一次下发,缺省字段按 0xFF/0xFFFF/0xFFFFFFFF 哨兵不修改处理(沿用 V1 惯例)
- 全局
AutoRepairEnabled由映射层 Statements 取值函数合成分组参数(显式分组优先;分组缺省且全局显式 → 填全局值;均缺省 → 0xFF);全局与显式分组矛盾 → 取值函数抛错返回参数冲突错误 - 固件1.0/其他厂商卡:由 storage 后端 V2 方法内部分流——分组参数全缺省时降级执行原 1.0 命令(行为与存量一致),分组参数显式给出返回属性不支持错误
Schema定义 :新增 OEM 属性在 openubmcstorage.v1_0_0.json 与配套 csdl 中同步定义,格式与官方 Redfish Schema 文件保持一致。
映射配置变更点 (interface_config/redfish/mapping_config/Systems/Storage/Storage.json):
- Statements 新增 2 个分组字段取值函数(入参:全局 AutoRepairEnabled、对应分组显式值;逻辑:显式分组优先 → 全局填充缺省 → 均缺省 0xFF;矛盾抛错)
- Method 块 Name 统一改为 EnableV2/SetParametersV2(存量 Enable/SetParameters Method 块不再被北向映射调用),Params 新增 2 个分组参数(上述取值函数);Disable Method 块不变;不使用 CallIf 固件分流
评审点3:Web rest 接口一致性校验配置 GET/PATCH 新增属性
资源URI :/UI/Rest/System/Storage/:id(webrest,现网控制器配置综合接口,GET/PATCH 同 URI,一致性校验配置承载于 ConsisCheckInfo 对象)
资源版本 :/
变化类型 :已有接口 GET 响应体/PATCH 请求体中 ConsisCheckInfo 对象新增 2 个属性,存量字段(Enabled/Period/Rate/AutoRepairEnabled/DelayForStart/RunningStatus/TotalVolumeCount/CompletedVolumeCount)一律不变
操作类型 :Get、Patch
操作权限 :BasicSetting(与现有一致性校验配置权限一致,不新增权限点)
应用场景 :Web 页面按固件能力渲染自动修复开关个数
GET 响应体 ConsisCheckInfo 新增属性 :
注1:列表内属性默认均支持 GET 操作。
注2:新增属性支持 PATCH,操作权限与存量一致性校验配置一致(BasicSetting)。
| 属性名 | 类型 | 示例/取值约束 | readonly | 易变属性 | 实现PATCH | 操作权限 | 描述 |
|---|---|---|---|---|---|---|---|
| AutoRepairMirrorRaidEnabled | [integer,null] | 1(0-关闭 1-开启);null 表示不支持(固件1.0/其他厂商卡),页面不渲染对应开关 | false | 否 | 是 | BasicSetting | 镜像 RAID(1/10) 组自动修复开关,仅固件2.0 |
| AutoRepairParityRaidEnabled | [integer,null] | 1(0-关闭 1-开启);null 同上 | false | 否 | 是 | BasicSetting | 校验 RAID(5/6/50/60) 组自动修复开关,仅固件2.0 |
Get响应示例(固件2.0,节选)
全局
AutoRepairEnabled= 两组 AND(示例:镜像组 1、校验组 0 → 全局 0,“有一个关即视为关”)
{
"ConsisCheckInfo": {
"Enabled": true,
"Period": 168,
"AutoRepairEnabled": 0,
"AutoRepairMirrorRaidEnabled": 1,
"AutoRepairParityRaidEnabled": 0,
"DelayForStart": 0
}
}
PATCH 请求体 ConsisCheckInfo 新增属性 :同上 2 个属性(Integer:0-关闭 1-开启;缺省表示不修改)
PATCH 行为约定(与 Redfish 侧一致) :
- Method 块统一改调 V2(Enabled:true→EnableV2、Enabled:false→Disable(不变)、无 Enabled→SetParametersV2),不再按固件类型分流(单一路径);分组字段与其他参数随同一方法一次下发,缺省字段按哨兵不修改
- 全局
AutoRepairEnabled由映射层 Statements 取值函数合成分组参数(显式分组优先;分组缺省且全局显式 → 填全局值;均缺省 → 0xFF);全局与显式分组矛盾 → 取值函数抛错返回参数冲突错误 - 固件1.0/其他厂商卡:由 storage 后端 V2 方法内部分流——分组参数全缺省时降级执行原 1.0 命令(行为与存量一致),分组参数显式给出返回属性不支持错误;映射层无固件类型感知
映射配置变更点 (interface_config/web_backend/mapping_config/System/Storage.json):
- Statements 新增 2 个分组字段取值函数(入参:全局 AutoRepairEnabled、对应分组显式值;逻辑:显式分组优先 → 全局填充缺省 → 均缺省 0xFF;矛盾抛错),沿用现有
ConsistencyCheckAutoRepairEnabled插件转换模式 - GET 响应体
ConsisCheckInfo组装新增 2 个字段(null 透传) - Method 块 Name 统一改为 EnableV2/SetParametersV2,Params 新增 2 个分组参数(上述取值函数);不使用 CallIf 固件分流
是否准备好AI预审
是
评审结论
(待评审)