【待评审】支持自研RAID卡一致性校验适配不同RAID固件

背景

自研 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

整体方案

资源协作接口:

  1. 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 的全局字段由映射层合成为分组参数下发。

评审点

资源协作接口

  1. 变更 bmc.kepler.Systems.Storage.Controller.ConsistencyCheck:新增 2 个按级别修复属性与 2 个 V2 方法(EnableV2/SetParametersV2)

Redfish接口

  1. Storage 资源 OEM VolumeConsistencyCheckConfig 新增 2 个按级别自动修复属性

Web接口

  1. 一致性校验配置 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预审

是

评审结论

(待评审)

遗留问题