This ping is now handled by the remote pool poller class.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
EXPECT_EQ(0, m_local_ioctx.create(RBD_MIRRORING, false));
m_local_status_updater = rbd::mirror::MirrorStatusUpdater<>::create(
- m_local_ioctx, m_threads.get(), "", "");
+ m_local_ioctx, m_threads.get(), "");
C_SaferCond status_updater_ctx;
m_local_status_updater->init(&status_updater_ctx);
EXPECT_EQ(0, status_updater_ctx.wait());
void expect_mirror_status_update(
const MirrorImageSiteStatuses& mirror_image_site_statuses,
- const std::string& site_name, const std::string& fsid, int r) {
+ const std::string& fsid, int r) {
EXPECT_CALL(*m_mock_local_io_ctx, aio_operate(_, _, _, _, _))
.WillOnce(Invoke([this](auto&&... args) {
int r = m_mock_local_io_ctx->do_aio_operate(decltype(args)(args)...);
return r;
}));
- if (!site_name.empty()) {
- // status updates to remote site include ping
- bufferlist in_bl;
- encode(site_name, in_bl);
- encode(fsid, in_bl);
- encode(static_cast<uint8_t>(cls::rbd::MIRROR_PEER_DIRECTION_TX), in_bl);
- EXPECT_CALL(*m_mock_local_io_ctx,
- exec(RBD_MIRRORING, _, StrEq("rbd"),
- StrEq("mirror_peer_ping"), ContentsEqual(in_bl), _, _))
- .WillOnce(Return(0));
- }
-
for (auto [global_image_id, mirror_image_status] :
mirror_image_site_statuses) {
mirror_image_status.fsid = fsid;
TEST_F(TestMockMirrorStatusUpdater, InitShutDown) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
TEST_F(TestMockMirrorStatusUpdater, InitStatusWatcherError) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
TEST_F(TestMockMirrorStatusUpdater, ShutDownStatusWatcherError) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
TEST_F(TestMockMirrorStatusUpdater, SmallBatch) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
Context* update_task = nullptr;
fire_timer_event(&timer_event, &update_task);
- expect_mirror_status_update(mirror_image_site_statuses, "", "", 0);
+ expect_mirror_status_update(mirror_image_site_statuses, "", 0);
update_task->complete(0);
shut_down_mirror_status_updater(mock_mirror_status_updater,
TEST_F(TestMockMirrorStatusUpdater, LargeBatch) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
Context* update_task = nullptr;
fire_timer_event(&timer_event, &update_task);
- expect_mirror_status_update(mirror_image_site_statuses_1, "", "", 0);
- expect_mirror_status_update(mirror_image_site_statuses_2, "", "", 0);
+ expect_mirror_status_update(mirror_image_site_statuses_1, "", 0);
+ expect_mirror_status_update(mirror_image_site_statuses_2, "", 0);
update_task->complete(0);
shut_down_mirror_status_updater(mock_mirror_status_updater,
TEST_F(TestMockMirrorStatusUpdater, OverwriteStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
expect_mirror_status_update(
{{"1", cls::rbd::MirrorImageSiteStatus{
"", cls::rbd::MIRROR_IMAGE_STATUS_STATE_REPLAYING, "description"}}},
- "", "", 0);
+ "", 0);
update_task->complete(0);
shut_down_mirror_status_updater(mock_mirror_status_updater,
TEST_F(TestMockMirrorStatusUpdater, OverwriteStatusInFlight) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
expect_mirror_status_update(
{{"1", cls::rbd::MirrorImageSiteStatus{
"", cls::rbd::MIRROR_IMAGE_STATUS_STATE_REPLAYING, "description"}}},
- "", "", 0);
+ "", 0);
update_task->complete(0);
TEST_F(TestMockMirrorStatusUpdater, ImmediateUpdate) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
expect_work_queue(false);
expect_mirror_status_update({{"1", cls::rbd::MirrorImageSiteStatus{}}},
- "", "", 0);
+ "", 0);
mock_mirror_status_updater.set_mirror_image_status("1", {}, true);
shut_down_mirror_status_updater(mock_mirror_status_updater,
TEST_F(TestMockMirrorStatusUpdater, RemoveIdleStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
TEST_F(TestMockMirrorStatusUpdater, RemoveInFlightStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
TEST_F(TestMockMirrorStatusUpdater, ShutDownWhileUpdating) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "", "");
+ m_mock_threads, "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
ASSERT_EQ(0, _rados->cluster_fsid(&fsid));
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
- m_mock_threads, "siteA",
- fsid);
+ m_mock_threads, fsid);
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
Context* update_task = nullptr;
fire_timer_event(&timer_event, &update_task);
- expect_mirror_status_update(mirror_image_site_statuses, "siteA", fsid, 0);
+ expect_mirror_status_update(mirror_image_site_statuses, fsid, 0);
update_task->complete(0);
shut_down_mirror_status_updater(mock_mirror_status_updater,
static MirrorStatusUpdater *create(librados::IoCtx &io_ctx,
Threads<librbd::MockTestImageCtx> *threads,
- const std::string& site_name,
const std::string& fsid) {
- ceph_assert(s_instance[site_name] != nullptr);
- return s_instance[site_name];
+ ceph_assert(s_instance[fsid] != nullptr);
+ return s_instance[fsid];
}
- MirrorStatusUpdater(const std::string& site_name) {
- s_instance[site_name] = this;
+ MirrorStatusUpdater(const std::string_view& fsid) {
+ s_instance[std::string{fsid}] = this;
}
MOCK_METHOD1(init, void(Context *));
class TestMockNamespaceReplayer : public TestMockFixture {
public:
+ static constexpr const std::string_view FSID = "00000000-1111-2222-3333-444444444444";
+
typedef NamespaceReplayer<librbd::MockTestImageCtx> MockNamespaceReplayer;
typedef ImageDeleter<librbd::MockTestImageCtx> MockImageDeleter;
typedef ImageMap<librbd::MockTestImageCtx> MockImageMap;
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, nullptr, nullptr);
C_SaferCond on_init;
auto mock_local_mirror_status_updater = new MockMirrorStatusUpdater{""};
expect_mirror_status_updater_init(*mock_local_mirror_status_updater, 0);
- auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{"siteA"};
+ auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{FSID};
expect_mirror_status_updater_init(*mock_remote_mirror_status_updater,
-EINVAL);
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, nullptr, nullptr);
C_SaferCond on_init;
auto mock_local_mirror_status_updater = new MockMirrorStatusUpdater{""};
expect_mirror_status_updater_init(*mock_local_mirror_status_updater, 0);
- auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{"siteA"};
+ auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{FSID};
expect_mirror_status_updater_init(*mock_remote_mirror_status_updater, 0);
auto mock_instance_replayer = new MockInstanceReplayer();
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, nullptr, nullptr);
C_SaferCond on_init;
auto mock_local_mirror_status_updater = new MockMirrorStatusUpdater{""};
expect_mirror_status_updater_init(*mock_local_mirror_status_updater, 0);
- auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{"siteA"};
+ auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{FSID};
expect_mirror_status_updater_init(*mock_remote_mirror_status_updater, 0);
auto mock_instance_replayer = new MockInstanceReplayer();
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, nullptr, nullptr);
C_SaferCond on_init;
auto mock_local_mirror_status_updater = new MockMirrorStatusUpdater{""};
expect_mirror_status_updater_init(*mock_local_mirror_status_updater, 0);
- auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{"siteA"};
+ auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{FSID};
expect_mirror_status_updater_init(*mock_remote_mirror_status_updater, 0);
auto mock_instance_replayer = new MockInstanceReplayer();
MockServiceDaemon mock_service_daemon;
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, &mock_service_daemon, nullptr);
C_SaferCond on_init;
auto mock_local_mirror_status_updater = new MockMirrorStatusUpdater{""};
expect_mirror_status_updater_init(*mock_local_mirror_status_updater, 0);
- auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{"siteA"};
+ auto mock_remote_mirror_status_updater = new MockMirrorStatusUpdater{FSID};
expect_mirror_status_updater_init(*mock_remote_mirror_status_updater, 0);
auto mock_instance_replayer = new MockInstanceReplayer();
MockServiceDaemon mock_service_daemon;
MockNamespaceReplayer namespace_replayer(
{}, m_local_io_ctx, m_remote_io_ctx, "local mirror uuid",
- "siteA", "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
+ "local peer uuid", {"remote mirror uuid", ""}, m_mock_threads,
nullptr, nullptr, &mock_service_daemon, nullptr);
C_SaferCond on_init;
librados::IoCtx &local_ioctx,
librados::IoCtx &remote_ioctx,
const std::string &local_mirror_uuid,
- const std::string &site_name,
const std::string& local_mirror_peer_uuid,
const RemotePoolMeta& remote_pool_meta,
Threads<librbd::MockTestImageCtx> *threads,
template <typename I>
MirrorStatusUpdater<I>::MirrorStatusUpdater(
- librados::IoCtx& io_ctx, Threads<I> *threads,
- const std::string& site_name, const std::string& fsid)
- : m_io_ctx(io_ctx), m_threads(threads), m_site_name(site_name),
- m_fsid(fsid), m_lock(ceph::make_mutex("rbd::mirror::MirrorStatusUpdater " +
- stringify(m_io_ctx.get_id()))) {
- dout(10) << "site_name=" << site_name << ", "
- << "fsid=" << fsid << ", "
+ librados::IoCtx& io_ctx, Threads<I> *threads, const std::string& fsid)
+ : m_io_ctx(io_ctx), m_threads(threads), m_fsid(fsid),
+ m_lock(ceph::make_mutex("rbd::mirror::MirrorStatusUpdater " +
+ stringify(m_io_ctx.get_id()))) {
+ dout(10) << "fsid=" << fsid << ", "
<< "pool_id=" << m_io_ctx.get_id() << dendl;
}
librados::ObjectWriteOperation op;
uint32_t op_count = 0;
- if (!m_site_name.empty()) {
- // updates to remote sites should include local site name
- // to ensure status includes this peer
- librbd::cls_client::mirror_peer_ping(&op, m_site_name, m_fsid);
- }
-
while (it != updating_global_image_ids.end() &&
op_count < MAX_UPDATES_PER_OP) {
auto& global_image_id = *it;
static MirrorStatusUpdater* create(librados::IoCtx& io_ctx,
Threads<ImageCtxT> *threads,
- const std::string& site_name,
const std::string& fsid) {
- return new MirrorStatusUpdater(io_ctx, threads, site_name, fsid);
+ return new MirrorStatusUpdater(io_ctx, threads, fsid);
}
MirrorStatusUpdater(librados::IoCtx& io_ctx, Threads<ImageCtxT> *threads,
- const std::string& site_name, const std::string& fsid);
+ const std::string& fsid);
~MirrorStatusUpdater();
void init(Context* on_finish);
librados::IoCtx m_io_ctx;
Threads<ImageCtxT>* m_threads;
- std::string m_site_name;
std::string m_fsid;
Context* m_timer_task = nullptr;
NamespaceReplayer<I>::NamespaceReplayer(
const std::string &name,
librados::IoCtx &local_io_ctx, librados::IoCtx &remote_io_ctx,
- const std::string &local_mirror_uuid, const std::string &local_site_name,
+ const std::string &local_mirror_uuid,
const std::string& local_mirror_peer_uuid,
const RemotePoolMeta& remote_pool_meta, Threads<I> *threads,
Throttler<I> *image_sync_throttler, Throttler<I> *image_deletion_throttler,
journal::CacheManagerHandler *cache_manager_handler) :
m_namespace_name(name),
m_local_mirror_uuid(local_mirror_uuid),
- m_local_site_name(local_site_name),
m_local_mirror_peer_uuid(local_mirror_peer_uuid),
m_remote_pool_meta(remote_pool_meta),
m_threads(threads), m_image_sync_throttler(image_sync_throttler),
ceph_assert(!m_local_status_updater);
m_local_status_updater.reset(MirrorStatusUpdater<I>::create(
- m_local_io_ctx, m_threads, "", ""));
+ m_local_io_ctx, m_threads, ""));
auto ctx = create_context_callback<
NamespaceReplayer<I>,
&NamespaceReplayer<I>::handle_init_local_status_updater>(this);
ceph_assert(ceph_mutex_is_locked(m_lock));
ceph_assert(!m_remote_status_updater);
- std::string local_site_name;
- if (m_namespace_name.empty()) {
- local_site_name = m_local_site_name;
- }
-
librados::Rados rados(m_local_io_ctx);
std::string local_fsid;
int r = rados.cluster_fsid(&local_fsid);
}
m_remote_status_updater.reset(MirrorStatusUpdater<I>::create(
- m_remote_io_ctx, m_threads, local_site_name, local_fsid));
+ m_remote_io_ctx, m_threads, local_fsid));
auto ctx = create_context_callback<
NamespaceReplayer<I>,
&NamespaceReplayer<I>::handle_init_remote_status_updater>(this);
librados::IoCtx &local_ioctx,
librados::IoCtx &remote_ioctx,
const std::string &local_mirror_uuid,
- const std::string &local_site_name,
const std::string &local_mirror_peer_uuid,
const RemotePoolMeta& remote_pool_meta,
Threads<ImageCtxT> *threads,
ServiceDaemon<ImageCtxT> *service_daemon,
journal::CacheManagerHandler *cache_manager_handler) {
return new NamespaceReplayer(name, local_ioctx, remote_ioctx,
- local_mirror_uuid, local_site_name,
- local_mirror_peer_uuid, remote_pool_meta,
- threads, image_sync_throttler,
- image_deletion_throttler, service_daemon,
- cache_manager_handler);
+ local_mirror_uuid, local_mirror_peer_uuid,
+ remote_pool_meta, threads,
+ image_sync_throttler, image_deletion_throttler,
+ service_daemon, cache_manager_handler);
}
NamespaceReplayer(const std::string &name,
librados::IoCtx &local_ioctx,
librados::IoCtx &remote_ioctx,
const std::string &local_mirror_uuid,
- const std::string &local_site_name,
const std::string& local_mirror_peer_uuid,
const RemotePoolMeta& remote_pool_meta,
Threads<ImageCtxT> *threads,
librados::IoCtx m_local_io_ctx;
librados::IoCtx m_remote_io_ctx;
std::string m_local_mirror_uuid;
- std::string m_local_site_name;
std::string m_local_mirror_peer_uuid;
RemotePoolMeta m_remote_pool_meta;
Threads<ImageCtxT> *m_threads;
ceph_assert(!m_remote_pool_meta.mirror_uuid.empty());
m_default_namespace_replayer.reset(NamespaceReplayer<I>::create(
- "", m_local_io_ctx, m_remote_io_ctx, m_local_mirror_uuid, m_site_name,
- m_peer.uuid, m_remote_pool_meta, m_threads, m_image_sync_throttler.get(),
+ "", m_local_io_ctx, m_remote_io_ctx, m_local_mirror_uuid, m_peer.uuid,
+ m_remote_pool_meta, m_threads, m_image_sync_throttler.get(),
m_image_deletion_throttler.get(), m_service_daemon,
m_cache_manager_handler));
for (auto &name : mirroring_namespaces) {
auto namespace_replayer = NamespaceReplayer<I>::create(
- name, m_local_io_ctx, m_remote_io_ctx, m_local_mirror_uuid, m_site_name,
- m_peer.uuid, m_remote_pool_meta, m_threads,
- m_image_sync_throttler.get(), m_image_deletion_throttler.get(),
- m_service_daemon, m_cache_manager_handler);
+ name, m_local_io_ctx, m_remote_io_ctx, m_local_mirror_uuid, m_peer.uuid,
+ m_remote_pool_meta, m_threads, m_image_sync_throttler.get(),
+ m_image_deletion_throttler.get(), m_service_daemon,
+ m_cache_manager_handler);
auto on_init = new LambdaContext(
[this, namespace_replayer, name, &mirroring_namespaces,
ctx=gather_ctx->new_sub()](int r) {