RPC: rename start_subsystem_init to framework_start_init

Signed-off-by: Maciej Wawryk <maciejx.wawryk@intel.com>
Change-Id: I44a96f87f5565b3984f0a6919bf7f276207637a3
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468130
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Maciej Wawryk 2019-09-11 15:30:14 +02:00 committed by Jim Harris
parent 68ee93aac7
commit e85d47123c
33 changed files with 64 additions and 60 deletions

View File

@ -76,12 +76,12 @@ SPDK applications progress through a set of states beginning with `STARTUP` and
ending with `RUNTIME`.
If the `--wait-for-rpc` parameter is provided SPDK will pause just before starting
subsystem initialization. This state is called `STARTUP`. The JSON RPC server is
ready but only a small subsystem of commands are available to set up initialization
framework initialization. This state is called `STARTUP`. The JSON RPC server is
ready but only a small subset of commands are available to set up initialization
parameters. Those parameters can't be changed after the SPDK application enters
`RUNTIME` state. When the client finishes configuring the SPDK subsystems it
needs to issue the @ref rpc_start_subsystem_init RPC command to begin the
initialization process. After `rpc_start_subsystem_init` returns `true` SPDK
needs to issue the @ref rpc_framework_start_init RPC command to begin the
initialization process. After `rpc_framework_start_init` returns `true` SPDK
will enter the `RUNTIME` state and the list of available commands becomes much
larger.

View File

