Commit 6371dd64 authored by Tomasz Zawadzki's avatar Tomasz Zawadzki
Browse files

event/scheduler: do not accept params for scheduler without set_opts



Scheduler should not accept any parameters if set_opts is not implemented.
This looks awful, as the decode is done just to check if more opts were
provided. Yet it does work.

Signed-off-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I31c2385244557ac08de281553cad82eb3b3228ba
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/23958


Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent cc8a75c4
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -465,11 +465,18 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request,
{
	struct rpc_set_scheduler_ctx req = {NULL};
	struct spdk_scheduler *scheduler = NULL;
	bool has_custom_opts = false;
	int ret;

	ret = spdk_json_decode_object(params, rpc_set_scheduler_decoders,
				      SPDK_COUNTOF(rpc_set_scheduler_decoders),
				      &req);
	if (ret) {
		has_custom_opts = true;
		ret = spdk_json_decode_object_relaxed(params, rpc_set_scheduler_decoders,
						      SPDK_COUNTOF(rpc_set_scheduler_decoders),
						      &req);
	}
	if (ret) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
						 "Invalid parameters");
@@ -506,6 +513,9 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request,
	scheduler = spdk_scheduler_get();
	if (scheduler != NULL && scheduler->set_opts != NULL) {
		ret = scheduler->set_opts(params);
	} else if (has_custom_opts) {
		/* No custom options are allowed if set_opts are not implemented. */
		ret = -EINVAL;
	}
	if (ret) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_strerror(ret));
+3 −0
Original line number Diff line number Diff line
@@ -22,6 +22,9 @@ function scheduler_opts() {
	$rpc framework_set_scheduler static -p 424242
	[[ "$($rpc framework_get_scheduler | jq -r '. | select(.scheduler_name == "static") | .scheduler_period')" -eq 424242 ]]

	# It should not be possible to change settings that a scheduler does not support
	NOT $rpc framework_set_scheduler static --core-limit 42

	# Verify that the scheduler is changed and the non-default value is set
	$rpc framework_set_scheduler dynamic --core-limit 42
	[[ "$($rpc framework_get_scheduler | jq -r '. | select(.scheduler_name == "dynamic") | .core_limit')" -eq 42 ]]