}));
}
- void expect_prune_non_primary_snapshot(librbd::MockTestImageCtx& mock_image_ctx,
- uint64_t snap_id, int r) {
+ void expect_prune_mirror_snapshot(librbd::MockTestImageCtx& mock_image_ctx,
+ uint64_t snap_id, int r) {
EXPECT_CALL(mock_image_ctx, get_snap_info(snap_id))
.WillOnce(Invoke([&mock_image_ctx](uint64_t snap_id) -> librbd::SnapInfo* {
auto it = mock_image_ctx.snap_info.find(snap_id);
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
4, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
- expect_prune_non_primary_snapshot(mock_local_image_ctx, 11, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 11, 0);
// idle
expect_load_image_meta(mock_image_meta, false, 0);
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
2, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
- expect_prune_non_primary_snapshot(mock_local_image_ctx, 11, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 11, 0);
// idle
expect_load_image_meta(mock_image_meta, false, 0);
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_local_image_ctx.snap_info = {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}},
{12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
false, 0);
expect_notify_sync_complete(mock_instance_watcher, mock_local_image_ctx.id);
- // idle
+ // prune primary demotion snap1
expect_load_image_meta(mock_image_meta, false, 0);
expect_is_refresh_required(mock_remote_image_ctx, true);
expect_refresh(
mock_local_image_ctx, {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ 0, {}, 0, 0, {}}},
+ {12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
+ cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
+ 2, true, 0, {}},
0, {}, 0, 0, {}}},
+ }, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 11, 0);
+
+ // idle
+ expect_load_image_meta(mock_image_meta, false, 0);
+ expect_is_refresh_required(mock_remote_image_ctx, false);
+ expect_is_refresh_required(mock_local_image_ctx, true);
+ expect_refresh(
+ mock_local_image_ctx, {
{12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
2, true, 0, {}},
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
expect_load_image_meta(mock_image_meta, false, 0);
expect_is_refresh_required(mock_remote_image_ctx, false);
expect_is_refresh_required(mock_local_image_ctx, false);
- expect_prune_non_primary_snapshot(mock_local_image_ctx, 12, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 12, 0);
// sync snap2
expect_load_image_meta(mock_image_meta, false, 0);
2, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
- expect_prune_non_primary_snapshot(mock_local_image_ctx, 11, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 11, 0);
// idle
expect_load_image_meta(mock_image_meta, false, 0);
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_local_image_ctx.snap_info = {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}},
{12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
expect_load_image_meta(mock_image_meta, false, 0);
expect_is_refresh_required(mock_remote_image_ctx, false);
expect_is_refresh_required(mock_local_image_ctx, false);
- expect_prune_non_primary_snapshot(mock_local_image_ctx, 12, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 12, 0);
// sync snap2
expect_load_image_meta(mock_image_meta, false, 0);
mock_local_image_ctx, {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
MockSnapshotCopyRequest mock_snapshot_copy_request;
false, 0);
expect_notify_sync_complete(mock_instance_watcher, mock_local_image_ctx.id);
- // idle
+ // prune primary demotion snap1
expect_load_image_meta(mock_image_meta, false, 0);
expect_is_refresh_required(mock_remote_image_ctx, true);
expect_refresh(
mock_local_image_ctx, {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}},
{13U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
2, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 11, 0);
+
+ // idle
+ expect_load_image_meta(mock_image_meta, false, 0);
+ expect_is_refresh_required(mock_remote_image_ctx, false);
+ expect_is_refresh_required(mock_local_image_ctx, true);
+ expect_refresh(
+ mock_local_image_ctx, {
+ {13U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
+ cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
+ 2, true, 0, {}},
+ 0, {}, 0, 0, {}}},
+ }, 0);
// wake-up replayer
update_watch_ctx->handle_notify();
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
expect_refresh(
mock_local_image_ctx, {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
- cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "remote mirror uuid",
- 1, true, 0, {}},
+ cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED,
+ {"local mirror peer uuid"}, "remote mirror uuid", 1, true, 0, {}},
0, {}, 0, 0, {}}},
}, 0);
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_local_image_ctx.snap_info = {
{1U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY,
- {"remote mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}}};
// idle
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
expect_refresh(
mock_local_image_ctx, {
{11U, librbd::SnapInfo{"snap1", cls::rbd::MirrorSnapshotNamespace{
- cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED, {"uuid"},
- "remote mirror uuid", 1, true, 0, {{1, CEPH_NOSNAP}}},
+ cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED,
+ {"local mirror peer uuid"}, "remote mirror uuid", 1, true, 0,
+ {{1, CEPH_NOSNAP}}},
0, {}, 0, 0, {}}},
}, 0);
mock_image_meta);
MockReplayerListener mock_replayer_listener;
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_image_meta);
MockReplayerListener mock_replayer_listener;
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
{11U, librbd::SnapInfo{"snap1", cls::rbd::UserSnapshotNamespace{},
0, {}, 0, 0, {}}},
{12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
- cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED, {}, "", CEPH_NOSNAP,
- true, 0, {}},
+ cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}}};
// attach to promoted remote image
false, 0);
expect_notify_sync_complete(mock_instance_watcher, mock_local_image_ctx.id);
- // idle
+ // prune primary demotion snap2
expect_load_image_meta(mock_image_meta, false, 0);
expect_is_refresh_required(mock_remote_image_ctx, true);
expect_refresh(
0, {}, 0, 0, {}}},
{2U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED,
- {"remote mirror peer uuid"}, "local mirror uuid", 12U, true, 0, {}},
+ {}, "local mirror uuid", 12U, true, 0, {}},
0, {}, 0, 0, {}}},
{3U, librbd::SnapInfo{"snap3", cls::rbd::MirrorSnapshotNamespace{
- cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP, true, 0,
- {}},
+ cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {"remote mirror peer uuid"},
+ "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}}
}, 0);
expect_is_refresh_required(mock_local_image_ctx, true);
{11U, librbd::SnapInfo{"snap1", cls::rbd::UserSnapshotNamespace{},
0, {}, 0, 0, {}}},
{12U, librbd::SnapInfo{"snap2", cls::rbd::MirrorSnapshotNamespace{
- cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED, {}, "", CEPH_NOSNAP,
- true, 0, {}},
+ cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED,
+ {"local mirror peer uuid"}, "", CEPH_NOSNAP, true, 0, {}},
0, {}, 0, 0, {}}},
{13U, librbd::SnapInfo{"snap3", cls::rbd::MirrorSnapshotNamespace{
cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {},
{{1, 11}, {2, 12}, {3, CEPH_NOSNAP}}},
0, {}, 0, 0, {}}},
}, 0);
+ expect_prune_mirror_snapshot(mock_local_image_ctx, 12, 0);
+
+ // idle
+ expect_load_image_meta(mock_image_meta, false, 0);
+ expect_is_refresh_required(mock_remote_image_ctx, false);
+ expect_is_refresh_required(mock_local_image_ctx, true);
+ expect_refresh(
+ mock_local_image_ctx, {
+ {11U, librbd::SnapInfo{"snap1", cls::rbd::UserSnapshotNamespace{},
+ 0, {}, 0, 0, {}}},
+ {13U, librbd::SnapInfo{"snap3", cls::rbd::MirrorSnapshotNamespace{
+ cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {},
+ "remote mirror uuid", 3, true, 0,
+ {{1, 11}, {2, 12}, {3, CEPH_NOSNAP}}},
+ 0, {}, 0, 0, {}}},
+ }, 0);
// wake-up replayer
update_watch_ctx->handle_notify();
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
{"remote mirror uuid", "remote mirror peer uuid"});
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
C_SaferCond shutdown_ctx;
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),
mock_remote_image_ctx,
mock_image_meta);
MockReplayer mock_replayer{&mock_threads, &mock_instance_watcher,
- "local mirror uuid", &m_pool_meta_cache,
- &mock_state_builder, &mock_replayer_listener};
+ "local mirror uuid", "local mirror peer uuid",
+ &m_pool_meta_cache, &mock_state_builder,
+ &mock_replayer_listener};
C_SaferCond shutdown_ctx;
m_pool_meta_cache.set_remote_pool_meta(
m_remote_fsid, m_remote_io_ctx.get_id(),