]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rbd: show mirror mode in image info
authorMykola Golub <mgolub@suse.com>
Fri, 13 Dec 2019 10:56:30 +0000 (10:56 +0000)
committerMykola Golub <mgolub@suse.com>
Mon, 16 Dec 2019 08:24:30 +0000 (08:24 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/tools/rbd/Utils.cc
src/tools/rbd/Utils.h
src/tools/rbd/action/Info.cc

index d785341515750e16173423ffcf395ff527b06a39..5b2ee64583c0ff36f265bcb120776ca8260cbde3 100644 (file)
@@ -837,6 +837,17 @@ std::string image_id(librbd::Image& image) {
   return id;
 }
 
+std::string mirror_image_mode(librbd::mirror_image_mode_t mode) {
+  switch (mode) {
+    case RBD_MIRROR_IMAGE_MODE_JOURNAL:
+      return "journal";
+    case RBD_MIRROR_IMAGE_MODE_SNAPSHOT:
+      return "snapshot";
+    default:
+      return "unknown";
+  }
+}
+
 std::string mirror_image_state(librbd::mirror_image_state_t state) {
   switch (state) {
     case RBD_MIRROR_IMAGE_DISABLING:
index c9812ce61d69fdea5b86358f61a216a8129797f3..9417f43e24d6be619cc893590840986a84d80cf1 100644 (file)
@@ -189,6 +189,8 @@ bool is_not_user_snap_namespace(librbd::Image* image,
 
 std::string image_id(librbd::Image& image);
 
+std::string mirror_image_mode(
+    librbd::mirror_image_mode_t mirror_image_mode);
 std::string mirror_image_state(
     librbd::mirror_image_state_t mirror_image_state);
 std::string mirror_image_status_state(
index 5adacb92be8ca2fb0bfb72bd3299f3edcd693677..2636535a22eba83b75cb39fd57c10e4d364a650b 100644 (file)
@@ -92,6 +92,7 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image,
   uint64_t overlap, features, flags, snap_limit;
   bool snap_protected = false;
   librbd::mirror_image_info_t mirror_image;
+  librbd::mirror_image_mode_t mirror_mode = RBD_MIRROR_IMAGE_MODE_JOURNAL;
   std::vector<librbd::snap_info_t> snaps;
   int r;
 
@@ -159,8 +160,14 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image,
       return r;
   }
 
-  if (features & RBD_FEATURE_JOURNALING) {
-    r = image.mirror_image_get_info(&mirror_image, sizeof(mirror_image));
+  mirror_image.state = RBD_MIRROR_IMAGE_DISABLED;
+  r = image.mirror_image_get_info(&mirror_image, sizeof(mirror_image));
+  if (r < 0) {
+    return r;
+  }
+
+  if (mirror_image.state != RBD_MIRROR_IMAGE_DISABLED) {
+    r = image.mirror_image_get_mode(&mirror_mode);
     if (r < 0) {
       return r;
     }
@@ -361,9 +368,12 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image,
     }
   }
 
-  if (features & RBD_FEATURE_JOURNALING) {
+  if (features & RBD_FEATURE_JOURNALING ||
+      mirror_image.state != RBD_MIRROR_IMAGE_DISABLED) {
     if (f) {
       f->open_object_section("mirroring");
+      f->dump_string("mode",
+          utils::mirror_image_mode(mirror_mode));
       f->dump_string("state",
           utils::mirror_image_state(mirror_image.state));
       if (mirror_image.state != RBD_MIRROR_IMAGE_DISABLED) {
@@ -372,6 +382,8 @@ static int do_show_info(librados::IoCtx &io_ctx, librbd::Image& image,
       }
       f->close_section();
     } else {
+      std::cout << "\tmirroring mode: "
+                << utils::mirror_image_mode(mirror_mode) << std::endl;
       std::cout << "\tmirroring state: "
                 << utils::mirror_image_state(mirror_image.state) << std::endl;
       if (mirror_image.state != RBD_MIRROR_IMAGE_DISABLED) {