From fb6fbf3256f65dd07a25afb7b23b597375fe61fa Mon Sep 17 00:00:00 2001 From: Mike Carlin Date: Fri, 26 Apr 2019 10:30:50 -0700 Subject: [PATCH] spdkcli: Add support for raid devices Adds support to spdkcli.py for raid devices via UIRaidBdev with functionality to construct and destroy raid bdevs. Information regarding the raid can be viewed via 'show_details' on a given pooled_device child in the tree. Signed-off-by: Mike Carlin Change-Id: I2ca89e641b201c09b3d4db070eac6cc0c2cdec73 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452774 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Pawel Kaminski Reviewed-by: Ben Walker --- autotest.sh | 3 ++ scripts/spdkcli/ui_node.py | 41 +++++++++++++++++ scripts/spdkcli/ui_root.py | 8 ++++ .../match_files/spdkcli_raid.test.match | 17 +++++++ .../match_files/spdkcli_vhost.test.match | 1 + .../match_files/spdkcli_virtio_pci.test.match | 1 + test/spdkcli/raid.sh | 44 +++++++++++++++++++ 7 files changed, 115 insertions(+) create mode 100644 test/spdkcli/match_files/spdkcli_raid.test.match create mode 100755 test/spdkcli/raid.sh diff --git a/autotest.sh b/autotest.sh index 98c32f0fe..949639c52 100755 --- a/autotest.sh +++ b/autotest.sh @@ -193,6 +193,9 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then if [ $SPDK_TEST_ISCSI -eq 1 ]; then run_test suite ./test/iscsi_tgt/iscsi_tgt.sh posix run_test suite ./test/spdkcli/iscsi.sh + + # Run raid spdkcli test under iSCSI since blockdev tests run on systems that can't run spdkcli yet + run_test suite test/spdkcli/raid.sh fi if [ $SPDK_TEST_BLOBFS -eq 1 ]; then diff --git a/scripts/spdkcli/ui_node.py b/scripts/spdkcli/ui_node.py index a8044cf82..30977650d 100644 --- a/scripts/spdkcli/ui_node.py +++ b/scripts/spdkcli/ui_node.py @@ -75,6 +75,7 @@ class UIBdevs(UINode): UIiSCSIBdev(self) UIVirtioBlkBdev(self) UIVirtioScsiBdev(self) + UIRaidBdev(self) class UILvolStores(UINode): @@ -819,3 +820,43 @@ class UIVhostTargetObj(UINode): class UIVhostLunDevObj(UINode): def __init__(self, name, parent): UINode.__init__(self, name, parent) + + +class UIRaidBdev(UIBdev): + def __init__(self, parent): + UIBdev.__init__(self, "raid_volume", parent) + + def delete(self, name): + self.get_root().destroy_raid_bdev(name=name) + + def ui_command_create(self, name, raid_level, base_bdevs, strip_size_kb): + """ + Creates a raid bdev of the provided base_bdevs + + Arguments: + name - raid bdev name + raid_level - raid level, supported values 0 + base_bdevs - base bdevs name, whitespace separated list in quotes + strip_size_kb - strip size of raid bdev in KB, supported values like 8, 16, 32, 64, 128, 256, etc + """ + base_bdevs_array = [] + for u in base_bdevs.strip().split(" "): + base_bdevs_array.append(u) + + raid_level = self.ui_eval_param(raid_level, "number", None) + strip_size_kb = self.ui_eval_param(strip_size_kb, "number", None) + + ret_name = self.get_root().construct_raid_bdev(name=name, + raid_level=raid_level, + base_bdevs=base_bdevs_array, + strip_size_kb=strip_size_kb) + self.shell.log.info(ret_name) + + def ui_command_delete(self, name): + """ + Deletes this raid bdev object + + Arguments: + name - raid bdev name + """ + self.delete(name) diff --git a/scripts/spdkcli/ui_root.py b/scripts/spdkcli/ui_root.py index 3c19adc95..3bd6c4b15 100644 --- a/scripts/spdkcli/ui_root.py +++ b/scripts/spdkcli/ui_root.py @@ -244,6 +244,14 @@ class UIRoot(UINode): response = rpc.vhost.remove_virtio_bdev(self.client, **kwargs) return response + @verbose + def construct_raid_bdev(self, **kwargs): + rpc.bdev.construct_raid_bdev(self.client, **kwargs) + + @verbose + def destroy_raid_bdev(self, **kwargs): + rpc.bdev.destroy_raid_bdev(self.client, **kwargs) + @verbose @is_method_available def get_virtio_scsi_devs(self): diff --git a/test/spdkcli/match_files/spdkcli_raid.test.match b/test/spdkcli/match_files/spdkcli_raid.test.match new file mode 100644 index 000000000..906c1717f --- /dev/null +++ b/test/spdkcli/match_files/spdkcli_raid.test.match @@ -0,0 +1,17 @@ +o- bdevs ..................................................................................................................... [...] + o- aio ................................................................................................................ [Bdevs: 0] + o- error .............................................................................................................. [Bdevs: 0] + o- iscsi .............................................................................................................. [Bdevs: 0] + o- logical_volume ..................................................................................................... [Bdevs: 0] + o- malloc ............................................................................................................. [Bdevs: 2] + | o- Malloc1 ................................................................................................ [Size=8.0M, Claimed] + | o- Malloc2 ................................................................................................ [Size=8.0M, Claimed] + o- null ............................................................................................................... [Bdevs: 0] + o- nvme ............................................................................................................... [Bdevs: 0] + o- pmemblk ............................................................................................................ [Bdevs: 0] + o- raid_volume ........................................................................................................ [Bdevs: 1] + | o- testraid .......................................................................................... [Size=16.0M, Not claimed] + o- rbd ................................................................................................................ [Bdevs: 0] + o- split_disk ......................................................................................................... [Bdevs: 0] + o- virtioblk_disk ..................................................................................................... [Bdevs: 0] + o- virtioscsi_disk .................................................................................................... [Bdevs: 0] diff --git a/test/spdkcli/match_files/spdkcli_vhost.test.match b/test/spdkcli/match_files/spdkcli_vhost.test.match index 19e4c2f04..2a8c3c738 100644 --- a/test/spdkcli/match_files/spdkcli_vhost.test.match +++ b/test/spdkcli/match_files/spdkcli_vhost.test.match @@ -23,6 +23,7 @@ o- / ........................................................................... | o- nvme ............................................................................................................. [Bdevs: 1] | | o- Nvme0n1 $(S) [Size=$(S), Claimed] | o- pmemblk .......................................................................................................... [Bdevs: 0] + | o- raid_volume ...................................................................................................... [Bdevs: 0] | o- rbd .............................................................................................................. [Bdevs: 0] | o- split_disk ....................................................................................................... [Bdevs: 4] | | o- Nvme0n1p0 $(S) [Size=$(FP)G, Not claimed] diff --git a/test/spdkcli/match_files/spdkcli_virtio_pci.test.match b/test/spdkcli/match_files/spdkcli_virtio_pci.test.match index 0eca06e1b..5caf84e56 100644 --- a/test/spdkcli/match_files/spdkcli_virtio_pci.test.match +++ b/test/spdkcli/match_files/spdkcli_virtio_pci.test.match @@ -9,6 +9,7 @@ o- bdevs ....................................................................... o- null ............................................................................................................... [Bdevs: 0] o- nvme ............................................................................................................... [Bdevs: 0] o- pmemblk ............................................................................................................ [Bdevs: 0] + o- raid_volume ........................................................................................................ [Bdevs: 0] o- rbd ................................................................................................................ [Bdevs: 0] o- split_disk ......................................................................................................... [Bdevs: 0] o- virtioblk_disk ..................................................................................................... [Bdevs: 1] diff --git a/test/spdkcli/raid.sh b/test/spdkcli/raid.sh new file mode 100755 index 000000000..135c01f20 --- /dev/null +++ b/test/spdkcli/raid.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -xe + +MATCH_FILE="spdkcli_raid.test" +SPDKCLI_BRANCH="/bdevs" +testdir=$(readlink -f $(dirname $0)) +. $testdir/common.sh + +timing_enter spdkcli_raid +trap 'on_error_exit;' ERR + +timing_enter run_spdk_tgt +run_spdk_tgt +timing_exit run_spdk_tgt + +timing_enter spdkcli_create_malloc +$spdkcli_job "'/bdevs/malloc create 8 512 Malloc1' 'Malloc1' True +'/bdevs/malloc create 8 512 Malloc2' 'Malloc2' True +" +timing_exit spdkcli_create_malloc + +timing_enter spdkcli_create_raid +$spdkcli_job "'/bdevs/raid_volume create testraid 0 \"Malloc1 Malloc2\" 4' 'testraid' True +" +timing_exit spdkcli_create_raid + +timing_enter spdkcli_check_match +check_match +timing_exit spdkcli_check_match + +timing_enter spdkcli_delete_raid +$spdkcli_job "'/bdevs/raid_volume delete testraid' '' True +" +timing_exit spdkcli_delete_raid + +timing_enter spdkcli_delete_malloc +$spdkcli_job "'/bdevs/malloc delete Malloc1' '' True +'/bdevs/malloc delete Malloc2' '' True +" +timing_exit spdkcli_delete_malloc + +killprocess $spdk_tgt_pid +timing_exit spdkcli_raid +report_test_completion spdk_cli