From 523810947e034dc5b770c2603ec42b31c444cd00 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 10 Sep 2018 11:27:39 -0700 Subject: [PATCH] nvmf: Dump new-style configuration RPCs Avoid using the deprecated construct_nvmf_subsystem when dumping configuration. Change-Id: I908d87bdd77a8b2a8e54baeb7b73e8b52c4912ee Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/425186 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/nvmf/nvmf.c | 127 +++++++++++++++++++------------ test/json_config/clear_config.py | 11 ++- 2 files changed, 84 insertions(+), 54 deletions(-) diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 5e957b751..2bd04f8c5 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -332,46 +332,12 @@ spdk_nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w, /* { */ spdk_json_write_object_begin(w); - spdk_json_write_named_string(w, "method", "construct_nvmf_subsystem"); + spdk_json_write_named_string(w, "method", "nvmf_subsystem_create"); /* "params" : { */ spdk_json_write_named_object_begin(w, "params"); spdk_json_write_named_string(w, "nqn", spdk_nvmf_subsystem_get_nqn(subsystem)); spdk_json_write_named_bool(w, "allow_any_host", spdk_nvmf_subsystem_get_allow_any_host(subsystem)); - - /* "listen_addresses" : [ */ - spdk_json_write_named_array_begin(w, "listen_addresses"); - for (listener = spdk_nvmf_subsystem_get_first_listener(subsystem); listener != NULL; - listener = spdk_nvmf_subsystem_get_next_listener(subsystem, listener)) { - trid = spdk_nvmf_listener_get_trid(listener); - - trtype = spdk_nvme_transport_id_trtype_str(trid->trtype); - adrfam = spdk_nvme_transport_id_adrfam_str(trid->adrfam); - - /* { */ - spdk_json_write_object_begin(w); - spdk_json_write_named_string(w, "trtype", trtype); - if (adrfam) { - spdk_json_write_named_string(w, "adrfam", adrfam); - } - - spdk_json_write_named_string(w, "traddr", trid->traddr); - spdk_json_write_named_string(w, "trsvcid", trid->trsvcid); - spdk_json_write_object_end(w); - /* } */ - } - spdk_json_write_array_end(w); - /* ] "listen_addresses" */ - - /* "hosts" : [ */ - spdk_json_write_named_array_begin(w, "hosts"); - for (host = spdk_nvmf_subsystem_get_first_host(subsystem); host != NULL; - host = spdk_nvmf_subsystem_get_next_host(subsystem, host)) { - spdk_json_write_string(w, spdk_nvmf_host_get_nqn(host)); - } - spdk_json_write_array_end(w); - /* ] "hosts" */ - spdk_json_write_named_string(w, "serial_number", spdk_nvmf_subsystem_get_sn(subsystem)); max_namespaces = spdk_nvmf_subsystem_get_max_namespaces(subsystem); @@ -379,14 +345,81 @@ spdk_nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w, spdk_json_write_named_uint32(w, "max_namespaces", max_namespaces); } - /* "namespaces" : [ */ - spdk_json_write_named_array_begin(w, "namespaces"); + /* } "params" */ + spdk_json_write_object_end(w); + + /* } */ + spdk_json_write_object_end(w); + + for (listener = spdk_nvmf_subsystem_get_first_listener(subsystem); listener != NULL; + listener = spdk_nvmf_subsystem_get_next_listener(subsystem, listener)) { + trid = spdk_nvmf_listener_get_trid(listener); + + trtype = spdk_nvme_transport_id_trtype_str(trid->trtype); + adrfam = spdk_nvme_transport_id_adrfam_str(trid->adrfam); + + spdk_json_write_object_begin(w); + spdk_json_write_named_string(w, "method", "nvmf_subsystem_add_listener"); + + /* "params" : { */ + spdk_json_write_named_object_begin(w, "params"); + + spdk_json_write_named_string(w, "nqn", spdk_nvmf_subsystem_get_nqn(subsystem)); + + /* "listen_address" : { */ + spdk_json_write_named_object_begin(w, "listen_address"); + + spdk_json_write_named_string(w, "trtype", trtype); + if (adrfam) { + spdk_json_write_named_string(w, "adrfam", adrfam); + } + + spdk_json_write_named_string(w, "traddr", trid->traddr); + spdk_json_write_named_string(w, "trsvcid", trid->trsvcid); + /* } "listen_address" */ + spdk_json_write_object_end(w); + + /* } "params" */ + spdk_json_write_object_end(w); + + /* } */ + spdk_json_write_object_end(w); + } + + for (host = spdk_nvmf_subsystem_get_first_host(subsystem); host != NULL; + host = spdk_nvmf_subsystem_get_next_host(subsystem, host)) { + + spdk_json_write_object_begin(w); + spdk_json_write_named_string(w, "method", "nvmf_subsystem_add_host"); + + /* "params" : { */ + spdk_json_write_named_object_begin(w, "params"); + + spdk_json_write_named_string(w, "nqn", spdk_nvmf_subsystem_get_nqn(subsystem)); + spdk_json_write_named_string(w, "host", spdk_nvmf_host_get_nqn(host)); + + /* } "params" */ + spdk_json_write_object_end(w); + + /* } */ + spdk_json_write_object_end(w); + } + for (ns = spdk_nvmf_subsystem_get_first_ns(subsystem); ns != NULL; ns = spdk_nvmf_subsystem_get_next_ns(subsystem, ns)) { spdk_nvmf_ns_get_opts(ns, &ns_opts, sizeof(ns_opts)); - /* { */ spdk_json_write_object_begin(w); + spdk_json_write_named_string(w, "method", "nvmf_subsystem_add_ns"); + + /* "params" : { */ + spdk_json_write_named_object_begin(w, "params"); + + spdk_json_write_named_string(w, "nqn", spdk_nvmf_subsystem_get_nqn(subsystem)); + + /* "namespace" : { */ + spdk_json_write_named_object_begin(w, "namespace"); + spdk_json_write_named_uint32(w, "nsid", spdk_nvmf_ns_get_id(ns)); spdk_json_write_named_string(w, "bdev_name", spdk_bdev_get_name(spdk_nvmf_ns_get_bdev(ns))); @@ -405,18 +438,16 @@ spdk_nvmf_write_subsystem_config_json(struct spdk_json_write_ctx *w, spdk_uuid_fmt_lower(uuid_str, sizeof(uuid_str), &ns_opts.uuid); spdk_json_write_named_string(w, "uuid", uuid_str); } - /* } */ + + /* "namespace" */ + spdk_json_write_object_end(w); + + /* } "params" */ + spdk_json_write_object_end(w); + + /* } */ spdk_json_write_object_end(w); } - - /* ] "namespaces" */ - spdk_json_write_array_end(w); - - /* } "params" */ - spdk_json_write_object_end(w); - - /* } */ - spdk_json_write_object_end(w); } void diff --git a/test/json_config/clear_config.py b/test/json_config/clear_config.py index 700c61805..f07025ae9 100755 --- a/test/json_config/clear_config.py +++ b/test/json_config/clear_config.py @@ -81,12 +81,11 @@ def clear_bdev_subsystem(args, bdev_config): def get_nvmf_destroy_method(nvmf): - destroy_method_map = {'construct_nvmf_subsystem': "delete_nvmf_subsystem", - 'set_nvmf_target_config': None, - 'set_nvmf_target_options': None, - 'nvmf_create_transport': None - } - return destroy_method_map[nvmf['method']] + destroy_method_map = {'nvmf_subsystem_create': "delete_nvmf_subsystem"} + try: + return destroy_method_map[nvmf['method']] + except KeyError: + return None def clear_nvmf_subsystem(args, nvmf_config):