其他分享
首页 > 其他分享> > spdk rpc.py 踩坑记

spdk rpc.py 踩坑记

作者:互联网

现象

spdk 程序启动之后,总是没法和后端定制的bdev 互通数据。出现下边的错误:

rpc.c: 181:spdk_rpc_listen: *ERROR*: RPC Unix domain socket path /var/tmp/spdk.sock in use. Specify another.
rpc.c:  72:spdk_rpc_initialize: *ERROR*: Unable to start RPC service at /var/tmp/spdk.sock
request:
{
  "level": "DEBUG",
  "method": "log_set_print_level",
  "req_id": 1
}
Got JSON-RPC error response
response:
{
  "code": -32601,
  "message": "Method not found"
}
request:
{
  "flag": "bdev",
  "method": "log_set_flag",
  "req_id": 1
}
Got JSON-RPC error response
response:
{
  "code": -32601,
  "message": "Method not found"
}

分析

总结spdk 程序交互和rpc 交互的方式,想起来两者主要通过socket 来实现的:

  1. spdk app启动的时候会指定socket:
./app/vhost/vhost -S /var/tmp -m 0x3f -r /var/tmp/spdk.conf.xqcljq.sock  2>&1 | tee vhost.log

否则默认用上面出错提示的socket: /var/tmp/spdk.sock

  1. rpc.py 里面也会指定1个默认的socket:
    在rpc.py ( scripts/rpc.py)里面,需要指定一个socket:
if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description='SPDK RPC command line interface')
    parser.add_argument('-s', dest='server_addr',
                        #help='RPC domain socket path or IP address', default='/var/tmp/spdk.sock')
                        help='RPC domain socket path or IP address', default='/var/tmp/spdk.conf.xqcljq.sock')

    ......................

解决方法

通过上面的分析可以知道:需要把所有的rpc.py 命令-r 指定的socket 和rpc.py脚本 里面默认的一致就可以了。

标签:tmp,坑记,socket,py,rpc,spdk,var,RPC
来源: https://blog.51cto.com/xiamachao/2773187