非天池/非热插拔机型无硬盘在位信号

机型:920系列模组ATX机型
现象:BMC无法从CPLD获取硬盘在位信号,不在sr里写死Drive在位状态,无法进行后续storage代码流程。如果写死Drive在位,会在Web上显示sr配的所有在位的硬盘,与实际插入硬盘数量不符
尝试在webui去根据有无信息进行筛选,发现web显示硬盘数量根据Drive对象在位显示之后才去填充数据,在拿到数据之后根据有无数据作为硬盘是否在位来筛选则有web显示硬盘数量不正确的空窗期
请问有没有办法处理硬盘在位?另外 V2 做过一款机型,也是没有CPLD传硬盘在位信号,但是web有显示那个sata盘的信息

可以通过Drive对象,结合业务逻辑手动置位:Presence 属性

web页面显示哪些硬盘即是通过:Drive对象的Presence决定的

对于不在位的盘,需要在业务代码中进行配置。

意思是,sr里drive对象还是写默认在位,然后在storage组件获取到硬盘信息时判断有无信息,无信息的硬盘模仿function c_drive:set_presence(presence)之类的函数更新硬盘状态属性为不在位吗?这样不会导致web有空窗期吗,storage组件代码获取信息会在web起来之后

如果要避免空窗期,你需要在c_drive:init里面对硬盘在位情况进行控制,因为正常走sr加载是否
在位也是从c_drive:init进来的,所以理论上不会存在空窗期。

硬盘在位情况的控制确实可以参考: function c_drive:set_presence(presence)

c_drive:init()函数应该只在drive对象创建时执行一次,不会在如 handler_pass_through_drive.lua 之类获取到硬盘信息的代码后再次执行。目前没有cpld传的在位信号情况下,只想到可以通过判断bma传的硬盘信息某些字段有无来判断实际硬盘在位,这个应该在 drive_object.lua 定时任务里插入,比如 function c_drive:update_presence() ,而不是init()中插入吧?

目前在任务中插入判断和设置,初步验证情况是可行的,就是不清楚会不会带来其他影响

充分验证一下:
复位场景;
上下电场景;
硬盘插拔场景;
换盘场景;
如有问题,可以再发帖子。当前问题如解决,可以讲该问题关闭。多谢

在update_presence中通过序列号等字段判断信息,初始硬盘在位,无信息更新硬盘不在位,确实会引入新的问题:

1.Raid下的硬盘被设置为了不在位,不显示硬盘及硬盘信息;

2.log_presence会在硬盘在位状态变化时记录硬盘插入/拔出的操作日志,产生误报。