1. 新增以下条目:
G.CHK.B11 资源消耗大的高频日志打印应当先判断日志级别
在高频日志打印中如果存在cjson.encode、table.concat等资源消耗大的操作,会对BMC性能造成一定影响。可以通过判断当前的日志级别来避免不必要的资源消耗操作
【示例】
-- 如果当前日志级别小于INFO,则不会进入分支执行 cjson.encode
if log:getLevel() >= log.INFO then
log:info('RefVolumes:%s RefDrives:%s.', cjson.encode(array_obj.RefVolumes),
cjson.encode(array_obj.RefDrives))
end
G.DBS.B04 禁止变更已持久化的枚举属性的取值范围
如果已持久化的枚举属性的取值范围发生变更,BMC版本升降级都可能会出现从数据库中加载未定义的枚举值的场景,此时会由于校验不通过而导致加载失败。
G.DBS.B05 禁止通过路径访问数据库
允许通过路径访问数据库则默许了本组件可以访问其他组件管理的数据库,这可能会造成多线程或多进程并行访问数据库的场景,最终导致数据库出现异常。开发者应当重新设计代码方案以避免这种场景
G.SEC.LEA.B02 资源的申请和释放必须成对
以下为openUBMC框架封装的资源申请释放常用Lua接口:
- 数据库的预处理语句与销毁预处理语句
local vm = db:prepare('SELECT COUNT(*) FROM t_record')
...
vm:finalize()
- 空表的申请与释放语句
local table_cache = require 'mc.table_cache'
local tbl_cache = table_cache.new()
-- 申请一个空表
local data = tbl_cache:allocate()
...
-- 释放这个表
tbl_cache:deallocate(data)