diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index c87178254..7d91840ca 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -306,7 +306,7 @@ Example response: "decouple_parent_lvol_bdev", "inflate_lvol_bdev", "rename_lvol_bdev", - "clone_lvol_bdev", + "bdev_lvol_clone", "snapshot_lvol_bdev", "construct_lvol_bdev", "destroy_lvol_store", @@ -5026,7 +5026,7 @@ Example response: } ~~~ -## clone_lvol_bdev {#rpc_clone_lvol_bdev} +## bdev_lvol_clone {#rpc_bdev_lvol_clone} Create a logical volume based on a snapshot. @@ -5048,7 +5048,7 @@ Example request: ~~~ { "jsonrpc": "2.0" - "method": "clone_lvol_bdev", + "method": "bdev_lvol_clone", "id": 1, "params": { "snapshot_name": "cc8d7fdf-7865-4d1f-9fc6-35da8e368670", diff --git a/doc/lvol.md b/doc/lvol.md index ba59677c2..c637e59f5 100644 --- a/doc/lvol.md +++ b/doc/lvol.md @@ -133,7 +133,7 @@ snapshot_lvol_bdev [-h] lvol_name snapshot_name Create a snapshot with snapshot_name of a given lvol bdev. optional arguments: -h, --help show help -clone_lvol_bdev [-h] snapshot_name clone_name +bdev_lvol_clone [-h] snapshot_name clone_name Create a clone with clone_name of a given lvol snapshot. optional arguments: -h, --help show help diff --git a/module/bdev/lvol/vbdev_lvol_rpc.c b/module/bdev/lvol/vbdev_lvol_rpc.c index deff9030d..5c00074ae 100644 --- a/module/bdev/lvol/vbdev_lvol_rpc.c +++ b/module/bdev/lvol/vbdev_lvol_rpc.c @@ -483,25 +483,25 @@ cleanup: SPDK_RPC_REGISTER("snapshot_lvol_bdev", spdk_rpc_snapshot_lvol_bdev, SPDK_RPC_RUNTIME) -struct rpc_clone_lvol_bdev { +struct rpc_bdev_lvol_clone { char *snapshot_name; char *clone_name; }; static void -free_rpc_clone_lvol_bdev(struct rpc_clone_lvol_bdev *req) +free_rpc_bdev_lvol_clone(struct rpc_bdev_lvol_clone *req) { free(req->snapshot_name); free(req->clone_name); } -static const struct spdk_json_object_decoder rpc_clone_lvol_bdev_decoders[] = { - {"snapshot_name", offsetof(struct rpc_clone_lvol_bdev, snapshot_name), spdk_json_decode_string}, - {"clone_name", offsetof(struct rpc_clone_lvol_bdev, clone_name), spdk_json_decode_string, true}, +static const struct spdk_json_object_decoder rpc_bdev_lvol_clone_decoders[] = { + {"snapshot_name", offsetof(struct rpc_bdev_lvol_clone, snapshot_name), spdk_json_decode_string}, + {"clone_name", offsetof(struct rpc_bdev_lvol_clone, clone_name), spdk_json_decode_string, true}, }; static void -_spdk_rpc_clone_lvol_bdev_cb(void *cb_arg, struct spdk_lvol *lvol, int lvolerrno) +_spdk_rpc_bdev_lvol_clone_cb(void *cb_arg, struct spdk_lvol *lvol, int lvolerrno) { struct spdk_json_write_ctx *w; struct spdk_jsonrpc_request *request = cb_arg; @@ -521,17 +521,17 @@ invalid: } static void -spdk_rpc_clone_lvol_bdev(struct spdk_jsonrpc_request *request, +spdk_rpc_bdev_lvol_clone(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { - struct rpc_clone_lvol_bdev req = {}; + struct rpc_bdev_lvol_clone req = {}; struct spdk_bdev *bdev; struct spdk_lvol *lvol; SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "Cloning blob\n"); - if (spdk_json_decode_object(params, rpc_clone_lvol_bdev_decoders, - SPDK_COUNTOF(rpc_clone_lvol_bdev_decoders), + if (spdk_json_decode_object(params, rpc_bdev_lvol_clone_decoders, + SPDK_COUNTOF(rpc_bdev_lvol_clone_decoders), &req)) { SPDK_INFOLOG(SPDK_LOG_LVOL_RPC, "spdk_json_decode_object failed\n"); spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, @@ -553,13 +553,14 @@ spdk_rpc_clone_lvol_bdev(struct spdk_jsonrpc_request *request, goto cleanup; } - vbdev_lvol_create_clone(lvol, req.clone_name, _spdk_rpc_clone_lvol_bdev_cb, request); + vbdev_lvol_create_clone(lvol, req.clone_name, _spdk_rpc_bdev_lvol_clone_cb, request); cleanup: - free_rpc_clone_lvol_bdev(&req); + free_rpc_bdev_lvol_clone(&req); } -SPDK_RPC_REGISTER("clone_lvol_bdev", spdk_rpc_clone_lvol_bdev, SPDK_RPC_RUNTIME) +SPDK_RPC_REGISTER("bdev_lvol_clone", spdk_rpc_bdev_lvol_clone, SPDK_RPC_RUNTIME) +SPDK_RPC_REGISTER_ALIAS_DEPRECATED(bdev_lvol_clone, clone_lvol_bdev) struct rpc_rename_lvol_bdev { char *old_name; diff --git a/scripts/rpc.py b/scripts/rpc.py index 4f5ed15b1..8b522af2a 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -1184,15 +1184,16 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse p.add_argument('snapshot_name', help='lvol snapshot name') p.set_defaults(func=snapshot_lvol_bdev) - def clone_lvol_bdev(args): - print_json(rpc.lvol.clone_lvol_bdev(args.client, + def bdev_lvol_clone(args): + print_json(rpc.lvol.bdev_lvol_clone(args.client, snapshot_name=args.snapshot_name, clone_name=args.clone_name)) - p = subparsers.add_parser('clone_lvol_bdev', help='Create a clone of an lvol snapshot') + p = subparsers.add_parser('bdev_lvol_clone', aliases=['clone_lvol_bdev'], + help='Create a clone of an lvol snapshot') p.add_argument('snapshot_name', help='lvol snapshot name') p.add_argument('clone_name', help='lvol clone name') - p.set_defaults(func=clone_lvol_bdev) + p.set_defaults(func=bdev_lvol_clone) def rename_lvol_bdev(args): rpc.lvol.rename_lvol_bdev(args.client, diff --git a/scripts/rpc/lvol.py b/scripts/rpc/lvol.py index 16612873d..3df893571 100644 --- a/scripts/rpc/lvol.py +++ b/scripts/rpc/lvol.py @@ -1,3 +1,6 @@ +from .helpers import deprecated_alias + + def construct_lvol_store(client, bdev_name, lvs_name, cluster_sz=None, clear_method=None): """Construct a logical volume store. @@ -79,7 +82,8 @@ def snapshot_lvol_bdev(client, lvol_name, snapshot_name): return client.call('snapshot_lvol_bdev', params) -def clone_lvol_bdev(client, snapshot_name, clone_name): +@deprecated_alias('clone_lvol_bdev') +def bdev_lvol_clone(client, snapshot_name, clone_name): """Create a logical volume based on a snapshot. Args: @@ -93,7 +97,7 @@ def clone_lvol_bdev(client, snapshot_name, clone_name): 'snapshot_name': snapshot_name, 'clone_name': clone_name } - return client.call('clone_lvol_bdev', params) + return client.call('bdev_lvol_clone', params) def rename_lvol_bdev(client, old_name, new_name): diff --git a/test/json_config/json_config.sh b/test/json_config/json_config.sh index ffd87cf90..8f5d7795e 100755 --- a/test/json_config/json_config.sh +++ b/test/json_config/json_config.sh @@ -204,7 +204,7 @@ function create_bdev_subsystem_config() { tgt_rpc construct_lvol_bdev -l lvs_test lvol0 32 tgt_rpc construct_lvol_bdev -l lvs_test -t lvol1 32 tgt_rpc snapshot_lvol_bdev lvs_test/lvol0 snapshot0 - tgt_rpc clone_lvol_bdev lvs_test/snapshot0 clone0 + tgt_rpc bdev_lvol_clone lvs_test/snapshot0 clone0 expected_notifications+=( "bdev_register:$RE_UUID" diff --git a/test/lvol/rpc_commands_lib.py b/test/lvol/rpc_commands_lib.py index da820591b..c6482a7c3 100644 --- a/test/lvol/rpc_commands_lib.py +++ b/test/lvol/rpc_commands_lib.py @@ -219,9 +219,9 @@ class Commands_Rpc(object): output, rc = self.rpc.snapshot_lvol_bdev(bdev_name, snapshot_name) return rc - def clone_lvol_bdev(self, snapshot_name, clone_name): - print("INFO: RPC COMMAND clone_lvol_bdev") - output, rc = self.rpc.clone_lvol_bdev(snapshot_name, clone_name) + def bdev_lvol_clone(self, snapshot_name, clone_name): + print("INFO: RPC COMMAND bdev_lvol_clone") + output, rc = self.rpc.bdev_lvol_clone(snapshot_name, clone_name) return rc def inflate_lvol_bdev(self, clone_name): diff --git a/test/lvol/test_cases.py b/test/lvol/test_cases.py index 938c06c0c..331badbc6 100644 --- a/test/lvol/test_cases.py +++ b/test/lvol/test_cases.py @@ -1234,7 +1234,7 @@ class TestCases(object): snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) # Create clone of snapshot and check if it ends with success - fail_count += self.c.clone_lvol_bdev(self.lvs_name + "/" + snapshot_name, clone_name) + fail_count += self.c.bdev_lvol_clone(self.lvs_name + "/" + snapshot_name, clone_name) clone_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + clone_name) # Try to destroy snapshot with clones and check if it fails @@ -1296,7 +1296,7 @@ class TestCases(object): fail_count += self.c.snapshot_lvol_bdev(lvol_bdev['name'], snapshot_name) snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) - fail_count += self.c.clone_lvol_bdev(self.lvs_name + "/" + snapshot_name, clone_name) + fail_count += self.c.bdev_lvol_clone(self.lvs_name + "/" + snapshot_name, clone_name) clone_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + clone_name) fail_count += self.c.snapshot_lvol_bdev(clone_bdev['name'], snapshot_name2) @@ -1357,7 +1357,7 @@ class TestCases(object): fail_count += self.c.snapshot_lvol_bdev(lvol_bdev['name'], snapshot_name) snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) - fail_count += self.c.clone_lvol_bdev(self.lvs_name + "/" + snapshot_name, clone_name) + fail_count += self.c.bdev_lvol_clone(self.lvs_name + "/" + snapshot_name, clone_name) clone_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + clone_name) fail_count += self.c.snapshot_lvol_bdev(clone_bdev['name'], snapshot_name2) @@ -2378,19 +2378,19 @@ class TestCases(object): lvol_bdev = self.c.get_lvol_bdev_with_name(uuid_bdev) # Create clone of lvol bdev and check if it fails - rv = self.c.clone_lvol_bdev(lvol_bdev['name'], clone_name) + rv = self.c.bdev_lvol_clone(lvol_bdev['name'], clone_name) if rv == 0: print("ERROR: Creating clone of lvol bdev ended with unexpected success") fail_count += 1 # Create snapshot of lvol bdev fail_count += self.c.snapshot_lvol_bdev(lvol_bdev['name'], snapshot_name) # Create again clone of lvol bdev and check if it fails - rv = self.c.clone_lvol_bdev(lvol_bdev['name'], clone_name) + rv = self.c.bdev_lvol_clone(lvol_bdev['name'], clone_name) if rv == 0: print("ERROR: Creating clone of lvol bdev ended with unexpected success") fail_count += 1 # Create clone of snapshot and check if it ends with success - rv = self.c.clone_lvol_bdev(self.lvs_name + "/" + snapshot_name, clone_name) + rv = self.c.bdev_lvol_clone(self.lvs_name + "/" + snapshot_name, clone_name) if rv != 0: print("ERROR: Creating clone of snapshot ended with unexpected failure") fail_count += 1 @@ -2449,8 +2449,8 @@ class TestCases(object): fail_count += self.c.snapshot_lvol_bdev(lvol_bdev['name'], snapshot_name) snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) # Create two clones of created snapshot - fail_count += self.c.clone_lvol_bdev(snapshot_bdev['name'], clone_name0) - fail_count += self.c.clone_lvol_bdev(snapshot_bdev['name'], clone_name1) + fail_count += self.c.bdev_lvol_clone(snapshot_bdev['name'], clone_name0) + fail_count += self.c.bdev_lvol_clone(snapshot_bdev['name'], clone_name1) lvol_clone0 = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + clone_name0) fail_count += self.c.start_nbd_disk(lvol_clone0['name'], nbd_name[1]) @@ -2518,7 +2518,7 @@ class TestCases(object): snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) # Create clone of created snapshot - fail_count += self.c.clone_lvol_bdev(snapshot_bdev['name'], clone_name0) + fail_count += self.c.bdev_lvol_clone(snapshot_bdev['name'], clone_name0) # Get current bdevs configuration snapshot_bdev = self.c.get_lvol_bdev_with_name(self.lvs_name + "/" + snapshot_name) @@ -2874,7 +2874,7 @@ class TestCases(object): fail_count += self.run_fio_test(nbd_name0, 0, size, "write", "0xcc", 1) # Create clone of lvol set to read only - rv = self.c.clone_lvol_bdev(lvol_bdev['name'], clone_name) + rv = self.c.bdev_lvol_clone(lvol_bdev['name'], clone_name) if rv != 0: print("ERROR: Creating clone of snapshot ended with unexpected failure") fail_count += 1 diff --git a/test/nvmf/target/nvmf_lvol.sh b/test/nvmf/target/nvmf_lvol.sh index debe964d5..c21a14b84 100755 --- a/test/nvmf/target/nvmf_lvol.sh +++ b/test/nvmf/target/nvmf_lvol.sh @@ -51,7 +51,7 @@ sleep 1 # Perform some operations on the logical volume snapshot=$($rpc_py snapshot_lvol_bdev $lvol "MY_SNAPSHOT") $rpc_py resize_lvol_bdev $lvol $LVOL_BDEV_FINAL_SIZE -clone=$($rpc_py clone_lvol_bdev $snapshot "MY_CLONE") +clone=$($rpc_py bdev_lvol_clone $snapshot "MY_CLONE") $rpc_py inflate_lvol_bdev $clone # Wait for I/O to complete