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 来实现的:
- 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
- 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