From 9331600edd571b19986a8a3d0ba99f8a0b9dca24 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 15 Oct 2020 20:31:02 -0400 Subject: [PATCH] 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 --- src/librbd/migration/NativeFormat.cc | 18 ++++++++++++++++++ src/librbd/migration/NativeFormat.h | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/src/librbd/migration/NativeFormat.cc b/src/librbd/migration/NativeFormat.cc index bf6a78fc53f88..b613f74e7ad9f 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 0f0d43adc3901..0468be4659436 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); -- 2.39.5