From 745da63f4332233ec123c0bb6fce9abb74e31c97 Mon Sep 17 00:00:00 2001 From: Arthur Outhenin-Chalandre Date: Mon, 7 Jun 2021 12:53:48 +0200 Subject: [PATCH] cls/rbd: add mirror_image_status_remove on client Signed-off-by: Arthur Outhenin-Chalandre (cherry picked from commit 0e147f779d73d0688c2b89428db6012ed1560f20) --- src/cls/rbd/cls_rbd.cc | 1 - src/cls/rbd/cls_rbd_client.cc | 14 ++++++++++++++ src/cls/rbd/cls_rbd_client.h | 4 ++++ src/test/cls_rbd/test_cls_rbd.cc | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/cls/rbd/cls_rbd.cc b/src/cls/rbd/cls_rbd.cc index 33910b7df51..aab1a0e5847 100644 --- a/src/cls/rbd/cls_rbd.cc +++ b/src/cls/rbd/cls_rbd.cc @@ -6366,7 +6366,6 @@ int mirror_image_status_set(cls_method_context_t hctx, bufferlist *in, * Output: * @returns 0 on success, negative error code on failure * - * NOTE: deprecated - remove this method after Octopus is unsupported */ int mirror_image_status_remove(cls_method_context_t hctx, bufferlist *in, bufferlist *out) { diff --git a/src/cls/rbd/cls_rbd_client.cc b/src/cls/rbd/cls_rbd_client.cc index cefa1fed793..535de35ef7a 100644 --- a/src/cls/rbd/cls_rbd_client.cc +++ b/src/cls/rbd/cls_rbd_client.cc @@ -2310,6 +2310,20 @@ int mirror_image_status_get_summary_finish( return 0; } +int mirror_image_status_remove(librados::IoCtx *ioctx, + const std::string &global_image_id) { + librados::ObjectWriteOperation op; + mirror_image_status_remove(&op, global_image_id); + return ioctx->operate(RBD_MIRRORING, &op); +} + +void mirror_image_status_remove(librados::ObjectWriteOperation *op, + const std::string &global_image_id) { + bufferlist bl; + encode(global_image_id, bl); + op->exec("rbd", "mirror_image_status_remove", bl); +} + int mirror_image_status_remove_down(librados::IoCtx *ioctx) { librados::ObjectWriteOperation op; mirror_image_status_remove_down(&op); diff --git a/src/cls/rbd/cls_rbd_client.h b/src/cls/rbd/cls_rbd_client.h index 12b34c48327..9bb5a41d82d 100644 --- a/src/cls/rbd/cls_rbd_client.h +++ b/src/cls/rbd/cls_rbd_client.h @@ -478,6 +478,10 @@ void mirror_image_status_get_summary_start( int mirror_image_status_get_summary_finish( ceph::buffer::list::const_iterator *iter, std::map *states); +int mirror_image_status_remove(librados::IoCtx *ioctx, + const std::string &global_image_id); +void mirror_image_status_remove(librados::ObjectWriteOperation *op, + const std::string &global_image_id); int mirror_image_status_remove_down(librados::IoCtx *ioctx); void mirror_image_status_remove_down(librados::ObjectWriteOperation *op); diff --git a/src/test/cls_rbd/test_cls_rbd.cc b/src/test/cls_rbd/test_cls_rbd.cc index d01e04704ff..5b335974556 100644 --- a/src/test/cls_rbd/test_cls_rbd.cc +++ b/src/test/cls_rbd/test_cls_rbd.cc @@ -1889,6 +1889,11 @@ TEST_F(TestClsRbd, mirror_image_status) { ASSERT_EQ(1U, states.size()); ASSERT_EQ(3, states[cls::rbd::MIRROR_IMAGE_STATUS_STATE_UNKNOWN]); + // Test remove of status + ASSERT_EQ(0, mirror_image_status_set(&ioctx, "uuid1", status1)); + ASSERT_EQ(0, mirror_image_status_remove(&ioctx, "uuid1")); + ASSERT_EQ(-ENOENT, mirror_image_instance_get(&ioctx, "uuid1", &read_instance)); + // Test statuses are not down after watcher is started ASSERT_EQ(0, mirror_image_status_set(&ioctx, "uuid1", status1)); -- 2.47.3