bdev/rpc: make get_bdevs/config "name" params optional

The whole params object is already optional, but making the parameter
optional as well allows the specification of an empty object for params
to work.

Some JSON-RPC clients make it more difficult to omit the params object
entirely; see issue #303.

Change-Id: If0ac4ebfba33fd2c85f729d2f1109e4d0e47aa3b
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/411740
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Daniel Verkamp 2018-05-18 08:55:43 -07:00
parent aac1f5f934
commit 75896c2510

View File

@ -119,7 +119,7 @@ free_rpc_get_bdevs(struct rpc_get_bdevs *r)
} }
static const struct spdk_json_object_decoder rpc_get_bdevs_decoders[] = { static const struct spdk_json_object_decoder rpc_get_bdevs_decoders[] = {
{"name", offsetof(struct rpc_get_bdevs, name), spdk_json_decode_string}, {"name", offsetof(struct rpc_get_bdevs, name), spdk_json_decode_string, true},
}; };
static void static void
@ -130,28 +130,22 @@ spdk_rpc_get_bdevs(struct spdk_jsonrpc_request *request,
struct spdk_json_write_ctx *w; struct spdk_json_write_ctx *w;
struct spdk_bdev *bdev = NULL; struct spdk_bdev *bdev = NULL;
if (params != NULL) { if (params && spdk_json_decode_object(params, rpc_get_bdevs_decoders,
if (spdk_json_decode_object(params, rpc_get_bdevs_decoders, SPDK_COUNTOF(rpc_get_bdevs_decoders),
SPDK_COUNTOF(rpc_get_bdevs_decoders), &req)) {
&req)) { SPDK_ERRLOG("spdk_json_decode_object failed\n");
SPDK_ERRLOG("spdk_json_decode_object failed\n"); goto invalid;
}
if (req.name) {
bdev = spdk_bdev_get_by_name(req.name);
if (bdev == NULL) {
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
goto invalid; goto invalid;
} else {
if (req.name == NULL) {
SPDK_ERRLOG("missing name param\n");
goto invalid;
}
bdev = spdk_bdev_get_by_name(req.name);
if (bdev == NULL) {
SPDK_ERRLOG("bdev '%s' does not exist\n", req.name);
goto invalid;
}
free_rpc_get_bdevs(&req);
} }
} }
free_rpc_get_bdevs(&req);
w = spdk_jsonrpc_begin_result(request); w = spdk_jsonrpc_begin_result(request);
if (w == NULL) { if (w == NULL) {
return; return;
@ -191,7 +185,7 @@ free_rpc_get_bdevs_config(struct rpc_get_bdevs_config *r)
} }
static const struct spdk_json_object_decoder rpc_dump_bdevs_config_decoders[] = { static const struct spdk_json_object_decoder rpc_dump_bdevs_config_decoders[] = {
{"name", offsetof(struct rpc_get_bdevs_config, name), spdk_json_decode_string}, {"name", offsetof(struct rpc_get_bdevs_config, name), spdk_json_decode_string, true},
}; };
static void static void