task_mgmt.get_task_obj获取不到task object

问题描述

成功调用bmc.kepler.Managers.BlackBox的DumpData方法收集黑盒日志,并返回任务id,现在我需要知道收集黑盒日志任务的进度及状态,怎样获取task对应的object?

代码如下:

日志打印:

image

环境信息

基于openubmc 2512_lts

~ ~ $ ipmcget -d version
------------------- openUBMC INFO -------------------
IPMC CPU: Hi1711
IPMI Version: 2.0
Active openUBMC Version: 1.17.10
Active openUBMC Build: 01
Active openUBMC Built: 14:33:07 Mar 27 2026
Backup openUBMC Version: 1.17.10
Available openUBMC Version: 1.00.16
Available openUBMC Build: 01
Active Uboot Version: 21.3.10.1 (09:53:00 Dec 30 2025)
Backup Uboot Version: 21.3.10.1 (09:53:00 Dec 30 2025)
Active Secure Bootloader Version: 21.3.10.1 (09:51:37 Dec 30 2025)
Backup Secure Bootloader Version: 21.3.10.1 (09:51:37 Dec 30 2025)
Active Secure Firmware Version: 21.3.10.1 (09:51:38 Dec 30 2025)
Backup Secure Firmware Version: 21.3.10.1 (09:51:38 Dec 30 2025)
Active BMCSDK Version: 5.12.00.01
----------------- Product INFO -----------------
Product ID: 0x0000
Product Name: Atlas 800I A3
Product Unique ID: 0x000000010302BF02
Active BIOS Version: (U75)21.23
Backup BIOS Version: 21.23

重现步骤

见问题描述

期望结果

能正常获取任务的对象并通过任务对象得到进度及状态

实际结果

获取不到任务对象

尝试过的解决方案

分析结论

这里获取不到应该是对应id的任务已经执行完退出了

@huangzhiyu 使用busctl收集黑盒子日志,任务执行失败了,但任务对象还是在资源数里面保留一段时间的:

image

查看id为1122151945的task对象,2026-04-11T02:05:14+00:00开始执行,结果报错,但在Sat Apr 11 02:11:34 CGP 2026这个时间点task对象依然保留,所以任务执行完任务对象不会立即销毁的。

get_task_obj这个方法只有创建任务的组件才能获取到对象,其他组件一般是通过代理对象来获取。

有相应资料吗?麻烦发一下

require ‘mc.mdb.task_mgmt’
local mdb = require ‘mc.mdb’
local obj = mdb.get_object(bus, path, ‘bmc.kepler.TaskService.Task’)

参数path是不是/bmc/kepler/Managers/1/BlackBox下创建的一个任务对象,但我用local rsp = blackbox_obj:DumpData(context.get_context_or_default(), ‘/tmp/blackbox.tar’)执行成功后/bmc/kepler/Managers/1/BlackBox下没有生成任务对象。

你之前不是生成过吗,是这个代码里哪里有报错吗

@huangzhiyu

local ok, blackbox_obj = pcall(mdb.get_object, bus,

    '/bmc/kepler/Managers/1/BlackBox',

    'bmc.kepler.Managers.BlackBox')

if not ok or blackbox_obj == nil then

return false

end
local rsp = blackbox_obj:DumpData(context.get_context_or_default(), ‘/tmp/blackbox.tar’)

能成功收集黑盒日志并且生成文件/tmp/blackbox.tar,返回的rsp里面只有一个TaskId,但/bmc/kepler/Managers/1/BlackBox下没有创建的任务对象,我需要知道的是调用 blackbox_obj:DumpData有没有创建任务对象,如果创建了任务对象怎么获取?

这份代码你调试一下就知道问题了。

参考你之前发的图,只要黑匣子的方法会创建资源树对象,就有对应的资源树路径,你把路径填到path里就行,bus一般就是组件打开的dbus总线。
local obj = mdb.get_object(bus, path, ‘bmc.kepler.TaskService.Task’)

@huangzhiyu 是25.12_lTS这个版本在我们这里跑有问题,收集黑盒日志创建不了任务对象,已经开会找你们的人定位了


现在是什么情况?你之前的帖子里不是有对象吗,怎么现在又没有对象了?

@huangzhiyu 用busctl命令执行是有任务对象的,但任务对象查询结果是执行失败,

而使用网页或者redfish执行下载黑盒日志就没有任务对象。

使用以下代码收集黑盒日志也没有任务对象:

local ok, blackbox_obj = pcall(mdb.get_object, bus,

        '/bmc/kepler/Managers/1/BlackBox',

        'bmc.kepler.Managers.BlackBox')

if not ok or blackbox_obj == nil then

    error(base_msg.InternalError())

    return lua_nil

end



local log_file = '/tmp/blackbox.tar'

local rsp = blackbox_obj:DumpData(context.get_context_or_default(), log_file)

if type(rsp) \~= 'table' or type(rsp.TaskId) \~= 'number' then

    error(base_msg.InternalError())

    return lua_nil

end

行,我本地试试