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 <mikefcarlin@protonmail.com>
Change-Id: I2ca89e641b201c09b3d4db070eac6cc0c2cdec73
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452774
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Pawel Kaminski <pawelx.kaminski@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Mike Carlin 2019-04-26 10:30:50 -07:00 committed by Jim Harris
parent 67882ed76f
commit fb6fbf3256
7 changed files with 115 additions and 0 deletions

View File

@ -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

View File

@ -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)

View File

@ -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):

View File

@ -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]

View File

@ -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]

View File

@ -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]

44
test/spdkcli/raid.sh Executable file
View File

@ -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