issue链接
背景
目前Endpoint访问超时后仅会报错请求超时,无其他可定位信息,导致Endpoint访问不通,或返回非预期数据的场景下难以定界定位问题。
历史版本有调试命令trace_ncsi,用于跟踪ncsi over mctp报文数据。
现状:
mctpd组件缺少可追踪调试手段,无法确定是否发送报文,发送的报文是否正确以及是否收到响应报文,难以定界定位问题。
方案
提供在线调试命令,用于追踪指定Endpoint发送和接收的完整报文数据,并输出到在线调试终端,便于定界定位问题。
命令目的是设置Endpoint的跟踪标记,标记为true的Endpoint在发送数据前/收到数据后将报文数据打印到mdbctl终端。
sequenceDiagram
participant User as mdbctl
participant mctpd as mctpd组件
participant Endpoint as Endpoint
Note over User,Endpoint: 运行阶段
User->>mctpd: 打开报文跟踪
loop
User->>mctpd: 发送报文请求
mctpd-->>User: 返回完整请求报文数据
mctpd->>Endpoint: 发送报文
Endpoint-->>mctpd: 返回响应
mctpd-->>User: 返回完整响应报文数据
end
User->>mctpd: 关闭报文跟踪
决策点
1、在/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType路径下新增接口bmc.kepler.Release.Mctp,并新增方法TraceMessage。
2、mctpd组件新增mdbctl自定义命令tracemctp。
详细描述
1、新增资源协作接口bmc.kepler.Release.Mctp及方法
| 方法名称 | 变化类型 | 请求签名 | 响应签名 | 读写&权限 | 持久化 | 变化通知 | 接口说明 | 接口约束 |
|---|---|---|---|---|---|---|---|---|
| TraceMessage | 新增方法 | s | NA | DiagnoseMgmt | NA | NA | 跟踪指定Endpoint,打印Endpoint收/发完整报文数据。 请求参数: · Action:trace动作 start:跟踪Endpoint对象的收发报文数据 stop:停止跟踪Endpoint对象的收发报文数据 |
NA |
2、新增组件调测命令
Usage: tracemctp <ObjectName> <Action> 追踪BMC与指定Endpoint对象间的MCTP报文数据
| 参数名称 | 参数签名 | 参数说明 |
|---|---|---|
| ObjectName | s | Endpoint对象名. |
| Action | s | 追踪行为;start表示开始追踪;stop表示停止追踪 |
报文跟踪效果示例:
mds配置:
{
"Endpoint": {
"path": "/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType",
"interfaces": {
"bmc.kepler.Release.Mctp": {
"methods": {
"TraceMessage": {
"cmdName": "tracemctp",
"req": {
"Action": {
"baseType": "String",
"enum":[
"start",
"stop"
],
"displayDescription": "mctp trace action.start: start tracing mctp endpoint message data. stop: stop tracing mctp endpoint message data"
}
},
"displayDescription": "trace mctp endpoint message data."
}
}
}
}
}
}
评审结论
- 同意在/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType路径下新增资源协作接口bmc.kepler.Release.Mctp,并新增方法TraceMessage,用于追踪BMC与特定MCTP EP设备之间的MCTP报文数据,请求签名为s,无响应签名,权限DiagnoseMgmt;
- 同意mctpd组件新增mdbctl自定义调测命令tracemctp,参数说明参考详细描述;
遗留问题及确认结论
1、接口命名为什么不是Mctp.Trace,为什么要强调Endpoint
Endpoint最开始是为了声明这个是追踪Endpoint的mctp消息,经讨论这里并不需要强调,Endpoint已在对象名覆盖,接口名修改为bmc.kepler.Release.Mctp即可
2、displayDescription只能写在一行,需要确认是否需要优化,参数较多时,显示不友好
经确认,在定义displayDescription时可以通过 ‘\\n’ 实现换行
示例:displayDescription: “mctp trace action.\\n start: start tracing mctp endpoint message data.\\n stop: stop tracing mctp endpoint message data”


