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;
|
||||
|
||||
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_cleanup, %p name %s, state %u\n",
|
||||
raid_bdev, raid_bdev->bdev.name, raid_bdev->state);
|
||||
SPDK_DEBUGLOG(bdev_raid, "raid_bdev_cleanup, %p name %s, state %s\n",
|
||||
raid_bdev, raid_bdev->bdev.name, raid_bdev_state_to_str(raid_bdev->state));
|
||||
assert(raid_bdev->state != RAID_BDEV_STATE_ONLINE);
|
||||
|
||||
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 */
|
||||
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, "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_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);
|
||||
@ -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. */
|
||||
typedef enum raid_level raid_level_t;
|
||||
typedef enum raid_bdev_state raid_bdev_state_t;
|
||||
|
||||
raid_level_t
|
||||
raid_bdev_parse_raid_level(const char *str)
|
||||
raid_bdev_str_to_level(const char *str)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
@ -786,6 +797,37 @@ raid_bdev_level_to_str(enum raid_level level)
|
||||
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:
|
||||
* 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 max, new states should be added before this */
|
||||
RAID_BDEV_MAX
|
||||
/* raid bdev state max, new states should be added before this */
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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
|
||||
|
@ -65,6 +65,7 @@ rpc_bdev_raid_get_bdevs(struct spdk_jsonrpc_request *request,
|
||||
struct rpc_bdev_raid_get_bdevs req = {};
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct raid_bdev *raid_bdev;
|
||||
enum raid_bdev_state state;
|
||||
|
||||
if (spdk_json_decode_object(params, 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;
|
||||
}
|
||||
|
||||
if (!(strcmp(req.category, "all") == 0 ||
|
||||
strcmp(req.category, "online") == 0 ||
|
||||
strcmp(req.category, "configuring") == 0 ||
|
||||
strcmp(req.category, "offline") == 0)) {
|
||||
state = raid_bdev_str_to_state(req.category);
|
||||
if (state == RAID_BDEV_STATE_MAX && strcmp(req.category, "all") != 0) {
|
||||
spdk_jsonrpc_send_error_response(request, -EINVAL, spdk_strerror(EINVAL));
|
||||
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 */
|
||||
TAILQ_FOREACH(raid_bdev, &g_raid_bdev_list, global_link) {
|
||||
if (strcmp(req.category, "all") == 0 ||
|
||||
(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)) {
|
||||
if (raid_bdev->state == state || state == RAID_BDEV_STATE_MAX) {
|
||||
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);
|
||||
if (ret == 0 && str != NULL) {
|
||||
level = raid_bdev_parse_raid_level(str);
|
||||
level = raid_bdev_str_to_level(str);
|
||||
if (level == INVALID_RAID_LEVEL) {
|
||||
ret = -EINVAL;
|
||||
} else {
|
||||
|
@ -1906,10 +1906,10 @@ test_raid_level_conversions(void)
|
||||
{
|
||||
const char *raid_str;
|
||||
|
||||
CU_ASSERT(raid_bdev_parse_raid_level("abcd123") == INVALID_RAID_LEVEL);
|
||||
CU_ASSERT(raid_bdev_parse_raid_level("0") == RAID0);
|
||||
CU_ASSERT(raid_bdev_parse_raid_level("raid0") == RAID0);
|
||||
CU_ASSERT(raid_bdev_parse_raid_level("RAID0") == RAID0);
|
||||
CU_ASSERT(raid_bdev_str_to_level("abcd123") == INVALID_RAID_LEVEL);
|
||||
CU_ASSERT(raid_bdev_str_to_level("0") == RAID0);
|
||||
CU_ASSERT(raid_bdev_str_to_level("raid0") == RAID0);
|
||||
CU_ASSERT(raid_bdev_str_to_level("RAID0") == RAID0);
|
||||
|
||||
raid_str = raid_bdev_level_to_str(INVALID_RAID_LEVEL);
|
||||
CU_ASSERT(raid_str != NULL && strlen(raid_str) == 0);
|
||||
|
Loading…
Reference in New Issue
Block a user