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:
parent
cdf0959bc4
commit
6680fdf818
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user