}
std::unique_ptr<migration::FormatInterface> format;
- r = source_spec_builder.build_format(source_spec_object, &format);
+ r = source_spec_builder.build_format(source_spec_object, true, &format);
if (r < 0) {
lderr(cct) << "failed to build migration format handler: "
<< cpp_strerror(r) << dendl;
template <typename I>
NativeFormat<I>::NativeFormat(
- I* image_ctx, const json_spirit::mObject& json_object)
- : m_image_ctx(image_ctx), m_json_object(json_object) {
+ I* image_ctx, const json_spirit::mObject& json_object, bool import_only)
+ : m_image_ctx(image_ctx), m_json_object(json_object),
+ m_import_only(import_only) {
}
template <typename I>
m_image_ctx->name = m_image_name;
uint64_t flags = 0;
- if (m_image_id.empty()) {
+ if (m_image_id.empty() && !m_import_only) {
flags |= OPEN_FLAG_OLD_FORMAT;
} else {
m_image_ctx->id = m_image_id;
const std::string& image_id);
static NativeFormat* create(ImageCtxT* image_ctx,
- const json_spirit::mObject& json_object) {
- return new NativeFormat(image_ctx, json_object);
+ const json_spirit::mObject& json_object,
+ bool import_only) {
+ return new NativeFormat(image_ctx, json_object, import_only);
}
- NativeFormat(ImageCtxT* image_ctx, const json_spirit::mObject& json_object);
+ NativeFormat(ImageCtxT* image_ctx, const json_spirit::mObject& json_object,
+ bool import_only);
NativeFormat(const NativeFormat&) = delete;
NativeFormat& operator=(const NativeFormat&) = delete;
private:
ImageCtxT* m_image_ctx;
json_spirit::mObject m_json_object;
+ bool m_import_only;
int64_t m_pool_id = -1;
std::string m_pool_namespace;
src_image_ctx->layout.object_size = 1Ull << src_image_ctx->order;
src_image_ctx->layout.pool_id = -1;
+ bool import_only = true;
auto source_spec = m_migration_info.source_spec;
if (source_spec.empty()) {
// implies legacy migration from RBD image in same cluster
source_spec = NativeFormat<I>::build_source_spec(
m_migration_info.pool_id, m_migration_info.pool_namespace,
m_migration_info.image_name, m_migration_info.image_id);
+ import_only = false;
}
SourceSpecBuilder<I> source_spec_builder{src_image_ctx};
return;
}
- r = source_spec_builder.build_format(source_spec_object, &m_format);
+ r = source_spec_builder.build_format(source_spec_object, import_only,
+ &m_format);
if (r < 0) {
lderr(cct) << "failed to build migration format handler: "
<< cpp_strerror(r) << dendl;
template <typename I>
int SourceSpecBuilder<I>::build_format(
- const json_spirit::mObject& source_spec_object,
+ const json_spirit::mObject& source_spec_object, bool import_only,
std::unique_ptr<FormatInterface>* format) const {
auto cct = m_image_ctx->cct;
ldout(cct, 10) << dendl;
auto& type = type_value_it->second.get_str();
if (type == "native") {
- format->reset(NativeFormat<I>::create(m_image_ctx, source_spec_object));
+ format->reset(NativeFormat<I>::create(m_image_ctx, source_spec_object,
+ import_only));
} else if (type == "raw") {
format->reset(RawFormat<I>::create(m_image_ctx, source_spec_object, this));
} else {
int parse_source_spec(const std::string& source_spec,
json_spirit::mObject* source_spec_object) const;
- int build_format(const json_spirit::mObject& format_object,
+ int build_format(const json_spirit::mObject& format_object, bool import_only,
std::unique_ptr<FormatInterface>* format) const;
int build_stream(const json_spirit::mObject& source_spec_object,