【已评审】Endpoint新增调试时打印报文功能

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."
                    }
                }
            }
        }
    }
}

评审结论

  1. 同意在/bmc/kepler/Systems/:SystemId/Mctp/Endpoint/:Id/:MsgType路径下新增资源协作接口bmc.kepler.Release.Mctp,并新增方法TraceMessage,用于追踪BMC与特定MCTP EP设备之间的MCTP报文数据,请求签名为s,无响应签名,权限DiagnoseMgmt;
  2. 同意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”

1、背景介绍清楚,说明要解决的具体问题以及解决方法
2、流程图有误,没有从用户角度介绍清楚输出mctp报文的跟踪过程
3、新增方法的名称、参数以及高级命名的命名、命令描述,参数描述都需要补充完整

已修改

1、补充历史版本提供的调试命令能力
2、bmc.kepler.Release.Endpoint 接口为什么没有包含Mctp命名空间?
3、TraceMctpMsg资源协作接口不需要指定MctpMsg,本身已经在对应接口下了,调试命名的名称才需要tracemctp
4、补充调试命令的输出效果以及对于可定位性的提升和价值。