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