Commit f7239999 authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Jim Harris
Browse files

event/app: enable JSON config with delay



Delete arbitrary limitation disallowing users from starting SPDK
applications with JSON provided config file and subsystem
initialization delay activated (--wait-for-rpc).

Add a new script with functional test of the delay + JSON
initialization.

Change-Id: I4b1ddad82a1bc810bbf7c3a099de3e522e54d03e
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21195


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 8ca6dbcd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@

## v24.05: (Upcoming Release)

### event

SPDK applications can now start with `--wait-for-rpc` and JSON configuration provided at the same time.

### init

Function `spdk_subsystem_init_from_json_config` is deprecated and will be removed in 24.09 release.
+0 −5
Original line number Diff line number Diff line
@@ -1322,11 +1322,6 @@ spdk_app_parse_args(int argc, char **argv, struct spdk_app_opts *opts,
		}
	}

	if (opts->json_config_file && opts->delay_subsystem_init) {
		SPDK_ERRLOG("JSON configuration file can't be used together with --wait-for-rpc.\n");
		goto out;
	}

	retval = SPDK_APP_PARSE_ARGS_SUCCESS;
out:
	if (retval != SPDK_APP_PARSE_ARGS_SUCCESS) {
+4 −0
Original line number Diff line number Diff line
@@ -53,6 +53,10 @@ function json_config_test_shutdown_app() {
	echo "SPDK $app shutdown done"
}

function tgt_rpc() {
	$rootdir/scripts/rpc.py -s "${app_socket[target]}" "$@"
}

on_error_exit() {
	set -x
	set +e
+0 −4
Original line number Diff line number Diff line
@@ -33,10 +33,6 @@ declare -A app_socket=([target]='/var/tmp/spdk_tgt.sock' [initiator]='/var/tmp/s
declare -A app_params=([target]='-m 0x1 -s 1024' [initiator]='-m 0x2 -g -u -s 1024')
declare -A configs_path=([target]="$rootdir/spdk_tgt_config.json" [initiator]="$rootdir/spdk_initiator_config.json")

function tgt_rpc() {
	$rootdir/scripts/rpc.py -s "${app_socket[target]}" "$@"
}

function initiator_rpc() {
	$rootdir/scripts/rpc.py -s "${app_socket[initiator]}" "$@"
}
+75 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
#  SPDX-License-Identifier: BSD-3-Clause
#  Copyright (C) 2024 Intel Corporation
#  All rights reserved.
#

rootdir=$(readlink -f $(dirname $0)/../..)
source "$rootdir/test/common/autotest_common.sh"
source "$rootdir/test/nvmf/common.sh"
source "$rootdir/test/json_config/common.sh"

declare -A app_pid=([target]="")
declare -A app_socket=([target]='/var/tmp/spdk_tgt.sock')
declare -A configs_path=([target]="$rootdir/test/json_config/tgt_config.json")

cleanup() {
	if [[ -n "${app_pid[target]}" ]]; then
		killprocess ${app_pid[target]}
	fi
	rm -f "${configs_path[@]}"
}

trap 'cleanup' ERR EXIT

echo "INFO: launching target and waiting for RPC..."
json_config_test_start_app target --wait-for-rpc

waitforlisten ${app_pid[target]} ${app_socket[target]}
tgt_rpc rpc_get_methods -c | grep -q "framework_start_init"

# Ensure we are not in SPDK_RPC_RUNTIME yet.
NOT tgt_rpc bdev_get_bdevs &> /dev/null

# Set additional configuration.
tgt_rpc bdev_set_options -d -p 8192 -c 128

tgt_rpc framework_start_init

echo "Waiting for target to run..."
waitforlisten ${app_pid[target]} ${app_socket[target]}
tgt_rpc framework_wait_init

# We must be in SPDK_RPC_RUNTIME now.
tgt_rpc bdev_get_bdevs &> /dev/null

tgt_rpc save_config > ${configs_path[target]}

json_config_test_shutdown_app target

json_config_test_start_app target --wait-for-rpc --json ${configs_path[target]}
waitforlisten ${app_pid[target]} ${app_socket[target]}
tgt_rpc rpc_get_methods -c | grep -q "framework_start_init"

# Override configuration provided with JSON file.
expected_auto_examine="true"
expected_io_pool_size="16384"
expected_io_cache_size="256"
tgt_rpc bdev_set_options -e -p $expected_io_pool_size -c $expected_io_cache_size
tgt_rpc framework_start_init

# Check if the configuration override was successful.
jq_args='.[] | select(.method=="bdev_set_options").params'
bdev_set_options_params=$(tgt_rpc framework_get_config bdev | jq -r "$jq_args")
set_auto_examine=$(echo $bdev_set_options_params | jq .bdev_auto_examine)
set_io_pool_size=$(echo $bdev_set_options_params | jq .bdev_io_pool_size)
set_io_cache_size=$(echo $bdev_set_options_params | jq .bdev_io_cache_size)

[ "$set_auto_examine" = "$expected_auto_examine" ]
[ "$set_io_pool_size" = "$expected_io_pool_size" ]
[ "$set_io_cache_size" = "$expected_io_cache_size" ]

echo "INFO: shutting down applications..."
json_config_test_shutdown_app target

echo "Success"