module/raid: bdev_raid_remove_base_bdev rpc

Signed-off-by: Krzysztof Smolinski <krzysztof.smolinski@intel.com>
Change-Id: I4829f6cd0c10bfcd2c6893cf9412fc974c4b338c
This commit is contained in:
Krzysztof Smolinski 2022-10-14 15:10:53 +02:00 committed by David Ko
parent cdf0959bc4
commit 6680fdf818
6 changed files with 110 additions and 1 deletions

View File

@ -10145,6 +10145,41 @@ Example response:
}
~~~
### bdev_raid_remove_base_bdev {#rpc_bdev_raid_remove_base_bdev}
Remove base bdev from existing raid bdev.
#### Parameters
Name | Optional | Type | Description
----------------------- | -------- | ----------- | -----------
name | Required | string | Base bdev name in RAID
#### Example
Example request:
~~~json
{
"jsonrpc": "2.0",
"method": "bdev_raid_remove_base_bdev",
"id": 1,
"params": {
"name": "Raid0"
}
}
~~~
Example response:
~~~json
{
"jsonrpc": "2.0",
"id": 1,
"result": true
}
~~~
## SPLIT
### bdev_split_create {#rpc_bdev_split_create}

View File

@ -1479,7 +1479,7 @@ raid_bdev_remove_base_bdev_on_suspended(struct raid_bdev *raid_bdev, void *ctx)
* 0 - success
* non zero - failure
*/
static int
int
raid_bdev_remove_base_bdev(struct spdk_bdev *base_bdev)
{
struct raid_bdev *raid_bdev;

View File

@ -215,6 +215,7 @@ const char *raid_bdev_level_to_str(enum raid_level level);
enum raid_bdev_state raid_bdev_str_to_state(const char *str);
const char *raid_bdev_state_to_str(enum raid_bdev_state state);
void raid_bdev_write_info_json(struct raid_bdev *raid_bdev, struct spdk_json_write_ctx *w);
int raid_bdev_remove_base_bdev(struct spdk_bdev *base_bdev);
/*
* RAID module descriptor

View File

@ -385,3 +385,56 @@ cleanup:
free(ctx);
}
SPDK_RPC_REGISTER("bdev_raid_delete", rpc_bdev_raid_delete, SPDK_RPC_RUNTIME)
/*
* Decoder object for RPC bdev_raid_remove_base_bdev
*/
static const struct spdk_json_object_decoder rpc_bdev_raid_remove_base_bdev_decoders[] = {
{"name", 0, spdk_json_decode_string},
};
/*
* brief:
* bdev_raid_remove_base_bdev function is the RPC for removing base bdev from a raid bdev.
* It takes base bdev name as input.
* params:
* request - pointer to json rpc request
* params - pointer to request parameters
* returns:
* none
*/
static void
rpc_bdev_raid_remove_base_bdev(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct spdk_bdev *bdev;
char *name = NULL;
int rc;
if (spdk_json_decode_object(params, rpc_bdev_raid_remove_base_bdev_decoders,
SPDK_COUNTOF(rpc_bdev_raid_remove_base_bdev_decoders),
&name)) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_PARSE_ERROR,
"spdk_json_decode_object failed");
return;
}
bdev = spdk_bdev_get_by_name(name);
if (bdev == NULL) {
spdk_jsonrpc_send_error_response_fmt(request, -ENODEV, "base bdev %s is not found in config", name);
goto cleanup;
}
rc = raid_bdev_remove_base_bdev(bdev);
if (rc != 0) {
spdk_jsonrpc_send_error_response_fmt(request, rc, "Failed to remove base bdev %s from raid bdev",
name);
goto cleanup;
}
spdk_jsonrpc_send_bool_response(request, true);
cleanup:
free(name);
}
SPDK_RPC_REGISTER("bdev_raid_remove_base_bdev", rpc_bdev_raid_remove_base_bdev, SPDK_RPC_RUNTIME)

View File

@ -444,6 +444,19 @@ def bdev_raid_delete(client, name):
return client.call('bdev_raid_delete', params)
def bdev_raid_remove_base_bdev(client, name):
"""Remove base bdev from existing raid bdev
Args:
name: base bdev name
Returns:
None
"""
params = {'name': name}
return client.call('bdev_raid_remove_base_bdev', params)
def bdev_aio_create(client, filename, name, block_size=None, readonly=False):
"""Construct a Linux AIO block device.

View File

@ -2111,6 +2111,13 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
p.add_argument('name', help='raid bdev name')
p.set_defaults(func=bdev_raid_delete)
def bdev_raid_remove_base_bdev(args):
rpc.bdev.bdev_raid_remove_base_bdev(args.client,
name=args.name)
p = subparsers.add_parser('bdev_raid_remove_base_bdev', help='Remove base bdev from existing raid bdev')
p.add_argument('name', help='base bdev name')
p.set_defaults(func=bdev_raid_remove_base_bdev)
# split
def bdev_split_create(args):
print_array(rpc.bdev.bdev_split_create(args.client,