return;
}
- get_mirror_image();
+ list_mirror_watchers();
}
template<typename I>
-void ListWatchersRequest<I>::get_mirror_image() {
- ldout(m_cct, 20) << dendl;
+void ListWatchersRequest<I>::list_mirror_watchers() {
if ((m_object_watchers.empty()) ||
(m_flags & LIST_WATCHERS_FILTER_OUT_MIRROR_INSTANCES) == 0 ||
(m_image_ctx.features & RBD_FEATURE_JOURNALING) == 0) {
return;
}
- librados::ObjectReadOperation op;
- cls_client::mirror_image_get_start(&op, m_image_ctx.id);
-
- using klass = ListWatchersRequest<I>;
- librados::AioCompletion *comp =
- create_rados_callback<klass, &klass::handle_get_mirror_image>(this);
- m_out_bl.clear();
- int r = m_image_ctx.md_ctx.aio_operate(RBD_MIRRORING, comp, &op, &m_out_bl);
- ceph_assert(r == 0);
- comp->release();
-}
-
-template<typename I>
-void ListWatchersRequest<I>::handle_get_mirror_image(int r) {
- ldout(m_cct, 20) << "r=" << r << dendl;
-
- if (r == -ENOENT) {
- finish(0);
- return;
- } else if (r < 0) {
- ldout(m_cct, 1) << "error retrieving mirror image: " << cpp_strerror(r)
- << dendl;
- }
-
- list_mirror_watchers();
-}
-
-template<typename I>
-void ListWatchersRequest<I>::list_mirror_watchers() {
ldout(m_cct, 20) << dendl;
librados::ObjectReadOperation op;
* LIST_IMAGE_WATCHERS
* |
* v
- * GET_MIRROR_IMAGE (skip if not needed)
- * |
- * v
* LIST_MIRROR_WATCHERS (skip if not needed)
* |
* v
void list_image_watchers();
void handle_list_image_watchers(int r);
- void get_mirror_image();
- void handle_get_mirror_image(int r);
-
void list_mirror_watchers();
void handle_list_mirror_watchers(int r);
expect_list_watchers(mock_image_ctx, RBD_MIRRORING, watchers, r);
}
- void expect_mirror_image_get(MockImageCtx &mock_image_ctx, int r) {
- EXPECT_CALL(get_mock_io_ctx(mock_image_ctx.md_ctx),
- exec(RBD_MIRRORING, _, StrEq("rbd"), StrEq("mirror_image_get"),
- _, _, _))
- .WillOnce(Return(r));
- }
-
void expect_get_watch_handle(MockImageWatcher &mock_watcher,
uint64_t watch_handle) {
EXPECT_CALL(mock_watcher, get_watch_handle())
InSequence seq;
expect_list_image_watchers(mock_image_ctx,
{watcher("a", 123), watcher("b", 456)}, 0);
- expect_mirror_image_get(mock_image_ctx, 0);
expect_list_mirror_watchers(mock_image_ctx, {watcher("b", 789)}, 0);
expect_get_watch_handle(*mock_image_ctx.image_watcher, 123);