From 2cb6391545b798595d64c16205e546f94c1aa3e5 Mon Sep 17 00:00:00 2001 From: Karol Latecki Date: Fri, 13 Jul 2018 14:08:16 +0200 Subject: [PATCH] spdkcli: add try-except guards to calls Catch expcetions thrown by rpc.client properly. Solved issue with errors not being displayed properly when using python2. Change-Id: I7f0823b2fda7e0e0b6e957de769ae5e10315b446 Signed-off-by: Karol Latecki Reviewed-on: https://review.gerrithub.io/419225 Tested-by: SPDK CI Jenkins Reviewed-by: Pawel Kaminski Reviewed-by: Ben Walker Reviewed-by: Jim Harris Chandler-Test-Pool: SPDK Automated Test System --- scripts/spdkcli/ui_node.py | 274 +++++++++++++++++++++++++------------ 1 file changed, 187 insertions(+), 87 deletions(-) diff --git a/scripts/spdkcli/ui_node.py b/scripts/spdkcli/ui_node.py index 3a2909165..f82554c7e 100644 --- a/scripts/spdkcli/ui_node.py +++ b/scripts/spdkcli/ui_node.py @@ -1,5 +1,6 @@ from configshell_fb import ConfigNode, ExecutionError from uuid import UUID +from rpc.client import JSONRPCException import json @@ -94,7 +95,11 @@ class UILvolStores(UINode): cluster_size = self.ui_eval_param(cluster_size, "number", None) - self.get_root().create_lvol_store(lvs_name=name, bdev_name=bdev_name, cluster_sz=cluster_size) + try: + self.get_root().create_lvol_store(lvs_name=name, bdev_name=bdev_name, cluster_sz=cluster_size) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -135,16 +140,20 @@ class UIBdev(UINode): Arguments: name - Is a unique identifier of the bdev to be deleted - UUID number or name alias. """ - self.get_root().delete_bdev(name=name) + try: + self.get_root().delete_bdev(name=name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() def ui_command_get_bdev_iostat(self, name=None): - if name is None: - ret = self.get_root().get_bdevs_iostat() - else: + try: ret = self.get_root().get_bdevs_iostat(name=name) - self.shell.log.info(json.dumps(ret, indent=2)) + self.shell.log.info(json.dumps(ret, indent=2)) + except JSONRPCException as e: + self.shell.log.error(e.message) def ui_command_split_bdev(self, base_bdev, split_count, split_size_mb=None): """ @@ -159,10 +168,14 @@ class UIBdev(UINode): split_count = self.ui_eval_param(split_count, "number", None) split_size_mb = self.ui_eval_param(split_size_mb, "number", None) - ret_name = self.get_root().split_bdev(base_bdev=base_bdev, - split_count=split_count, - split_size_mb=split_size_mb) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().split_bdev(base_bdev=base_bdev, + split_count=split_count, + split_size_mb=split_size_mb) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.parent.refresh() self.refresh() @@ -172,7 +185,12 @@ class UIBdev(UINode): Args: base_bdev: name of previously split bdev """ - self.get_root().destruct_split_bdev(base_bdev=base_bdev) + + try: + self.get_root().destruct_split_bdev(base_bdev=base_bdev) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.parent.refresh() self.refresh() @@ -200,10 +218,14 @@ class UIMallocBdev(UIBdev): size = self.ui_eval_param(size, "number", None) block_size = self.ui_eval_param(block_size, "number", None) - ret_name = self.get_root().create_malloc_bdev(num_blocks=size * 1024 * 1024 // block_size, - block_size=block_size, - name=name, uuid=uuid) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_malloc_bdev(num_blocks=size * 1024 * 1024 // block_size, + block_size=block_size, + name=name, uuid=uuid) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -214,7 +236,10 @@ class UIMallocBdev(UIBdev): Arguments: name - Is a unique identifier of the malloc bdev to be deleted - UUID number or name alias. """ - self.get_root().delete_malloc_bdev(name=name) + try: + self.get_root().delete_malloc_bdev(name=name) + except JSONRPCException as e: + self.shell.log.error(e.message) self.get_root().refresh() self.refresh() @@ -237,10 +262,14 @@ class UIAIOBdev(UIBdev): block_size = self.ui_eval_param(block_size, "number", None) - ret_name = self.get_root().create_aio_bdev(name=name, - block_size=int(block_size), - filename=filename) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_aio_bdev(name=name, + block_size=int(block_size), + filename=filename) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -273,10 +302,14 @@ class UILvolBdev(UIBdev): size *= (1024 * 1024) thin_provision = self.ui_eval_param(thin_provision, "bool", False) - ret_uuid = self.get_root().create_lvol_bdev(lvol_name=name, size=size, - lvs_name=lvs_name, uuid=uuid, - thin_provision=thin_provision) - self.shell.log.info(ret_uuid) + try: + ret_uuid = self.get_root().create_lvol_bdev(lvol_name=name, size=size, + lvs_name=lvs_name, uuid=uuid, + thin_provision=thin_provision) + self.shell.log.info(ret_uuid) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -292,10 +325,14 @@ class UINvmeBdev(UIBdev): self.shell.log.error("Using RDMA transport type." "Please provide arguments for adrfam, trsvcid and subnqn.") - ret_name = self.get_root().create_nvme_bdev(name=name, trtype=trtype, - traddr=traddr, adrfam=adrfam, - trsvcid=trsvcid, subnqn=subnqn) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_nvme_bdev(name=name, trtype=trtype, + traddr=traddr, adrfam=adrfam, + trsvcid=trsvcid, subnqn=subnqn) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -320,10 +357,14 @@ class UINullBdev(UIBdev): block_size = self.ui_eval_param(block_size, "number", None) num_blocks = size * 1024 * 1024 // block_size - ret_name = self.get_root().create_null_bdev(num_blocks=num_blocks, - block_size=block_size, - name=name, uuid=uuid) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_null_bdev(num_blocks=num_blocks, + block_size=block_size, + name=name, uuid=uuid) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -340,7 +381,11 @@ class UIErrorBdev(UIBdev): base_name - base bdev name on top of which error bdev will be created. """ - self.get_root().create_error_bdev(base_name=base_name) + try: + self.get_root().create_error_bdev(base_name=base_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -359,21 +404,34 @@ class UIPmemBdev(UIBdev): block_size = self.ui_eval_param(block_size, "number", None) num_blocks = int((total_size * 1024 * 1024) / block_size) - self.get_root().create_pmem_pool(pmem_file=pmem_file, - num_blocks=num_blocks, - block_size=block_size) + try: + self.get_root().create_pmem_pool(pmem_file=pmem_file, + num_blocks=num_blocks, + block_size=block_size) + except JSONRPCException as e: + self.shell.log.error(e.message) def ui_command_delete_pmem_pool(self, pmem_file): - self.get_root().delete_pmem_pool(pmem_file=pmem_file) + try: + self.get_root().delete_pmem_pool(pmem_file=pmem_file) + except JSONRPCException as e: + self.shell.log.error(e.message) def ui_command_info_pmem_pool(self, pmem_file): - ret = self.get_root().delete_pmem_pool(pmem_file=pmem_file) - self.shell.log.info(ret) + try: + ret = self.get_root().delete_pmem_pool(pmem_file=pmem_file) + self.shell.log.info(ret) + except JSONRPCException as e: + self.shell.log.error(e.message) def ui_command_create(self, pmem_file, name): - ret_name = self.get_root().create_pmem_bdev(pmem_file=pmem_file, - name=name) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_pmem_bdev(pmem_file=pmem_file, + name=name) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -385,11 +443,15 @@ class UIRbdBdev(UIBdev): def ui_command_create(self, pool_name, rbd_name, block_size, name=None): block_size = self.ui_eval_param(block_size, "number", None) - ret_name = self.get_root().create_rbd_bdev(pool_name=pool_name, - rbd_name=rbd_name, - block_size=block_size, - name=name) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_rbd_bdev(pool_name=pool_name, + rbd_name=rbd_name, + block_size=block_size, + name=name) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -409,10 +471,14 @@ class UIiSCSIBdev(UIBdev): Example: iscsi://127.0.0.1:3260/iqn.2018-06.org.spdk/0. initiator_iqn - IQN to use for initiating connection with the target. """ - ret_name = self.get_root().create_iscsi_bdev(name=name, - url=url, - initiator_iqn=initiator_iqn) - self.shell.log.info(ret_name) + try: + ret_name = self.get_root().create_iscsi_bdev(name=name, + url=url, + initiator_iqn=initiator_iqn) + self.shell.log.info(ret_name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -423,7 +489,11 @@ class UIiSCSIBdev(UIBdev): Arguments: name - name of the iscsi bdev to be deleted. """ - self.get_root().delete_iscsi_bdev(name=name) + try: + self.get_root().delete_iscsi_bdev(name=name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -438,14 +508,18 @@ class UIVirtioBlkBdev(UIBdev): vq_count = self.ui_eval_param(vq_count, "number", None) vq_size = self.ui_eval_param(vq_size, "number", None) - ret = self.get_root().create_virtio_dev(name=name, - trtype=trtype, - traddr=traddr, - dev_type="blk", - vq_count=vq_count, - vq_size=vq_size) + try: + ret = self.get_root().create_virtio_dev(name=name, + trtype=trtype, + traddr=traddr, + dev_type="blk", + vq_count=vq_count, + vq_size=vq_size) + + self.shell.log.info(ret) + except JSONRPCException as e: + self.shell.log.error(e.message) - self.shell.log.info(ret) self.get_root().refresh() self.refresh() @@ -465,19 +539,27 @@ class UIVirtioScsiBdev(UIBdev): vq_count = self.ui_eval_param(vq_count, "number", None) vq_size = self.ui_eval_param(vq_size, "number", None) - ret = self.get_root().create_virtio_dev(name=name, - trtype=trtype, - traddr=traddr, - dev_type="scsi", - vq_count=vq_count, - vq_size=vq_size) + try: + ret = self.get_root().create_virtio_dev(name=name, + trtype=trtype, + traddr=traddr, + dev_type="scsi", + vq_count=vq_count, + vq_size=vq_size) + + self.shell.log.info(ret) + except JSONRPCException as e: + self.shell.log.error(e.message) - self.shell.log.info(ret) self.get_root().refresh() self.refresh() def ui_command_delete(self, name): - self.get_root().remove_virtio_scsi_bdev(name=name) + try: + self.get_root().remove_virtio_scsi_bdev(name=name) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -605,10 +687,14 @@ class UIVhostBlk(UIVhost): readonly - Whether controller should be read only or not. Default: False. """ - ret_name = self.get_root().create_vhost_blk_controller(ctrlr=name, - dev_name=bdev, - cpumask=cpumask, - readonly=bool(readonly)) + try: + self.get_root().create_vhost_blk_controller(ctrlr=name, + dev_name=bdev, + cpumask=cpumask, + readonly=bool(readonly)) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -632,8 +718,12 @@ class UIVhostScsi(UIVhost): cpumask - Optional. Integer to specify mask of CPUs to use. Default: 1. """ - ret_name = self.get_root().create_vhost_scsi_controller(ctrlr=name, - cpumask=cpumask) + try: + self.get_root().create_vhost_scsi_controller(ctrlr=name, + cpumask=cpumask) + except JSONRPCException as e: + self.shell.log.error(e.message) + self.get_root().refresh() self.refresh() @@ -651,9 +741,13 @@ class UIVhostCtrl(UINode): def ui_command_set_coalescing(self, delay_base_us, iops_threshold): delay_base_us = self.ui_eval_param(delay_base_us, "number", None) iops_threshold = self.ui_eval_param(iops_threshold, "number", None) - self.get_root().set_vhost_controller_coalescing(ctrlr=self.ctrlr.ctrlr, - delay_base_us=delay_base_us, - iops_threshold=iops_threshold) + + try: + self.get_root().set_vhost_controller_coalescing(ctrlr=self.ctrlr.ctrlr, + delay_base_us=delay_base_us, + iops_threshold=iops_threshold) + except JSONRPCException as e: + self.shell.log.error(e.message) class UIVhostScsiCtrlObj(UIVhostCtrl): @@ -669,11 +763,14 @@ class UIVhostScsiCtrlObj(UIVhostCtrl): Arguments: target_num - Integer identifier of target node to delete. """ - self.get_root().remove_vhost_scsi_target(ctrlr=self.ctrlr.ctrlr, - scsi_target_num=int(target_num)) - for ctrlr in self.get_root().get_vhost_ctrlrs("scsi"): - if ctrlr.ctrlr == self.ctrlr.ctrlr: - self.ctrlr = ctrlr + try: + self.get_root().remove_vhost_scsi_target(ctrlr=self.ctrlr.ctrlr, + scsi_target_num=int(target_num)) + for ctrlr in self.get_root().get_vhost_ctrlrs("scsi"): + if ctrlr.ctrlr == self.ctrlr.ctrlr: + self.ctrlr = ctrlr + except JSONRPCException as e: + self.shell.log.error(e.message) self.refresh() self.get_root().refresh() @@ -688,13 +785,16 @@ class UIVhostScsiCtrlObj(UIVhostCtrl): target_num - Integer identifier of target node to modify. bdev - Which bdev to add as LUN. """ + try: + self.get_root().add_vhost_scsi_lun(ctrlr=self.ctrlr.ctrlr, + scsi_target_num=int(target_num), + bdev_name=bdev_name) + for ctrlr in self.get_root().get_vhost_ctrlrs("scsi"): + if ctrlr.ctrlr == self.ctrlr.ctrlr: + self.ctrlr = ctrlr + except JSONRPCException as e: + self.shell.log.error(e.message) - self.get_root().add_vhost_scsi_lun(ctrlr=self.ctrlr.ctrlr, - scsi_target_num=int(target_num), - bdev_name=bdev_name) - for ctrlr in self.get_root().get_vhost_ctrlrs("scsi"): - if ctrlr.ctrlr == self.ctrlr.ctrlr: - self.ctrlr = ctrlr self.refresh() def summary(self):