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: Pawel Niedzwiecki <pawelx.niedzwiecki@intel.com>
Reviewed-on: https://review.gerrithub.io/411460
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Pawel Niedzwiecki 2018-05-16 21:45:39 +02:00 committed by Daniel Verkamp
parent bc8f2cd90f
commit 43c5429d6f
4 changed files with 78 additions and 17 deletions

View File

@ -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]"
for (( i=0; i < ${#bdfs[@]}; i++))
do
echo " TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i"
done
}
echo "[Nvme]"
i=0
for bdf in $bdfs; do
echo " TransportID \"trtype:PCIe traddr:$bdf\" Nvme$i"
let i=i+1
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

View File

@ -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):

View File

@ -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'])

View File

@ -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
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"
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
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()