#include "librbd/Operations.h"
#include "librbd/TrashWatcher.h"
#include "librbd/journal/ResetRequest.h"
+#include "librbd/mirror/GetInfoRequest.h"
#include "librbd/trash/MoveRequest.h"
#include "tools/rbd_mirror/Threads.h"
#include "tools/rbd_mirror/image_deleter/TrashMoveRequest.h"
} // anonymous namespace
-template <>
-struct Journal<librbd::MockTestImageCtx> {
- static Journal *s_instance;
-
- static void get_tag_owner(librados::IoCtx &io_ctx,
- const std::string &image_id,
- std::string *mirror_uuid,
- ContextWQ *work_queue,
- Context *on_finish) {
- ceph_assert(s_instance != nullptr);
- s_instance->get_tag_owner(image_id, mirror_uuid, on_finish);
- }
-
- MOCK_METHOD3(get_tag_owner, void(const std::string &, std::string *,
- Context *));
-
- Journal() {
- s_instance = this;
- }
-};
-
-Journal<librbd::MockTestImageCtx>* Journal<librbd::MockTestImageCtx>::s_instance = nullptr;
-
template<>
struct TrashWatcher<MockTestImageCtx> {
static TrashWatcher* s_instance;
} // namespace journal
+namespace mirror {
+
+template<>
+struct GetInfoRequest<librbd::MockTestImageCtx> {
+ static GetInfoRequest* s_instance;
+ cls::rbd::MirrorImage *mirror_image;
+ PromotionState *promotion_state;
+ std::string *primary_mirror_uuid;
+ Context *on_finish = nullptr;
+
+ static GetInfoRequest* create(librados::IoCtx& io_ctx,
+ ContextWQ* context_wq,
+ const std::string& image_id,
+ cls::rbd::MirrorImage *mirror_image,
+ PromotionState *promotion_state,
+ std::string* primary_mirror_uuid,
+ Context *on_finish) {
+ ceph_assert(s_instance != nullptr);
+ s_instance->mirror_image = mirror_image;
+ s_instance->promotion_state = promotion_state;
+ s_instance->primary_mirror_uuid = primary_mirror_uuid;
+ s_instance->on_finish = on_finish;
+ return s_instance;
+ }
+
+ GetInfoRequest() {
+ ceph_assert(s_instance == nullptr);
+ s_instance = this;
+ }
+ ~GetInfoRequest() {
+ s_instance = nullptr;
+ }
+
+ MOCK_METHOD0(send, void());
+};
+
+GetInfoRequest<librbd::MockTestImageCtx>* GetInfoRequest<librbd::MockTestImageCtx>::s_instance = nullptr;
+
+} // namespace mirror
namespace trash {
template <>
class TestMockImageDeleterTrashMoveRequest : public TestMockFixture {
public:
typedef TrashMoveRequest<librbd::MockTestImageCtx> MockTrashMoveRequest;
- typedef librbd::Journal<librbd::MockTestImageCtx> MockJournal;
typedef librbd::journal::ResetRequest<librbd::MockTestImageCtx> MockJournalResetRequest;
+ typedef librbd::mirror::GetInfoRequest<librbd::MockTestImageCtx> MockGetMirrorInfoRequest;
typedef librbd::trash::MoveRequest<librbd::MockTestImageCtx> MockLibrbdTrashMoveRequest;
typedef librbd::TrashWatcher<librbd::MockTestImageCtx> MockTrashWatcher;
Return(r)));
}
- void expect_get_tag_owner(MockJournal &mock_journal,
- const std::string &image_id,
- const std::string &tag_owner, int r) {
- EXPECT_CALL(mock_journal, get_tag_owner(image_id, _, _))
- .WillOnce(WithArgs<1, 2>(Invoke([this, tag_owner, r](std::string *owner, Context *on_finish) {
- *owner = tag_owner;
- m_threads->work_queue->queue(on_finish, r);
- })));
+ void expect_get_mirror_info(
+ MockGetMirrorInfoRequest &mock_get_mirror_info_request,
+ const cls::rbd::MirrorImage &mirror_image,
+ librbd::mirror::PromotionState promotion_state,
+ const std::string& primary_mirror_uuid, int r) {
+ EXPECT_CALL(mock_get_mirror_info_request, send())
+ .WillOnce(Invoke([this, &mock_get_mirror_info_request, mirror_image,
+ promotion_state, primary_mirror_uuid, r]() {
+ *mock_get_mirror_info_request.mirror_image = mirror_image;
+ *mock_get_mirror_info_request.promotion_state = promotion_state;
+ *mock_get_mirror_info_request.primary_mirror_uuid =
+ primary_mirror_uuid;
+ m_threads->work_queue->queue(
+ mock_get_mirror_info_request.on_finish, r);
+ }));
}
void expect_set_journal_policy(librbd::MockTestImageCtx &mock_image_ctx) {
}
void expect_mirror_image_set(const std::string& image_id,
- const std::string& global_image_id,
- cls::rbd::MirrorImageState mirror_image_state,
+ const cls::rbd::MirrorImage& mirror_image,
int r) {
- cls::rbd::MirrorImage mirror_image;
- mirror_image.global_image_id = global_image_id;
- mirror_image.state = mirror_image_state;
-
bufferlist bl;
encode(image_id, bl);
encode(mirror_image, bl);
librbd::ImageCtx *m_local_image_ctx;
};
-TEST_F(TestMockImageDeleterTrashMoveRequest, Success) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, SuccessJournal) {
librbd::MockTestImageCtx mock_image_ctx(*m_local_image_ctx);
librbd::MockExclusiveLock mock_exclusive_lock;
mock_image_ctx.exclusive_lock = &mock_exclusive_lock;
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, 0);
ASSERT_EQ(0, ctx.wait());
}
+TEST_F(TestMockImageDeleterTrashMoveRequest, SuccessSnapshot) {
+ librbd::MockTestImageCtx mock_image_ctx(*m_local_image_ctx);
+
+ InSequence seq;
+ expect_mirror_image_get_image_id("image id", 0);
+
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_SNAPSHOT,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_NON_PRIMARY,
+ "remote mirror uuid", 0);
+
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_SNAPSHOT,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
+
+ expect_set_journal_policy(mock_image_ctx);
+ expect_open(mock_image_ctx, 0);
+
+ MockLibrbdTrashMoveRequest mock_librbd_trash_move_request;
+ expect_trash_move(mock_librbd_trash_move_request, m_image_name, "image id",
+ {}, 0);
+ expect_mirror_image_remove(m_local_io_ctx, 0);
+
+ expect_close(mock_image_ctx, 0);
+ expect_destroy(mock_image_ctx);
+
+ MockTrashWatcher mock_trash_watcher;
+ expect_notify_image_added(mock_trash_watcher, "image id");
+
+ C_SaferCond ctx;
+ auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
+ false,
+ m_local_image_ctx->op_work_queue,
+ &ctx);
+ req->send();
+ ASSERT_EQ(0, ctx.wait());
+}
+
TEST_F(TestMockImageDeleterTrashMoveRequest, GetImageIdDNE) {
InSequence seq;
expect_mirror_image_get_image_id("image id", -ENOENT);
ASSERT_EQ(-EINVAL, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, GetTagOwnerLocalPrimary) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, GetMirrorInfoLocalPrimary) {
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::LOCAL_MIRROR_UUID, 0);
-
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_PRIMARY,
+ "remote mirror uuid", 0);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
ASSERT_EQ(-EPERM, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, GetTagOwnerOrphan) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, GetMirrorInfoOrphan) {
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
-
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
ASSERT_EQ(-EPERM, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, GetTagOwnerDNE) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, GetMirrorInfoDNE) {
librbd::MockTestImageCtx mock_image_ctx(*m_local_image_ctx);
librbd::MockExclusiveLock mock_exclusive_lock;
mock_image_ctx.exclusive_lock = &mock_exclusive_lock;
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id", "remote uuid", -ENOENT);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
-
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
-
- expect_set_journal_policy(mock_image_ctx);
- expect_open(mock_image_ctx, 0);
- expect_block_requests(mock_image_ctx);
- expect_acquire_lock(mock_image_ctx, 0);
-
- MockLibrbdTrashMoveRequest mock_librbd_trash_move_request;
- expect_trash_move(mock_librbd_trash_move_request, m_image_name, "image id",
- {}, 0);
- expect_mirror_image_remove(m_local_io_ctx, 0);
-
- expect_close(mock_image_ctx, 0);
- expect_destroy(mock_image_ctx);
-
- MockTrashWatcher mock_trash_watcher;
- expect_notify_image_added(mock_trash_watcher, "image id");
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", -ENOENT);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
m_local_image_ctx->op_work_queue,
&ctx);
req->send();
- ASSERT_EQ(0, ctx.wait());
+ ASSERT_EQ(-ENOENT, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, GetTagOwnerError) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, GetMirrorInfoError) {
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id", "remote uuid", -EINVAL);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", -EINVAL);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, -EINVAL);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
+
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, -EINVAL);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
ASSERT_EQ(-EINVAL, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, ResetJournalError) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, OpenImageError) {
+ librbd::MockTestImageCtx mock_image_ctx(*m_local_image_ctx);
+ librbd::MockExclusiveLock mock_exclusive_lock;
+ mock_image_ctx.exclusive_lock = &mock_exclusive_lock;
+
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, -EINVAL);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
+
+ expect_set_journal_policy(mock_image_ctx);
+ expect_open(mock_image_ctx, -EINVAL);
+ expect_destroy(mock_image_ctx);
C_SaferCond ctx;
auto req = MockTrashMoveRequest::create(m_local_io_ctx, "global image id",
ASSERT_EQ(-EINVAL, ctx.wait());
}
-TEST_F(TestMockImageDeleterTrashMoveRequest, OpenImageError) {
+TEST_F(TestMockImageDeleterTrashMoveRequest, ResetJournalError) {
librbd::MockTestImageCtx mock_image_ctx(*m_local_image_ctx);
librbd::MockExclusiveLock mock_exclusive_lock;
mock_image_ctx.exclusive_lock = &mock_exclusive_lock;
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
- expect_open(mock_image_ctx, -EINVAL);
+ expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, -EINVAL);
+
+ expect_close(mock_image_ctx, 0);
expect_destroy(mock_image_ctx);
C_SaferCond ctx;
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, -EINVAL);
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, 0);
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, 0);
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_ORPHAN,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, 0);
InSequence seq;
expect_mirror_image_get_image_id("image id", 0);
- MockJournal mock_journal;
- expect_get_tag_owner(mock_journal, "image id",
- librbd::Journal<>::ORPHAN_MIRROR_UUID, 0);
- expect_mirror_image_set("image id", "global image id",
- cls::rbd::MIRROR_IMAGE_STATE_DISABLING, 0);
+ MockGetMirrorInfoRequest mock_get_mirror_info_request;
+ expect_get_mirror_info(mock_get_mirror_info_request,
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_ENABLED},
+ librbd::mirror::PROMOTION_STATE_NON_PRIMARY,
+ "remote mirror uuid", 0);
- MockJournalResetRequest mock_journal_reset_request;
- expect_journal_reset(mock_journal_reset_request, 0);
+ expect_mirror_image_set("image id",
+ {cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
+ "global image id",
+ cls::rbd::MIRROR_IMAGE_STATE_DISABLING}, 0);
expect_set_journal_policy(mock_image_ctx);
expect_open(mock_image_ctx, 0);
+
+ MockJournalResetRequest mock_journal_reset_request;
+ expect_journal_reset(mock_journal_reset_request, 0);
+
expect_block_requests(mock_image_ctx);
expect_acquire_lock(mock_image_ctx, 0);