From: Jason Dillaman Date: Fri, 16 Oct 2020 00:31:02 +0000 (-0400) Subject: librbd: helper method for constructing source-spec for legacy migration X-Git-Tag: v16.1.0~752^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9331600edd571b19986a8a3d0ba99f8a0b9dca24;p=ceph.git librbd: helper method for constructing source-spec for legacy migration The legacy migration source format has explicit pool, namespace, and image parameters. This helper method will convert it into the JSON format that will be used for the new-style migration source-spec. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/migration/NativeFormat.cc b/src/librbd/migration/NativeFormat.cc index bf6a78fc53f8..b613f74e7ad9 100644 --- a/src/librbd/migration/NativeFormat.cc +++ b/src/librbd/migration/NativeFormat.cc @@ -9,6 +9,8 @@ #include "librbd/Utils.h" #include "librbd/asio/ContextWQ.h" #include "librbd/io/ImageDispatchSpec.h" +#include "json_spirit/json_spirit.h" +#include #define dout_subsys ceph_subsys_rbd #undef dout_prefix @@ -18,6 +20,22 @@ namespace librbd { namespace migration { +template +std::string NativeFormat::build_source_spec( + int64_t pool_id, const std::string& pool_namespace, + const std::string& image_name, const std::string& image_id) { + json_spirit::mObject source_spec; + source_spec["type"] = "native"; + source_spec["pool_id"] = pool_id; + source_spec["pool_namespace"] = pool_namespace; + if (!image_id.empty()) { + source_spec["image_id"] = image_id; + } else { + source_spec["image_name"] = image_name; + } + return json_spirit::write(source_spec); +} + template NativeFormat::NativeFormat( I* image_ctx, const MigrationInfo& migration_info) diff --git a/src/librbd/migration/NativeFormat.h b/src/librbd/migration/NativeFormat.h index 0f0d43adc390..0468be465943 100644 --- a/src/librbd/migration/NativeFormat.h +++ b/src/librbd/migration/NativeFormat.h @@ -21,6 +21,11 @@ namespace migration { template class NativeFormat : public FormatInterface { public: + static std::string build_source_spec(int64_t pool_id, + const std::string& pool_namespace, + const std::string& image_name, + const std::string& image_id); + static NativeFormat* create(ImageCtxT* image_ctx, const MigrationInfo& migration_info) { return new NativeFormat(image_ctx, migration_info);