From 2bb70da9c7969683be9724456a041964c6c6fb2d Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Wed, 24 Oct 2018 14:45:27 -0700 Subject: [PATCH] spdkcli: add an nvmf transport object Change-Id: Iba6312db5144910f231cff8d31627fd580656777 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/430642 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- scripts/spdkcli/ui_node_nvmf.py | 52 ++++++++++++++++ scripts/spdkcli/ui_root.py | 27 ++++++++ .../match_files/spdkcli_nvmf.test.match | 62 ++++++++++--------- .../match_files/spdkcli_vhost.test.match | 7 ++- 4 files changed, 115 insertions(+), 33 deletions(-) diff --git a/scripts/spdkcli/ui_node_nvmf.py b/scripts/spdkcli/ui_node_nvmf.py index 71b69367c..0d2808c4d 100644 --- a/scripts/spdkcli/ui_node_nvmf.py +++ b/scripts/spdkcli/ui_node_nvmf.py @@ -10,6 +10,58 @@ class UINVMf(UINode): def refresh(self): self._children = set([]) UINVMfSubsystems(self) + UINVMfTransports(self) + + +class UINVMfTransports(UINode): + def __init__(self, parent): + UINode.__init__(self, "transport", parent) + self.refresh() + + def refresh(self): + self._children = set([]) + for transport in self.get_root().get_nvmf_transports(): + UINVMfTransport(transport, self) + + def ui_command_create(self, trtype, max_queue_depth=None, max_qpairs_per_ctrlr=None, in_capsule_data_size=None, + max_io_size=None, io_unit_size=None, max_aq_depth=None): + """Create a transport with given parameters + + Arguments: + trtype - Example: 'RDMA'. + max_queue_depth - Optional parameter. Integer, max value 65535. + max_qpairs_per_ctrlr - Optional parameter. 16 bit Integer, max value 65535. + in_capsule_data_size - Optional parameter. 32 bit Integer, max value 4294967295 + max_io_size - Optional parameter. 32 bit integer, max value 4294967295 + io_unit_size - Optional parameter. 32 bit integer, max value 4294967295 + max_aq_depth - Optional parameter. 32 bit integer, max value 4294967295 + """ + max_queue_depth = self.ui_eval_param(max_queue_depth, "number", None) + max_qpairs_per_ctrlr = self.ui_eval_param(max_qpairs_per_ctrlr, "number", None) + in_capsule_data_size = self.ui_eval_param(in_capsule_data_size, "number", None) + max_io_size = self.ui_eval_param(max_io_size, "number", None) + io_unit_size = self.ui_eval_param(io_unit_size, "number", None) + max_aq_depth = self.ui_eval_param(max_aq_depth, "number", None) + try: + self.get_root().create_nvmf_transport(trtype=trtype, + max_queue_depth=max_queue_depth, + max_qpairs_per_ctrlr=max_qpairs_per_ctrlr, + in_capsule_data_size=in_capsule_data_size, + max_io_size=max_io_size, + io_unit_size=io_unit_size, + max_aq_depth=max_aq_depth) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.refresh() + + def summary(self): + return "Transports: %s" % len(self.children), None + + +class UINVMfTransport(UINode): + def __init__(self, transport, parent): + UINode.__init__(self, transport.trtype, parent) + self.transport = transport class UINVMfSubsystems(UINode): diff --git a/scripts/spdkcli/ui_root.py b/scripts/spdkcli/ui_root.py index b0527d9ba..e1f9461ab 100644 --- a/scripts/spdkcli/ui_root.py +++ b/scripts/spdkcli/ui_root.py @@ -15,6 +15,7 @@ class UIRoot(UINode): self.current_bdevs = [] self.current_lvol_stores = [] self.current_vhost_ctrls = [] + self.current_nvmf_transports = [] self.current_nvmf_subsystems = [] self.set_rpc_target(s) self.verbose = False @@ -271,6 +272,20 @@ class UIRoot(UINode): def set_vhost_controller_coalescing(self, **kwargs): rpc.vhost.set_vhost_controller_coalescing(self.client, **kwargs) + @verbose + def create_nvmf_transport(self, **kwargs): + rpc.nvmf.nvmf_create_transport(self.client, **kwargs) + + def list_nvmf_transports(self): + if self.is_init: + self.current_nvmf_transports = rpc.nvmf.get_nvmf_transports(self.client) + + def get_nvmf_transports(self): + if self.is_init: + self.list_nvmf_transports() + for transport in self.current_nvmf_transports: + yield NvmfTransport(transport) + def list_nvmf_subsystems(self): if self.is_init: self.current_nvmf_subsystems = rpc.nvmf.get_nvmf_subsystems(self.client) @@ -466,6 +481,18 @@ class VhostCtrlr(object): setattr(self, i, ctrlr_info[i]) +class NvmfTransport(object): + def __init__(self, transport_info): + """ + All class attributes are set based on what information is received + from get_nvmf_transport RPC call. + # TODO: Document in docstring parameters which describe bdevs. + # TODO: Possible improvement: JSON schema might be used here in future + """ + for i in transport_info.keys(): + setattr(self, i, transport_info[i]) + + class NvmfSubsystem(object): def __init__(self, subsystem_info): """ diff --git a/test/spdkcli/match_files/spdkcli_nvmf.test.match b/test/spdkcli/match_files/spdkcli_nvmf.test.match index 95b36f64a..951c192b9 100644 --- a/test/spdkcli/match_files/spdkcli_nvmf.test.match +++ b/test/spdkcli/match_files/spdkcli_nvmf.test.match @@ -1,32 +1,34 @@ o- nvmf ...................................................................................................................... [...] o- subsystem ..................................................................................................... [Subsystems: 4] - o- nqn.2014-08.org.nvmexpress.discovery ......................................................... [st=Discovery, Allow any host] - | o- hosts .......................................................................................................... [Hosts: 0] - | o- listen_addresses ........................................................................................... [Addresses: 0] - o- nqn.2014-08.org.spdk:cnode1 ...................................................... [sn=$(S), st=NVMe, Allow any host] - | o- hosts .......................................................................................................... [Hosts: 1] - | | o- nqn.2014-08.org.spdk:cnode2 ....................................................................................... [...] - | o- listen_addresses ........................................................................................... [Addresses: 3] - | | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] - | | o- $(N).$(N).$(N).$(N):4261 $(S) [RDMA] - | | o- $(N).$(N).$(N).$(N):4262 $(S) [RDMA] - | o- namespaces ................................................................................................ [Namespaces: 4] - | o- Malloc3 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc3, 1] - | o- Malloc4 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc4, 2] - | o- Malloc5 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc5, 3] - | o- Malloc6 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc6, 4] - o- nqn.2014-08.org.spdk:cnode2 ...................................................... [sn=$(S), st=NVMe, Allow any host] - | o- hosts .......................................................................................................... [Hosts: 0] - | o- listen_addresses ........................................................................................... [Addresses: 1] - | | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] - | o- namespaces ................................................................................................ [Namespaces: 1] - | o- Malloc2 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc2, 1] - o- nqn.2014-08.org.spdk:cnode3 ...................................................... [sn=$(S), st=NVMe, Allow any host] - o- hosts .......................................................................................................... [Hosts: 2] - | o- nqn.2014-08.org.spdk:cnode1 ....................................................................................... [...] - | o- nqn.2014-08.org.spdk:cnode2 ....................................................................................... [...] - o- listen_addresses ........................................................................................... [Addresses: 2] - | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] - | o- $(N).$(N).$(N).$(N):4261 $(S) [RDMA] - o- namespaces ................................................................................................ [Namespaces: 1] - o- Malloc1 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc1, 1] + | o- nqn.2014-08.org.nvmexpress.discovery ......................................................... [st=Discovery, Allow any host] + | | o- hosts .......................................................................................................... [Hosts: 0] + | | o- listen_addresses ........................................................................................... [Addresses: 0] + | o- nqn.2014-08.org.spdk:cnode1 ...................................................... [sn=$(S), st=NVMe, Allow any host] + | | o- hosts .......................................................................................................... [Hosts: 1] + | | | o- nqn.2014-08.org.spdk:cnode2 ....................................................................................... [...] + | | o- listen_addresses ........................................................................................... [Addresses: 3] + | | | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] + | | | o- $(N).$(N).$(N).$(N):4261 $(S) [RDMA] + | | | o- $(N).$(N).$(N).$(N):4262 $(S) [RDMA] + | | o- namespaces ................................................................................................ [Namespaces: 4] + | | o- Malloc3 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc3, 1] + | | o- Malloc4 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc4, 2] + | | o- Malloc5 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc5, 3] + | | o- Malloc6 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc6, 4] + | o- nqn.2014-08.org.spdk:cnode2 ...................................................... [sn=$(S), st=NVMe, Allow any host] + | | o- hosts .......................................................................................................... [Hosts: 0] + | | o- listen_addresses ........................................................................................... [Addresses: 1] + | | | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] + | | o- namespaces ................................................................................................ [Namespaces: 1] + | | o- Malloc2 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc2, 1] + | o- nqn.2014-08.org.spdk:cnode3 ...................................................... [sn=$(S), st=NVMe, Allow any host] + | o- hosts .......................................................................................................... [Hosts: 2] + | | o- nqn.2014-08.org.spdk:cnode1 ....................................................................................... [...] + | | o- nqn.2014-08.org.spdk:cnode2 ....................................................................................... [...] + | o- listen_addresses ........................................................................................... [Addresses: 2] + | | o- $(N).$(N).$(N).$(N):4260 $(S) [RDMA] + | | o- $(N).$(N).$(N).$(N):4261 $(S) [RDMA] + | o- namespaces ................................................................................................ [Namespaces: 1] + | o- Malloc1 .............................................................. [$(X)-$(X)-$(X)-$(X)-$(X), Malloc1, 1] + o- transport ..................................................................................................... [Transports: 1] + o- RDMA .................................................................................................................. [...] diff --git a/test/spdkcli/match_files/spdkcli_vhost.test.match b/test/spdkcli/match_files/spdkcli_vhost.test.match index a1ed8dc7c..842a5c14c 100644 --- a/test/spdkcli/match_files/spdkcli_vhost.test.match +++ b/test/spdkcli/match_files/spdkcli_vhost.test.match @@ -53,9 +53,10 @@ o- / ........................................................................... | o- lvs ................................................................................................ [Size=$(FP)M, Free=$(FP)M] o- nvmf .................................................................................................................... [...] | o- subsystem ................................................................................................... [Subsystems: 1] - | o- nqn.2014-08.org.nvmexpress.discovery ....................................................... [st=Discovery, Allow any host] - | o- hosts ........................................................................................................ [Hosts: 0] - | o- listen_addresses ......................................................................................... [Addresses: 0] + | | o- nqn.2014-08.org.nvmexpress.discovery ....................................................... [st=Discovery, Allow any host] + | | o- hosts ........................................................................................................ [Hosts: 0] + | | o- listen_addresses ......................................................................................... [Addresses: 0] + | o- transport ................................................................................................... [Transports: 0] o- vhost ................................................................................................................... [...] o- block ................................................................................................................. [...] | o- vhost_blk1 $(S) [$(S)]