diff --git a/examples/blob/cli/blobcli.c b/examples/blob/cli/blobcli.c index edb071847..b8eea3257 100644 --- a/examples/blob/cli/blobcli.c +++ b/examples/blob/cli/blobcli.c @@ -52,8 +52,8 @@ static void cli_start(void *arg1); static const char *program_name = "blobcli"; -/* default name for .conf file, any name can be used however with -c switch */ -static const char *program_conf = "blobcli.conf"; +/* default name for .json file, any name can be used however with -j switch */ +static const char *program_conf = "blobcli.json"; /* * CMD mode runs one command at a time which can be annoying as the init takes @@ -179,7 +179,7 @@ usage(struct cli_context_t *cli_context, char *msg) if (!cli_context || cli_context->cli_mode == CLI_MODE_CMD) { printf("Version %s\n", SPDK_VERSION_STRING); - printf("Usage: %s [-c SPDK config_file] Command\n", program_name); + printf("Usage: %s [-j SPDK josn_config_file] Command\n", program_name); printf("\n%s is a command line tool for interacting with blobstore\n", program_name); printf("on the underlying device specified in the conf file passed\n"); @@ -1042,7 +1042,7 @@ cmd_parser(int argc, char **argv, struct cli_context_t *cli_context) int cmd_chosen = 0; char resp; - while ((op = getopt(argc, argv, "b:c:d:f:hil:m:n:p:r:s:DST:Xx:")) != -1) { + while ((op = getopt(argc, argv, "b:d:f:hij:l:m:n:p:r:s:DST:Xx:")) != -1) { switch (op) { case 'b': if (strcmp(cli_context->bdev_name, "") == 0) { @@ -1052,13 +1052,6 @@ cmd_parser(int argc, char **argv, struct cli_context_t *cli_context) usage(cli_context, "ERROR: -b option can only be set once.\n"); } break; - case 'c': - if (cli_context->app_started == false) { - cli_context->config_file = optarg; - } else { - usage(cli_context, "ERROR: -c option not valid during shell mode.\n"); - } - break; case 'D': cmd_chosen++; cli_context->action = CLI_DUMP_BS; @@ -1106,6 +1099,13 @@ cmd_parser(int argc, char **argv, struct cli_context_t *cli_context) cli_context->action = CLI_INIT_BS; } break; + case 'j': + if (cli_context->app_started == false) { + cli_context->config_file = optarg; + } else { + usage(cli_context, "ERROR: -j option not valid during shell mode.\n"); + } + break; case 'r': if (argv[optind] != NULL) { cmd_chosen++; @@ -1533,8 +1533,8 @@ main(int argc, char **argv) /* if the config file doesn't exist, tell them how to make one */ if (access(cli_context->config_file, F_OK) == -1) { printf("Error: No config file found.\n"); - printf("To create a config file named 'blobcli.conf' for your NVMe device:\n"); - printf(" /scripts/gen_nvme.sh > blobcli.conf\n"); + printf("To create a config file named 'blobcli.json' for your NVMe device:\n"); + printf(" /scripts/gen_nvme.sh --json > blobcli.json\n"); printf("and then re-run the cli tool.\n"); exit(-1); } @@ -1555,7 +1555,7 @@ main(int argc, char **argv) /* Set default values in opts struct along with name and conf file. */ spdk_app_opts_init(&opts); opts.name = "blobcli"; - opts.config_file = cli_context->config_file; + opts.json_config_file = cli_context->config_file; cli_context->app_started = true; rc = spdk_app_start(&opts, cli_start, cli_context); diff --git a/lib/rocksdb/env_spdk.cc b/lib/rocksdb/env_spdk.cc index ce8bed923..f56de2336 100644 --- a/lib/rocksdb/env_spdk.cc +++ b/lib/rocksdb/env_spdk.cc @@ -734,8 +734,9 @@ SpdkEnv::SpdkEnv(Env *base_env, const std::string &dir, const std::string &conf, spdk_app_opts_init(opts); opts->name = "rocksdb"; - opts->config_file = mConfig.c_str(); + opts->json_config_file = mConfig.c_str(); opts->shutdown_cb = rocksdb_shutdown; + opts->tpoint_group_mask = "0x80"; spdk_fs_set_cache_size(cache_size_in_mb); g_bdev_name = mBdev; diff --git a/test/blobfs/blobfs.sh b/test/blobfs/blobfs.sh index 83961c4e5..a741eca37 100755 --- a/test/blobfs/blobfs.sh +++ b/test/blobfs/blobfs.sh @@ -13,7 +13,7 @@ source $rootdir/test/common/autotest_common.sh rpc_server=/var/tmp/spdk-blobfs.sock rpc_py="$rootdir/scripts/rpc.py -s $rpc_server" tmp_file=$SPDK_TEST_STORAGE/blobfs_file -conf_file=/tmp/blobfs.conf +conf_file=$testdir/config bdevname=BlobfsBdev mount_dir=/tmp/spdk_tmp_mount test_cache_size=512 @@ -29,7 +29,7 @@ function cleanup() { } function blobfs_start_app() { - $rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server -c ${conf_file} & + $rootdir/test/app/bdev_svc/bdev_svc -r $rpc_server --json ${conf_file} & blobfs_pid=$! echo "Process blobfs pid: $blobfs_pid" @@ -128,8 +128,26 @@ trap 'cleanup' EXIT # Create one temp file as test bdev dd if=/dev/zero of=${tmp_file} bs=4k count=1M -echo "[AIO]" > ${conf_file} -echo "AIO ${tmp_file} ${bdevname} 512" >> ${conf_file} + +jq . <<- JSON > ${conf_file} + { + "subsystems": [ + { + "subsystem": "bdev", + "config": [ + { + "method": "bdev_aio_create", + "params": { + "name": "${bdevname}", + "block_size": 512, + "filename": "${tmp_file}" + } + } + ] + } + ] + } +JSON blobfs_detect_test diff --git a/test/blobfs/fuse/fuse.c b/test/blobfs/fuse/fuse.c index 2c1f7da68..b9cff84d8 100644 --- a/test/blobfs/fuse/fuse.c +++ b/test/blobfs/fuse/fuse.c @@ -94,7 +94,7 @@ int main(int argc, char **argv) spdk_app_opts_init(&opts); opts.name = "spdk_fuse"; - opts.config_file = argv[1]; + opts.json_config_file = argv[1]; opts.reactor_mask = "0x3"; opts.shutdown_cb = spdk_fuse_shutdown; diff --git a/test/blobfs/mkfs/mkfs.c b/test/blobfs/mkfs/mkfs.c index 4d70a5e16..6ae23dd3a 100644 --- a/test/blobfs/mkfs/mkfs.c +++ b/test/blobfs/mkfs/mkfs.c @@ -96,7 +96,7 @@ int main(int argc, char **argv) spdk_app_opts_init(&opts); opts.name = "spdk_mkfs"; - opts.config_file = argv[1]; + opts.json_config_file = argv[1]; opts.reactor_mask = "0x3"; opts.shutdown_cb = NULL; diff --git a/test/blobfs/rocksdb/rocksdb.sh b/test/blobfs/rocksdb/rocksdb.sh index a11703358..02300f056 100755 --- a/test/blobfs/rocksdb/rocksdb.sh +++ b/test/blobfs/rocksdb/rocksdb.sh @@ -43,13 +43,14 @@ run_step() { } run_bsdump() { - $SPDK_EXAMPLE_DIR/blobcli -c $ROCKSDB_CONF -b Nvme0n1 -D &> bsdump.txt + # 0x80 is the bit mask for BlobFS tracepoints + $SPDK_EXAMPLE_DIR/blobcli -j $ROCKSDB_CONF -b Nvme0n1 --tpoint-group-mask 0x80 &> bsdump.txt } # In the autotest job, we copy the rocksdb source to just outside the spdk directory. DB_BENCH_DIR="$rootdir/../rocksdb" DB_BENCH=$DB_BENCH_DIR/db_bench -ROCKSDB_CONF=$testdir/rocksdb.conf +ROCKSDB_CONF=$testdir/rocksdb.json if [ ! -e $DB_BENCH_DIR ]; then echo $DB_BENCH_DIR does not exist @@ -74,15 +75,15 @@ popd timing_exit db_bench_build -$rootdir/scripts/gen_nvme.sh > $ROCKSDB_CONF -# 0x80 is the bit mask for BlobFS tracepoints -echo "[Global]" >> $ROCKSDB_CONF -echo "TpointGroupMask 0x80" >> $ROCKSDB_CONF +echo '{"subsystems": [' > $ROCKSDB_CONF +$rootdir/scripts/gen_nvme.sh --json >> $ROCKSDB_CONF +echo ']}' >> $ROCKSDB_CONF trap 'dump_db_bench_on_err; run_bsdump || :; rm -f $ROCKSDB_CONF; sanitize_results; exit 1' SIGINT SIGTERM EXIT if [ -z "$SKIP_MKFS" ]; then - run_test "blobfs_mkfs" $rootdir/test/blobfs/mkfs/mkfs $ROCKSDB_CONF Nvme0n1 + # 0x80 is the bit mask for BlobFS tracepoints + run_test "blobfs_mkfs" $rootdir/test/blobfs/mkfs/mkfs $ROCKSDB_CONF Nvme0n1 --tpoint-group-mask 0x80 fi mkdir -p $output_dir/rocksdb diff --git a/test/blobstore/blobstore.sh b/test/blobstore/blobstore.sh index 247150f5c..a50eb2ac6 100755 --- a/test/blobstore/blobstore.sh +++ b/test/blobstore/blobstore.sh @@ -11,13 +11,15 @@ rootdir=$(readlink -f $testdir/../..) source $rootdir/test/common/autotest_common.sh # Nvme0 target configuration -$rootdir/scripts/gen_nvme.sh > $testdir/blobcli.conf +echo '{"subsystems": [' > $testdir/blobcli.json +$rootdir/scripts/gen_nvme.sh --json | jq -r "del(.config[] | select(.params.name!=\"Nvme0\"))" >> $testdir/blobcli.json +echo ']}' >> $testdir/blobcli.json # generate random data file for import/export diff dd if=/dev/urandom of=$testdir/test.pattern bs=1M count=1 (cd $testdir \ - && $SPDK_EXAMPLE_DIR/blobcli -c $testdir/blobcli.conf -b Nvme0n1 -T $testdir/test.bs > $testdir/btest.out) + && $SPDK_EXAMPLE_DIR/blobcli -j $testdir/blobcli.json -b Nvme0n1 -T $testdir/test.bs > $testdir/btest.out) # the test script will import the test pattern generated by dd and then export # it to a file so we can compare and confirm basic read and write @@ -25,6 +27,6 @@ $rootdir/test/app/match/match -v $testdir/btest.out.match diff $testdir/test.pattern $testdir/test.pattern.blob rm -rf $testdir/btest.out -rm -rf $testdir/blobcli.conf +rm -rf $testdir/blobcli.json rm -rf $testdir/*.blob rm -rf $testdir/test.pattern