diff --git a/autotest.sh b/autotest.sh index de9217f42..f12b05e1e 100755 --- a/autotest.sh +++ b/autotest.sh @@ -191,7 +191,7 @@ fi if [ $SPDK_TEST_LVOL -eq 1 ]; then timing_enter lvol - test_cases="1,50,51,52,53,100,101,102,250,251,252,253,255," + test_cases="1,50,51,52,53,100,101,102,150,200,201,250,251,252,253,254,255," test_cases+="300,301,450,451,452,550,600,601,650,651,652,654,655," test_cases+="700,701,800,801,802,803,804,10000" run_test ./test/lvol/lvol.sh --test-cases=$test_cases diff --git a/lib/bdev/lvol/vbdev_lvol_rpc.c b/lib/bdev/lvol/vbdev_lvol_rpc.c index 6b66d5ab3..d61a748c0 100644 --- a/lib/bdev/lvol/vbdev_lvol_rpc.c +++ b/lib/bdev/lvol/vbdev_lvol_rpc.c @@ -720,7 +720,7 @@ invalid: spdk_strerror(-lvolerrno)); } -static void __attribute__((unused)) +static void spdk_rpc_resize_lvol_bdev(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { @@ -769,8 +769,7 @@ invalid: free_rpc_resize_lvol_bdev(&req); } -/* Logical volume resize feature is disabled, as it is currently work in progress -SPDK_RPC_REGISTER("resize_lvol_bdev", spdk_rpc_resize_lvol_bdev) */ +SPDK_RPC_REGISTER("resize_lvol_bdev", spdk_rpc_resize_lvol_bdev) struct rpc_get_lvol_stores { char *uuid; diff --git a/scripts/rpc.py b/scripts/rpc.py index e1c37c0c2..2d010f1d2 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -536,15 +536,14 @@ if __name__ == "__main__": p.add_argument('new_name', help='new lvol name') p.set_defaults(func=rename_lvol_bdev) - # Logical volume resize feature is disabled, as it is currently work in progress - # @call_cmd - # def resize_lvol_bdev(args): - # rpc.lvol.resize_bdev(args.client, args) - # - # p = subparsers.add_parser('resize_lvol_bdev', help='Resize existing lvol bdev') - # p.add_argument('name', help='lvol bdev name') - # p.add_argument('size', help='new size in MiB for this bdev', type=int) - # p.set_defaults(func=resize_lvol_bdev) + @call_cmd + def resize_lvol_bdev(args): + rpc.lvol.resize_lvol_bdev(args.client, args) + + p = subparsers.add_parser('resize_lvol_bdev', help='Resize existing lvol bdev') + p.add_argument('name', help='lvol bdev name') + p.add_argument('size', help='new size in MiB for this bdev', type=int) + p.set_defaults(func=resize_lvol_bdev) @call_cmd def destroy_lvol_store(args): diff --git a/scripts/rpc/lvol.py b/scripts/rpc/lvol.py index 542711382..9863fecc5 100755 --- a/scripts/rpc/lvol.py +++ b/scripts/rpc/lvol.py @@ -52,14 +52,13 @@ def rename_lvol_bdev(client, args): return client.call('rename_lvol_bdev', params) -# Logical volume resize feature is disabled, as it is currently work in progress -# -# def resize_lvol_bdev(client, args): -# params = { -# 'name': args.name, -# 'size': args.size, -# } -# return client.call('resize_lvol_bdev', params) +def resize_lvol_bdev(client, args): + num_bytes = (args.size * 1024 * 1024) + params = { + 'name': args.name, + 'size': num_bytes, + } + return client.call('resize_lvol_bdev', params) def destroy_lvol_store(client, args): diff --git a/test/lvol/test_cases.py b/test/lvol/test_cases.py index 263ede86c..ee26cae32 100644 --- a/test/lvol/test_cases.py +++ b/test/lvol/test_cases.py @@ -386,22 +386,24 @@ class TestCases(object): fail_count = self.c.check_get_lvol_stores(base_name, uuid_store, self.cluster_size) # size is equal to one quarter of size malloc bdev - uuid_bdev = self.c.construct_lvol_bdev(uuid_store, - self.lbd_name, - self.total_size / 4) - fail_count += self.c.check_get_bdevs_methods(uuid_bdev, - self.total_size / 4) + size = self.total_size / 4 + uuid_bdev = self.c.construct_lvol_bdev(uuid_store, self.lbd_name, size) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, size) + # size is equal to half of size malloc bdev - self.c.resize_lvol_bdev(uuid_bdev, self.total_size / 2) - fail_count += self.c.check_get_bdevs_methods(uuid_bdev, - self.total_size / 2) + size = self.total_size / 2 + self.c.resize_lvol_bdev(uuid_bdev, size) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, size) + # size is smaller by 1 MB - self.c.resize_lvol_bdev(uuid_bdev, self.total_size - 1) - fail_count += self.c.check_get_bdevs_methods(uuid_bdev, - self.total_size - 1) + size = self.total_size - 1 + self.c.resize_lvol_bdev(uuid_bdev, size) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, size) + # size is equal 0 MiB - self.c.resize_lvol_bdev(uuid_bdev, 0) - fail_count += self.c.check_get_bdevs_methods(uuid_bdev, 0) + size = 0 + self.c.resize_lvol_bdev(uuid_bdev, size) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, size) self.c.delete_bdev(uuid_bdev) self.c.destroy_lvol_store(uuid_store) @@ -525,16 +527,23 @@ class TestCases(object): uuid_bdev = self.c.construct_lvol_bdev(uuid_store, self.lbd_name, size) - fail_count += self.c.check_get_bdevs_methods(uuid_bdev, - size) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, size) - # TODO: Improve resize_lvol_bdev tests to verify if bdev was actually - # correctly resized - fail_count += self.c.resize_lvol_bdev(uuid_bdev, size + 1) - fail_count += self.c.resize_lvol_bdev(uuid_bdev, size * 2) - fail_count += self.c.resize_lvol_bdev(uuid_bdev, size * 3) - fail_count += self.c.resize_lvol_bdev(uuid_bdev, (size * 4) - 1) - fail_count += self.c.resize_lvol_bdev(uuid_bdev, 0) + sz = size + 1 + self.c.resize_lvol_bdev(uuid_bdev, sz) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, sz) + sz = size * 2 + self.c.resize_lvol_bdev(uuid_bdev, sz) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, sz) + sz = size * 3 + self.c.resize_lvol_bdev(uuid_bdev, sz) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, sz) + sz = (size * 4) - 1 + self.c.resize_lvol_bdev(uuid_bdev, sz) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, sz) + sz = 0 + self.c.resize_lvol_bdev(uuid_bdev, sz) + fail_count += self.c.check_get_bdevs_methods(uuid_bdev, sz) self.c.destroy_lvol_store(uuid_store) if self.c.check_get_lvol_stores("", "", "") == 1: