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();
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();
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();
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();
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();
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");
+ m_mock_threads, "siteA",
+ fsid);
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
template <typename I>
MirrorStatusUpdater<I>::MirrorStatusUpdater(
librados::IoCtx& io_ctx, Threads<I> *threads,
- const std::string& site_name)
+ const std::string& site_name, const std::string& fsid)
: m_io_ctx(io_ctx), m_threads(threads), m_site_name(site_name),
- m_lock(ceph::make_mutex("rbd::mirror::MirrorStatusUpdater " +
- stringify(m_io_ctx.get_id()))) {
+ 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 << ", "
<< "pool_id=" << m_io_ctx.get_id() << dendl;
}
void MirrorStatusUpdater<I>::init(Context* on_finish) {
dout(10) << dendl;
- if (!m_site_name.empty()) {
- librados::Rados rados(m_io_ctx);
- int r = rados.cluster_fsid(&m_fsid);
- if (r < 0) {
- derr << "failed to retrieve fsid: " << cpp_strerror(r) << dendl;
- m_threads->work_queue->queue(on_finish, r);
- return;
- }
- }
-
ceph_assert(!m_initialized);
m_initialized = true;
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);
+ librados::Rados rados(m_local_io_ctx);
+ std::string local_fsid;
+ int r = rados.cluster_fsid(&local_fsid);
+ if (r < 0) {
+ derr << "failed to retrieve local fsid: " << cpp_strerror(r) << dendl;
+ m_ret_val = r;
+ shut_down_local_status_updater();
+ return;
+ }
+
m_remote_status_updater.reset(MirrorStatusUpdater<I>::create(
- m_remote_io_ctx, m_threads, m_local_site_name));
+ m_remote_io_ctx, m_threads, m_local_site_name, local_fsid));
auto ctx = create_context_callback<
NamespaceReplayer<I>,
&NamespaceReplayer<I>::handle_init_remote_status_updater>(this);