]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: rbd-mirroring: Enable image mirroring upon create with journaling feature
authorRicardo Dias <rdias@suse.com>
Wed, 16 Mar 2016 23:17:11 +0000 (23:17 +0000)
committerRicardo Dias <rdias@suse.com>
Fri, 18 Mar 2016 10:45:13 +0000 (10:45 +0000)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/librbd/internal.cc

index 4aa480de1cbb929db33647d39aca08ae0b17929a..94c33b5faa4c3e78afbaaa91a7a8c97f20632df9 100644 (file)
@@ -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;