From: Mykola Golub Date: Fri, 13 Dec 2019 10:56:30 +0000 (+0000) Subject: rbd: show mirror mode in image info X-Git-Tag: v15.1.0~482^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1fb9a740918ff276bfa56801637de308eb5fdb7d;p=ceph-ci.git rbd: show mirror mode in image info Signed-off-by: Mykola Golub --- diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index d7853415157..5b2ee64583c 100644 --- a/src/tools/rbd/Utils.cc +++ b/src/tools/rbd/Utils.cc @@ -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: diff --git a/src/tools/rbd/Utils.h b/src/tools/rbd/Utils.h index c9812ce61d6..9417f43e24d 100644 --- a/src/tools/rbd/Utils.h +++ b/src/tools/rbd/Utils.h @@ -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( diff --git a/src/tools/rbd/action/Info.cc b/src/tools/rbd/action/Info.cc index 5adacb92be8..2636535a22e 100644 --- a/src/tools/rbd/action/Info.cc +++ b/src/tools/rbd/action/Info.cc @@ -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 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) {