背景
根据客户要求,硬盘背板上硬盘的整机丝印需要根据内置M.2盘数量动态后移,多硬盘背板场景下硬盘槽位号需要从0开始编码且连续。例如:只有一个M.2硬盘时,M.2的槽位号为0,前置硬盘背板上的硬盘整机丝印从1开始;如果有2个M.2硬盘,M.2硬盘的槽位号为0和1,前置背板上的槽位号为2~x。
关联ISSUE
整体方案
-
在platform.sr的HddBackPlanes对象中新增
DriveSlotAllocationEnabled属性作为硬盘槽位号全局编码特性开关 -
general_hardware启动后等待HddBackPlanes对象上树,读取特性开关:
-
开关关闭:根据上次状态直接设置DriveSlotAllocationStatus,不等待HardwareComplete
-
开关开启:等待硬件自发现HardwareComplete信号(带超时),确保所有硬盘背板对象分发完成
-
general_hardware匹配DriveStartSlotConfig进行起始槽位编码,综合判断本次/上次开关状态和配置变化情况,设置DriveSlotAllocationStatus(0/1/2/3),并持久化本次状态
-
storage组件监听DriveSlotAllocationStatus变化,根据状态值决定Drive对象的Id计算方式和是否清除持久化数据,在before_add_object阶段完成Id更新(保证Id编码在Drive对象上树之前完成,避免Drive持久化数据冲突)
-
storage组件调用pcie_device组件提供的设置PcieAddrInfo的SlotID接口更新SlotID,bios组件监听更新丝印
评审点
评审点1: 新增path: /bmc/kepler/Chassis/:ChassisId/HddBackPlanes,在该路径下新增interface: bmc.kepler.Chassis.HddBackPlanes,新增属性DriveSlotAllocationStatus用于标记硬盘起始槽位编码状态
详细描述
资源信息
资源path:/bmc/kepler/Chassis/:ChassisId/HddBackPlanes(新增)
资源interface:bmc.kepler.Chassis.HddBackPlanes(新增)
变化类型:新增对象及属性
应用场景:硬盘起始槽位编码状态标记,用于general_hardware与storage组件间的协同
持久化类型:不持久化
操作权限:Read: ReadOnly
属性定义
| 变更类型 | 属性名称 | 签名 | 只读 | 变化通知 | 属性描述 | 访问权限 | 属性来源 | 持久化类型 | 变更影响 |
|---|---|---|---|---|---|---|---|---|---|
| 新增 | DriveSlotAllocationStatus | y | True | True | 表示硬盘起始槽位编码状态:255=初始化状态(等待编码决策);0=使用默认值,不清除持久化;1=编码成功,不清除持久化;2=使用默认值,清除持久化;3=编码成功,清除持久化 | Read: ReadOnly | general_hardware根据硬盘起始槽位编码情况更新 | 不持久化 | 无影响 |
评审结论
评审点一、 遗留问题闭环后同意新增path: /bmc/kepler/Chassis/:ChassisId/HddBackPlanes,在该path下新增interface: bmc.kepler.Chassis.HddBackPlanes,在该interface下新增属性DriveSlotAllocationStatus
遗留问题
1、属性是否区分多主机;
结论:属性不区分主机,已修改新增属性到Chassis接口下
2、属性名称中Encoded容易产生误解,需要优化;
结论:已修改属性名称为DriveSlotAllocationStatus
3、属性涉及所有硬盘背板,不能挂在单个实例下面,资源树名称需要优化
结论:已修改资源树接口名称为bmc.kepler.Chassis.HddBackPlanes

