Commit 43c5429d authored by Pawel Niedzwiecki's avatar Pawel Niedzwiecki Committed by Daniel Verkamp
Browse files

test/vhost: load json configuration to vhost in spdk_vhost_run.



Json configuration can be loaded by adding parameter --json-path=PATH.
Also spdk_vhost_run can be launched without initial config file.
New JSON RPC call "load_subsystem_config" for loading subsystem
config.

Change-Id: I4e71da99ea574484cba7e0d29b87cbc0b41e5ce6
Signed-off-by: default avatarPawel Niedzwiecki <pawelx.niedzwiecki@intel.com>
Reviewed-on: https://review.gerrithub.io/411460


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent bc8f2cd9
Loading
Loading
Loading
Loading
+39 −8
Original line number Diff line number Diff line
@@ -5,11 +5,42 @@ set -e
rootdir=$(readlink -f $(dirname $0))/..
source "$rootdir/scripts/common.sh"

bdfs=$(iter_pci_class_code 01 08 02)

bdfs=($(iter_pci_class_code 01 08 02))
function create_classic_config()
{
	echo "[Nvme]"
i=0
for bdf in $bdfs; do
        echo "  TransportID \"trtype:PCIe traddr:$bdf\" Nvme$i"
        let i=i+1
	for (( i=0; i < ${#bdfs[@]}; i++))
	do
		echo "  TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i"
	done
}

function create_json_config()
{
	echo "{"
	echo '"subsystem": "bdev",'
	echo '"config": ['
	for (( i=0; i < ${#bdfs[@]}; i++))
	do
		echo '{'
		echo '"params": {'
		echo '"trtype": "PCIe",'
		echo "\"name\": \"Nvme$i\","
		echo "\"traddr\": \"${bdfs[i]}\""
		echo '},'
		echo '"method": "construct_nvme_bdev"'
		if [ -z ${bdfs[i+1]} ]; then
			echo '}'
		else
			echo '},'
		fi
	done
	echo ']'
	echo '}'
}

if [ "$1" = "--json" ]; then
	create_json_config
else
	create_classic_config
fi
+9 −0
Original line number Diff line number Diff line
@@ -75,6 +75,15 @@ if __name__ == "__main__":
    p.add_argument('-f', '--filename', help="""JSON Configuration file.""")
    p.set_defaults(func=load_config)

    @call_cmd
    def load_subsystem_config(args):
        rpc.load_subsystem_config(args.client, args)

    p = subparsers.add_parser('load_subsystem_config', help="""Configure SPDK subsystem using JSON RPC. If no file is
    provided or file is '-' read configuration from stdin.""")
    p.add_argument('--filename', help="""JSON Configuration file.""")
    p.set_defaults(func=load_subsystem_config)

    # app
    @call_cmd
    def kill_instance(args):
+13 −0
Original line number Diff line number Diff line
@@ -90,3 +90,16 @@ def load_config(client, args):

        if subsystems and not allowed_found:
            raise JSONRPCException("Some config left but did not found any allowed method to execute")


def load_subsystem_config(client, args):
    if not args.filename or args.filename == '-':
        config = json.load(sys.stdin)
    else:
        with open(args.filename, 'r') as file:
            config = json.load(file)

    for elem in config['config']:
        if not elem or 'method' not in elem:
            continue
        client.call(elem['method'], elem['params'])
+18 −10
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ function spdk_vhost_run()
				assert_number "$vhost_num"
				;;
			--conf-path=*) local vhost_conf_path="${param#*=}" ;;
			--json-path=*) local vhost_json_path="${param#*=}" ;;
			--memory=*) local memory=${param#*=} ;;
			*)
				error "Invalid parameter '$param'"
@@ -130,10 +131,6 @@ function spdk_vhost_run()
	done

	local vhost_dir="$(get_vhost_dir $vhost_num)"
	if [[ -z "$vhost_conf_path" ]]; then
		error "Missing mandatory parameter '--conf-path'"
		return 1
	fi
	local vhost_app="$SPDK_BUILD_DIR/app/vhost/vhost"
	local vhost_log_file="$vhost_dir/vhost.log"
	local vhost_pid_file="$vhost_dir/vhost.pid"
@@ -161,13 +158,14 @@ function spdk_vhost_run()
		return 1
	fi

	local cmd="$vhost_app -m $reactor_mask -p $master_core -s $memory -r $vhost_dir/rpc.sock"
	if [[ -n "$vhost_conf_path" ]]; then
		cp $vhost_conf_template $vhost_conf_file
		$SPDK_BUILD_DIR/scripts/gen_nvme.sh >> $vhost_conf_file

	local cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
		cmd="$vhost_app -m $reactor_mask -p $master_core -c $vhost_conf_file -s $memory -r $vhost_dir/rpc.sock"
	fi

	notice "Loging to:   $vhost_log_file"
	notice "Config file: $vhost_conf_file"
	notice "Socket:      $vhost_socket"
	notice "Command:     $cmd"

@@ -178,10 +176,20 @@ function spdk_vhost_run()

	notice "waiting for app to run..."
	waitforlisten "$vhost_pid" "$vhost_dir/rpc.sock"
	if [[ -z "$vhost_conf_path" ]]; then
		$SPDK_BUILD_DIR/scripts/gen_nvme.sh "--json" | $SPDK_BUILD_DIR/scripts/rpc.py\
		 -s $vhost_dir/rpc.sock load_subsystem_config
	fi

	if [[ -n "$vhost_json_path" ]]; then
		$SPDK_BUILD_DIR/scripts/rpc.py -s $vhost_dir/rpc.sock load_config\
		 --filename "$vhost_json_path/conf.json"
	fi

	notice "vhost started - pid=$vhost_pid"
	timing_exit vhost_start

	rm $vhost_conf_file
	rm -f $vhost_conf_file
}

function spdk_vhost_kill()