@ -29,7 +29,7 @@ for any kind of error.
Code | Description
------ | -----------
-1 | Invalid state - given method exists but it is not callable in [current runtime state](@ref rpc_start_subsystem_init)
-1 | Invalid state - given method exists but it is not callable in [current runtime state](@ref rpc_framework_start_init)
-32600 | Invalid request - not compliant with JSON-RPC 2.0 Specification
-32601 | Method not found
-32602 | @ref jsonrpc_invalid_params
@ -134,7 +134,7 @@ Example response:
}
~~~
## start_subsystem_init {#rpc_start_subsystem_init}
## framework_start_init {#rpc_framework_start_init}
Start initialization of SPDK subsystems when it is deferred by starting SPDK application with option -w.
During its deferral some RPCs can be used to set global parameters for SPDK subsystems.
@ -156,7 +156,7 @@ Example request:
{
"jsonrpc": "2.0",
"id": 1,
"method": "start_subsystem_init"
"method": "framework_start_init"
}
~~~
@ -238,7 +238,7 @@ Example response:
"jsonrpc": "2.0",
"id": 1,
"result": [
"start_subsystem_init",
"framework_start_init",
"rpc_get_methods",
"get_scsi_devices",
"net_get_interfaces",

View File

@ -1056,7 +1056,7 @@ spdk_app_usage(void)
}
static void
spdk_rpc_start_subsystem_init_cpl(int rc, void *arg1)
spdk_rpc_framework_start_init_cpl(int rc, void *arg1)
{
struct spdk_jsonrpc_request *request = arg1;
struct spdk_json_write_ctx *w;
@ -1065,7 +1065,7 @@ spdk_rpc_start_subsystem_init_cpl(int rc, void *arg1)
if (rc) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
"subsystem_initialization failed");
"framework_initialization failed");
return;
}
@ -1078,18 +1078,19 @@ spdk_rpc_start_subsystem_init_cpl(int rc, void *arg1)
}
static void
spdk_rpc_start_subsystem_init(struct spdk_jsonrpc_request *request,
spdk_rpc_framework_start_init(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
if (params != NULL) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
"start_subsystem_init requires no parameters");
"framework_start_init requires no parameters");
return;
}
spdk_subsystem_init(spdk_rpc_start_subsystem_init_cpl, request);
spdk_subsystem_init(spdk_rpc_framework_start_init_cpl, request);
}
SPDK_RPC_REGISTER("start_subsystem_init", spdk_rpc_start_subsystem_init, SPDK_RPC_STARTUP)
SPDK_RPC_REGISTER("framework_start_init", spdk_rpc_framework_start_init, SPDK_RPC_STARTUP)
SPDK_RPC_REGISTER_ALIAS_DEPRECATED(framework_start_init, start_subsystem_init)
struct subsystem_init_poller_ctx {
struct spdk_poller *init_poller;

View File

@ -401,7 +401,7 @@ subsystem_init_done(int rc, void *arg1)
spdk_rpc_set_state(SPDK_RPC_RUNTIME);
/* Another round. This time for RUNTIME methods */
SPDK_DEBUG_APP_CFG("'start_subsystem_init' done - continuing configuration\n");
SPDK_DEBUG_APP_CFG("'framework_start_init' done - continuing configuration\n");
assert(ctx != NULL);
if (ctx->subsystems) {
@ -424,7 +424,7 @@ static struct spdk_json_object_decoder subsystem_decoders[] = {
* There are two iterations:
*
* In first iteration only STARTUP RPC methods are used, other methods are ignored. When
* allsubsystems are walked the ctx->subsystems_it became NULL and "start_subsystem_init"
* allsubsystems are walked the ctx->subsystems_it became NULL and "framework_start_init"
* is called to let the SPDK move to RUNTIME state (initialize all subsystems) and
* second iteration begins.
*
@ -440,7 +440,7 @@ spdk_app_json_config_load_subsystem(void *_ctx)
if (ctx->subsystems_it == NULL) {
if (spdk_rpc_get_state() == SPDK_RPC_STARTUP) {
SPDK_DEBUG_APP_CFG("No more entries for current state, calling 'start_subsystem_init'\n");
SPDK_DEBUG_APP_CFG("No more entries for current state, calling 'framework_start_init'\n");
spdk_subsystem_init(subsystem_init_done, ctx);
} else {
spdk_app_json_config_load_done(ctx, 0);

View File

@ -39,11 +39,12 @@ if __name__ == "__main__":
parser.set_defaults(dry_run=False)
subparsers = parser.add_subparsers(help='RPC methods', dest='called_rpc_name')
def start_subsystem_init(args):
rpc.start_subsystem_init(args.client)
def framework_start_init(args):
rpc.framework_start_init(args.client)
p = subparsers.add_parser('start_subsystem_init', help='Start initialization of subsystems')
p.set_defaults(func=start_subsystem_init)
p = subparsers.add_parser('framework_start_init', aliases=['start_subsystem_init'],
help='Start initialization of subsystems')
p.set_defaults(func=framework_start_init)
def wait_subsystem_init(args):
rpc.wait_subsystem_init(args.client)

View File

@ -21,9 +21,10 @@ from . import client as rpc_client
from .helpers import deprecated_alias
def start_subsystem_init(client):
@deprecated_alias('start_subsystem_init')
def framework_start_init(client):
"""Start initialization of subsystems"""
return client.call('start_subsystem_init')
return client.call('framework_start_init')
def wait_subsystem_init(client):
@ -99,8 +100,8 @@ def load_config(client, fd, include_aliases=False):
# check if methods in the config file are known
allowed_methods = client.call('rpc_get_methods', {'include_aliases': include_aliases})
if not subsystems and 'start_subsystem_init' in allowed_methods:
start_subsystem_init(client)
if not subsystems and 'framework_start_init' in allowed_methods:
framework_start_init(client)
return
for subsystem in list(subsystems):
@ -127,8 +128,8 @@ def load_config(client, fd, include_aliases=False):
if not config:
subsystems.remove(subsystem)
if 'start_subsystem_init' in allowed_methods:
start_subsystem_init(client)
if 'framework_start_init' in allowed_methods:
framework_start_init(client)
allowed_found = True
if not allowed_found:

View File

@ -27,7 +27,7 @@ class UIRoot(UINode):
if self.is_init is False:
methods = "\n".join(self.methods)
self.shell.log.warning("SPDK Application is not yet initialized.\n"
"Please initialize subsystems with start_subsystem_init command.\n"
"Please initialize subsystems with framework_start_init command.\n"
"List of available commands in current state:\n"
"%s" % methods)
else:
@ -74,8 +74,8 @@ class UIRoot(UINode):
return []
return w
def ui_command_start_subsystem_init(self):
if rpc.start_subsystem_init(self.client):
def ui_command_framework_start_init(self):
if rpc.framework_start_init(self.client):
self.is_init = True
self.refresh()
@ -99,7 +99,7 @@ class UIRoot(UINode):
return rpc.rpc_get_methods(self.client, current=current)
def check_init(self):
return "start_subsystem_init" not in self.rpc_get_methods(current=True)
return "framework_start_init" not in self.rpc_get_methods(current=True)
def bdev_get_bdevs(self, bdev_type):
if self.is_init:

View File

@ -41,5 +41,5 @@ always be started with the --wait-for-rpc argument. Please see below for an exam
./test/app/fuzz/vhost_fuzz/vhost_fuzz -t 30 --wait-for-rpc &
./scripts/rpc.py fuzz_vhost_create_dev -s ./Vhost.1 -b -v
./scripts/rpc.py fuzz_vhost_create_dev -s ./naa.VhostScsi0.1 -l -v
./scripts/rpc.py start_subsystem_init
./scripts/rpc.py framework_start_init
~~~

View File

@ -65,7 +65,7 @@ if [ "$TEST_TRANSPORT" == "scsi" ] || [ "$TEST_TRANSPORT" == "all" ]; then
fi
# The test won't actually begin until this option is passed in.
$fuzz_generic_rpc_py start_subsystem_init
$fuzz_generic_rpc_py framework_start_init
wait $fuzzpid

View File

@ -24,7 +24,7 @@ waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 4
# Minimal number of bdev io pool (5) and cache (1)
$rpc_py bdev_set_options -p 5 -c 1
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -38,7 +38,7 @@ trap 'killprocess $pid; delete_tmp_conf_files; exit 1 ' SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py load_subsystem_config < $testdir/iscsi.json
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -75,7 +75,7 @@ trap 'killprocess $pid; iscsitestfini $1 $2; exit 1' SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -24,7 +24,7 @@ trap '$rpc_py bdev_split_delete Name0n1 || true; killprocess $pid; iscsitestfini
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 4 -b $node_base
$rpc_py start_subsystem_init
$rpc_py framework_start_init
$rootdir/scripts/gen_nvme.sh --json | $rpc_py load_subsystem_config
$rpc_py bdev_malloc_create 512 4096 --name Malloc0
echo "iscsi_tgt is listening. Running tests..."

View File

@ -37,7 +37,7 @@ trap 'killprocess $pid; iscsitestfini $1 $2; exit 1' SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -24,7 +24,7 @@ echo "iSCSI target launched. pid: $pid"
trap 'killprocess $pid;exit 1' SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 4
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -55,7 +55,7 @@ for ((i = 0; i < 2; i++)); do
waitforlisten $pid $rpc_addr
$rpc_py -s $rpc_addr iscsi_set_options -o 30 -a 64
$rpc_py -s $rpc_addr start_subsystem_init
$rpc_py -s $rpc_addr framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt_$i

View File

@ -34,7 +34,7 @@ trap 'iscsicleanup; killprocess $pid; iscsitestfini $1 $2; exit 1' SIGINT SIGTER
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -44,7 +44,7 @@ trap 'remove_backends; iscsicleanup; killprocess $iscsipid; iscsitestfini $1 $2;
waitforlisten $iscsipid
$rpc_py iscsi_set_options -o 30 -a 128
$rpc_py start_subsystem_init
$rpc_py framework_start_init
$rootdir/scripts/gen_nvme.sh --json | $rpc_py load_subsystem_config
timing_exit start_iscsi_tgt

View File

@ -30,7 +30,7 @@ function run_nvme_remote() {
trap 'killprocess $iscsipid; iscsitestfini $1 $2; nvmftestfini; exit 1' SIGINT SIGTERM EXIT
waitforlisten $iscsipid "$iscsi_rpc_addr"
$rpc_py -s "$iscsi_rpc_addr" iscsi_set_options -o 30 -a 16
$rpc_py -s "$iscsi_rpc_addr" start_subsystem_init
$rpc_py -s "$iscsi_rpc_addr" framework_start_init
if [ "$1" = "remote" ]; then
$rpc_py -s $iscsi_rpc_addr bdev_nvme_attach_controller -b "Nvme0" -t "rdma" -f "ipv4" -a $NVMF_FIRST_TARGET_IP -s $NVMF_PORT -n nqn.2016-06.io.spdk:cnode1
fi
@ -62,7 +62,7 @@ nvmfpid=$!
echo "NVMf target launched. pid: $nvmfpid"
trap 'iscsitestfini $1 $2; nvmftestfini; exit 1' SIGINT SIGTERM EXIT
waitforlisten $nvmfpid
$rpc_py start_subsystem_init
$rpc_py framework_start_init
$rpc_py nvmf_create_transport -t RDMA -u 8192
echo "NVMf target has started."
bdevs=$($rpc_py bdev_malloc_create 64 512)

View File

@ -84,7 +84,7 @@ pid=$!
trap 'rm -f $testdir/perf.job; killprocess $pid; print_backtrace; exit 1' ERR SIGTERM SIGABRT
waitforlisten "$pid" "$testdir/rpc_iscsi.sock"
$rpc_py iscsi_set_options -b "iqn.2016-06.io.spdk" -f "/usr/local/etc/spdk/auth.conf" -o 30 -i -l 0 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
$rootdir/scripts/gen_nvme.sh --json | $rpc_py load_subsystem_config
sleep 1
timing_exit run_iscsi_app

View File

@ -26,7 +26,7 @@ trap 'iscsicleanup; killprocess $pid; rm -f /tmp/pool_file*; exit 1' SIGINT SIGT
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_target

View File

@ -33,7 +33,7 @@ trap 'killprocess $pid; rbd_cleanup; iscsitestfini $1 $2; exit 1' SIGINT SIGTERM
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -31,7 +31,7 @@ trap 'killprocess $pid; exit 1' SIGINT SIGTERM EXIT
waitforlisten $pid
$rpc_py iscsi_set_options -o 30 -a 16
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
timing_exit start_iscsi_tgt

View File

@ -39,7 +39,7 @@ $rpc_py iscsi_set_options -o 30 -a 16
# RPC wait_subsystem_init should be blocked, so its process must be existed
ps $rpc_wait_pid
$rpc_py start_subsystem_init
$rpc_py framework_start_init
echo "iscsi_tgt is listening. Running tests..."
# RPC wait_subsystem_init should be already returned, so its process must be non-existed

View File

@ -71,9 +71,9 @@ if __name__ == "__main__":
check_empty
check if provided configuration is logically empty
delete_global_parameters
remove pre-init configuration (pre start_subsystem_init RPC methods)
remove pre-init configuration (pre framework_start_init RPC methods)
delete_configs
remove post-init configuration (post start_subsystem_init RPC methods)
remove post-init configuration (post framework_start_init RPC methods)
sort
remove nothing - just sort JSON objects (and subobjects but not arrays)
in lexicographical order. This can be used to do plain text diff.""")

View File

@ -344,7 +344,7 @@ function json_config_test_init()
#TODO: global subsystem params
# Load nvme configuration. The load_config will issue start_subsystem_init automatically
# Load nvme configuration. The load_config will issue framework_start_init automatically
(
echo '{"subsystems": [';
$rootdir/scripts/gen_nvme.sh --json | jq -r "del(.config[] | select(.params.name!=\"Nvme0\"))"

View File

@ -16,7 +16,7 @@ nvmfappstart "-m 0xF --wait-for-rpc"
# Minimal number of bdev io pool (5) and cache (1)
$rpc_py bdev_set_options -p 5 -c 1
$rpc_py start_subsystem_init
$rpc_py framework_start_init
$rpc_py nvmf_create_transport $NVMF_TRANSPORT_OPTS -u 8192
$rpc_py bdev_malloc_create $MALLOC_BDEV_SIZE $MALLOC_BLOCK_SIZE -b Malloc0

View File

@ -14,11 +14,11 @@ trap 'on_error_exit;' ERR
timing_enter run_iscsi_tgt
# Running iscsi target with --wait-for-rpc. Implies start_subsystem_init later
# Running iscsi target with --wait-for-rpc. Implies framework_start_init later
$rootdir/app/iscsi_tgt/iscsi_tgt -m 0x3 -p 0 -s 4096 --wait-for-rpc &
iscsi_tgt_pid=$!
waitforlisten $iscsi_tgt_pid
$rootdir/scripts/rpc.py start_subsystem_init
$rootdir/scripts/rpc.py framework_start_init
timing_exit run_iscsi_tgt

View File

@ -45,6 +45,7 @@ DEFINE_STUB(spdk_event_allocate, struct spdk_event *, (uint32_t core, spdk_event
DEFINE_STUB_V(spdk_subsystem_init, (spdk_subsystem_init_fn cb_fn, void *cb_arg));
DEFINE_STUB_V(spdk_rpc_register_method, (const char *method, spdk_rpc_method_handler func,
uint32_t state_mask));
DEFINE_STUB_V(spdk_rpc_register_alias_deprecated, (const char *method, const char *alias));
DEFINE_STUB_V(spdk_rpc_set_state, (uint32_t state));
DEFINE_STUB(spdk_rpc_get_state, uint32_t, (void), SPDK_RPC_RUNTIME);
DEFINE_STUB_V(spdk_app_json_config_load, (const char *json_config_file, const char *rpc_addr,

View File

@ -45,7 +45,7 @@ $fuzz_specific_rpc_py fuzz_vhost_create_dev -s $(pwd)/naa.VhostScsi0.1 -l -v
# test the vhost scsi management queue with valid data buffers.
$fuzz_specific_rpc_py fuzz_vhost_create_dev -s $(pwd)/naa.VhostScsi0.2 -v -m
# The test won't actually begin until this option is passed in.
$fuzz_generic_rpc_py start_subsystem_init
$fuzz_generic_rpc_py framework_start_init
wait $fuzzpid
@ -59,7 +59,7 @@ trap 'killprocess $vhostpid; killprocess $fuzzpid; exit 1' SIGINT SIGTERM exit
$fuzz_specific_rpc_py fuzz_vhost_create_dev -s $(pwd)/Vhost.1 -b -v
$fuzz_specific_rpc_py fuzz_vhost_create_dev -s $(pwd)/naa.VhostScsi0.1 -l -v
$fuzz_specific_rpc_py fuzz_vhost_create_dev -s $(pwd)/naa.VhostScsi0.2 -v -m
$fuzz_generic_rpc_py start_subsystem_init
$fuzz_generic_rpc_py framework_start_init
wait $fuzzpid

View File

@ -97,7 +97,7 @@ function migration_tc2_configure_vhost()
local nvmf_tgt_pid=$!
echo $nvmf_tgt_pid > $nvmf_dir/nvmf_tgt.pid
waitforlisten "$nvmf_tgt_pid" "$nvmf_dir/rpc.sock"
$rpc_nvmf start_subsystem_init
$rpc_nvmf framework_start_init
$rpc_nvmf nvmf_create_transport -t RDMA -u 8192
$rootdir/scripts/gen_nvme.sh --json | $rpc_nvmf load_subsystem_config
timing_exit start_nvmf_tgt

View File

@ -107,7 +107,7 @@ function host1_start_nvmf()
nvmf_tgt_pid=$!
echo $nvmf_tgt_pid > $nvmf_dir/nvmf_tgt.pid
waitforlisten "$nvmf_tgt_pid" "$nvmf_dir/nvmf_rpc.sock"
$rpc_nvmf start_subsystem_init
$rpc_nvmf framework_start_init
$rpc_nvmf nvmf_create_transport -t RDMA -u 8192
$rootdir/scripts/gen_nvme.sh --json | $rpc_nvmf load_subsystem_config

View File

@ -48,7 +48,7 @@ trap 'killprocess $svcpid; exit 1' SIGINT SIGTERM EXIT
waitforlisten $svcpid
$rpc_py enable_vmd
$rpc_py start_subsystem_init
$rpc_py framework_start_init
for bdf in $pci_devs; do
$rpc_py bdev_nvme_attach_controller -b NVMe_$bdf -t PCIe -a $bdf