From 7385d4acde29fa355446c18d8046d30ee38a6a53 Mon Sep 17 00:00:00 2001 From: Ricardo Dias Date: Wed, 16 Mar 2016 23:17:11 +0000 Subject: [PATCH] rbd: rbd-mirroring: Enable image mirroring upon create with journaling feature Signed-off-by: Ricardo Dias --- src/librbd/internal.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 4aa480de1cbb9..94c33b5faa4c3 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -880,6 +880,33 @@ int validate_mirroring_enabled(ImageCtx *ictx) { lderr(cct) << "error creating journal: " << cpp_strerror(r) << dendl; goto err_remove_object_map; } + + rbd_mirror_mode_t mirror_mode; + r = librbd::mirror_mode_get(io_ctx, &mirror_mode); + if (r < 0) { + lderr(cct) << "error in retrieving pool mirroring status: " + << cpp_strerror(r) << dendl; + goto err_remove_object_map; + } + + if (mirror_mode == RBD_MIRROR_MODE_POOL) { + ImageCtx *img_ctx = new ImageCtx("", id, nullptr, io_ctx, false); + r = img_ctx->state->open(); + if (r < 0) { + lderr(cct) << "error opening image: " << cpp_strerror(r) << dendl; + delete img_ctx; + goto err_remove_object_map; + } + r = mirror_image_enable(img_ctx); + if (r < 0) { + lderr(cct) << "error enabling mirroring: " << cpp_strerror(r) + << dendl; + img_ctx->state->close(); + goto err_remove_object_map; + } + img_ctx->state->close(); + } + } ldout(cct, 2) << "done." << dendl; -- 2.39.5