module/raid: convert state enum to/from string
Use the string value instead of int in raid_bdev json info. Rename raid_bdev_parse_raid_level() to match raid_bdev_str_to_state(). Change-Id: I135269fe6de0746e661828cb1d36514b082011bd Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15308 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Community-CI: Mellanox Build Bot
This commit is contained in:
parent
27e85f520b
commit
46ff15a658
@ -167,8 +167,8 @@ raid_bdev_cleanup(struct raid_bdev *raid_bdev)
|
|||||||
{
|
{
|
||||||
struct raid_base_bdev_info *base_info;
|
struct raid_base_bdev_info *base_info;
|
||||||
|
|
||||||
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_cleanup, %p name %s, state %u\n",
|
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_cleanup, %p name %s, state %s\n",
|
||||||
raid_bdev, raid_bdev->bdev.name, raid_bdev->state);
|
raid_bdev, raid_bdev->bdev.name, raid_bdev_state_to_str(raid_bdev->state));
|
||||||
assert(raid_bdev->state != RAID_BDEV_STATE_ONLINE);
|
assert(raid_bdev->state != RAID_BDEV_STATE_ONLINE);
|
||||||
|
|
||||||
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
RAID_FOR_EACH_BASE_BDEV(raid_bdev, base_info) {
|
||||||
@ -626,7 +626,7 @@ raid_bdev_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
|
|||||||
/* Dump the raid bdev configuration related information */
|
/* Dump the raid bdev configuration related information */
|
||||||
spdk_json_write_named_object_begin(w, "raid");
|
spdk_json_write_named_object_begin(w, "raid");
|
||||||
spdk_json_write_named_uint32(w, "strip_size_kb", raid_bdev->strip_size_kb);
|
spdk_json_write_named_uint32(w, "strip_size_kb", raid_bdev->strip_size_kb);
|
||||||
spdk_json_write_named_uint32(w, "state", raid_bdev->state);
|
spdk_json_write_named_string(w, "state", raid_bdev_state_to_str(raid_bdev->state));
|
||||||
spdk_json_write_named_string(w, "raid_level", raid_bdev_level_to_str(raid_bdev->level));
|
spdk_json_write_named_string(w, "raid_level", raid_bdev_level_to_str(raid_bdev->level));
|
||||||
spdk_json_write_named_uint32(w, "num_base_bdevs", raid_bdev->num_base_bdevs);
|
spdk_json_write_named_uint32(w, "num_base_bdevs", raid_bdev->num_base_bdevs);
|
||||||
spdk_json_write_named_uint32(w, "num_base_bdevs_discovered", raid_bdev->num_base_bdevs_discovered);
|
spdk_json_write_named_uint32(w, "num_base_bdevs_discovered", raid_bdev->num_base_bdevs_discovered);
|
||||||
@ -753,11 +753,22 @@ static struct {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
const char *name;
|
||||||
|
enum raid_bdev_state value;
|
||||||
|
} g_raid_state_names[] = {
|
||||||
|
{ "online", RAID_BDEV_STATE_ONLINE },
|
||||||
|
{ "configuring", RAID_BDEV_STATE_CONFIGURING },
|
||||||
|
{ "offline", RAID_BDEV_STATE_OFFLINE },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
/* We have to use the typedef in the function declaration to appease astyle. */
|
/* We have to use the typedef in the function declaration to appease astyle. */
|
||||||
typedef enum raid_level raid_level_t;
|
typedef enum raid_level raid_level_t;
|
||||||
|
typedef enum raid_bdev_state raid_bdev_state_t;
|
||||||
|
|
||||||
raid_level_t
|
raid_level_t
|
||||||
raid_bdev_parse_raid_level(const char *str)
|
raid_bdev_str_to_level(const char *str)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
@ -786,6 +797,37 @@ raid_bdev_level_to_str(enum raid_level level)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
raid_bdev_state_t
|
||||||
|
raid_bdev_str_to_state(const char *str)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
assert(str != NULL);
|
||||||
|
|
||||||
|
for (i = 0; g_raid_state_names[i].name != NULL; i++) {
|
||||||
|
if (strcasecmp(g_raid_state_names[i].name, str) == 0) {
|
||||||
|
return g_raid_state_names[i].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return RAID_BDEV_STATE_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
raid_bdev_state_to_str(enum raid_bdev_state state)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; g_raid_state_names[i].name != NULL; i++) {
|
||||||
|
if (g_raid_state_names[i].value == state) {
|
||||||
|
return g_raid_state_names[i].name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(false);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* brief:
|
* brief:
|
||||||
* raid_bdev_fini_start is called when bdev layer is starting the
|
* raid_bdev_fini_start is called when bdev layer is starting the
|
||||||
|
@ -35,8 +35,8 @@ enum raid_bdev_state {
|
|||||||
*/
|
*/
|
||||||
RAID_BDEV_STATE_OFFLINE,
|
RAID_BDEV_STATE_OFFLINE,
|
||||||
|
|
||||||
/* raid bdev max, new states should be added before this */
|
/* raid bdev state max, new states should be added before this */
|
||||||
RAID_BDEV_MAX
|
RAID_BDEV_STATE_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -167,8 +167,10 @@ int raid_bdev_create(const char *name, uint32_t strip_size, uint8_t num_base_bde
|
|||||||
void raid_bdev_delete(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn, void *cb_ctx);
|
void raid_bdev_delete(struct raid_bdev *raid_bdev, raid_bdev_destruct_cb cb_fn, void *cb_ctx);
|
||||||
int raid_bdev_add_base_device(struct raid_bdev *raid_bdev, const char *name, uint8_t slot);
|
int raid_bdev_add_base_device(struct raid_bdev *raid_bdev, const char *name, uint8_t slot);
|
||||||
struct raid_bdev *raid_bdev_find_by_name(const char *name);
|
struct raid_bdev *raid_bdev_find_by_name(const char *name);
|
||||||
enum raid_level raid_bdev_parse_raid_level(const char *str);
|
enum raid_level raid_bdev_str_to_level(const char *str);
|
||||||
const char *raid_bdev_level_to_str(enum raid_level level);
|
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);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RAID module descriptor
|
* RAID module descriptor
|
||||||
|
@ -65,6 +65,7 @@ rpc_bdev_raid_get_bdevs(struct spdk_jsonrpc_request *request,
|
|||||||
struct rpc_bdev_raid_get_bdevs req = {};
|
struct rpc_bdev_raid_get_bdevs req = {};
|
||||||
struct spdk_json_write_ctx *w;
|
struct spdk_json_write_ctx *w;
|
||||||
struct raid_bdev *raid_bdev;
|
struct raid_bdev *raid_bdev;
|
||||||
|
enum raid_bdev_state state;
|
||||||
|
|
||||||
if (spdk_json_decode_object(params, rpc_bdev_raid_get_bdevs_decoders,
|
if (spdk_json_decode_object(params, rpc_bdev_raid_get_bdevs_decoders,
|
||||||
SPDK_COUNTOF(rpc_bdev_raid_get_bdevs_decoders),
|
SPDK_COUNTOF(rpc_bdev_raid_get_bdevs_decoders),
|
||||||
@ -74,10 +75,8 @@ rpc_bdev_raid_get_bdevs(struct spdk_jsonrpc_request *request,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(strcmp(req.category, "all") == 0 ||
|
state = raid_bdev_str_to_state(req.category);
|
||||||
strcmp(req.category, "online") == 0 ||
|
if (state == RAID_BDEV_STATE_MAX && strcmp(req.category, "all") != 0) {
|
||||||
strcmp(req.category, "configuring") == 0 ||
|
|
||||||
strcmp(req.category, "offline") == 0)) {
|
|
||||||
spdk_jsonrpc_send_error_response(request, -EINVAL, spdk_strerror(EINVAL));
|
spdk_jsonrpc_send_error_response(request, -EINVAL, spdk_strerror(EINVAL));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -87,10 +86,7 @@ rpc_bdev_raid_get_bdevs(struct spdk_jsonrpc_request *request,
|
|||||||
|
|
||||||
/* Get raid bdev list based on the category requested */
|
/* Get raid bdev list based on the category requested */
|
||||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
||||||
if (strcmp(req.category, "all") == 0 ||
|
if (raid_bdev->state == state || state == RAID_BDEV_STATE_MAX) {
|
||||||
(strcmp(req.category, "configuring") == 0 && raid_bdev->state == RAID_BDEV_STATE_CONFIGURING) ||
|
|
||||||
(strcmp(req.category, "online") == 0 && raid_bdev->state == RAID_BDEV_STATE_ONLINE) ||
|
|
||||||
(strcmp(req.category, "offline") == 0 && raid_bdev->state == RAID_BDEV_STATE_OFFLINE)) {
|
|
||||||
spdk_json_write_string(w, raid_bdev->bdev.name);
|
spdk_json_write_string(w, raid_bdev->bdev.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,7 +157,7 @@ decode_raid_level(const struct spdk_json_val *val, void *out)
|
|||||||
|
|
||||||
ret = spdk_json_decode_string(val, &str);
|
ret = spdk_json_decode_string(val, &str);
|
||||||
if (ret == 0 && str != NULL) {
|
if (ret == 0 && str != NULL) {
|
||||||
level = raid_bdev_parse_raid_level(str);
|
level = raid_bdev_str_to_level(str);
|
||||||
if (level == INVALID_RAID_LEVEL) {
|
if (level == INVALID_RAID_LEVEL) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1906,10 +1906,10 @@ test_raid_level_conversions(void)
|
|||||||
{
|
{
|
||||||
const char *raid_str;
|
const char *raid_str;
|
||||||
|
|
||||||
CU_ASSERT(raid_bdev_parse_raid_level("abcd123") == INVALID_RAID_LEVEL);
|
CU_ASSERT(raid_bdev_str_to_level("abcd123") == INVALID_RAID_LEVEL);
|
||||||
CU_ASSERT(raid_bdev_parse_raid_level("0") == RAID0);
|
CU_ASSERT(raid_bdev_str_to_level("0") == RAID0);
|
||||||
CU_ASSERT(raid_bdev_parse_raid_level("raid0") == RAID0);
|
CU_ASSERT(raid_bdev_str_to_level("raid0") == RAID0);
|
||||||
CU_ASSERT(raid_bdev_parse_raid_level("RAID0") == RAID0);
|
CU_ASSERT(raid_bdev_str_to_level("RAID0") == RAID0);
|
||||||
|
|
||||||
raid_str = raid_bdev_level_to_str(INVALID_RAID_LEVEL);
|
raid_str = raid_bdev_level_to_str(INVALID_RAID_LEVEL);
|
||||||
CU_ASSERT(raid_str != NULL && strlen(raid_str) == 0);
|
CU_ASSERT(raid_str != NULL && strlen(raid_str) == 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user