同步属性机制背景
目前同步属性是基于信号+主动获取的方式来实现的,与引用属性的最大区别在于业务需不需要感知属性的变更,如果业务需要在属性变更后做一些处理,则使用同步属性。想在远端属性变化后自动触发本地属性的更新就用同步,引用是每次访问本地属性的时候会先去访问远端,在不访问的情况下,业务是不感知远端属性的更新的。引用是强依赖,同步是弱依赖。
一、CSR配置
1.同步属性配置
表示Connector_Exu_1的Presence属性同步自Scanner_Presence_1的Value属性。
"Connector_Exu_1": {
"Presence": "<=/Scanner_Presence_1.Value"
}2.表达式配置
表示CoolingRequirement_1_50的MonitoringValue属性同步源有两个:OpticalModule_0的TemperatureCelsius属性和OpticalModule_1的TemperatureCelsius属性。使用这两个值作为表达式输入可计算出CoolingRequirement_1_50的MonitoringValue属性值。
"CoolingRequirement_1_50": {
"MonitoringValue": "<=/OpticalModule_0.TemperatureCelsius; <=/OpticalModule_1.TemperatureCelsius |> expr($1 >= $2 ? $1 : $2)"
}3.@Default语法
由于同步属性是异步进行更新的,无法保证属性初始化时就能获取到远端的属性值,SR中提供@Default语法用于指定同步属性初始化无法获取远端值时同步属性的默认值。在使用同步语法时,建议要显示通过该语法指定默认值,避免由于源属性所在对象尚未上树,导致使用属性的默认值,进而触发误告警。
"Scanner_ECUSys3V1": {
"ScanEnabled": "<=/Scanner_PowerGdFlash.Value",
"@Default": {
"ScanEnabled": 1
}
}二、同步属性更新流程
1.同步属性初始化流程
1)整体流程
2)信号订阅流程
3)主动获取同步源流程
4)初始化时序图
2.通过属性变更信号更新流程
3.通过接口新增信号更新流程
4.使用本地缓存更新同步属性值流程
5.对象卸载时同步属性处理流程
三、注意事项
同步属性可以是资源树属性或私有属性,但同步源属性只能为资源树属性
同步源属性必须支持发送属性变更信号
同步属性支持自动类型转换
同步属性是异步进行更新的,同步源属性更新后并不能保证同步属性能够马上进行更新
同步属性是一种弱依赖,无法保证获取同步属性时同步源属性一定上树了
四、同步属性信息查询
1.通过busctl命令查询自发现分发的同步属性信息
例:busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/0101010D04 bmc.kepler.ObjectGroup GetObjects a{ss}s 0 network_adapter
2.一键收集日志sync_property_trace.log中记录同步源最近的更新记录
sync_property_trace.log位于dump_info/AppDump/组件名称目录下,这里以dump_info/AppDump/event下的sync_property_trace.log为例
五、同步属性常见问题
1.属性未同步
1)检查model.json中是否配置同步属性usage CSR
2)通过busctl命令查询自发现分发的同步属性信息是否正确 busctl --user call bmc.kepler.hwdiscovery /bmc/kepler/ObjectGroup/0101010D04 bmc.kepler.ObjectGroup GetObjects a{ss}s 0 network_adapter emits-change
3)检查mdb_interface配置,并查看同步源属性是否有emits-change标记
4)结合sync_property_trace.log日志查看同步属性的变更记录