]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: peer_ping should send the local fsid to the remote 31950/head
authorJason Dillaman <dillaman@redhat.com>
Mon, 2 Dec 2019 20:45:04 +0000 (15:45 -0500)
committerJason Dillaman <dillaman@redhat.com>
Mon, 2 Dec 2019 20:45:04 +0000 (15:45 -0500)
It was previously incorrectly sending the remote cluster's
fsid to the remote cluster.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/test/rbd_mirror/test_ImageReplayer.cc
src/test/rbd_mirror/test_mock_MirrorStatusUpdater.cc
src/test/rbd_mirror/test_mock_NamespaceReplayer.cc
src/tools/rbd_mirror/MirrorStatusUpdater.cc
src/tools/rbd_mirror/MirrorStatusUpdater.h
src/tools/rbd_mirror/NamespaceReplayer.cc

index 8071caac5d53d21c495147f6220a5f6c2f7e7011..c56fffc1d18c55be1b427233c47ac5309b04b3e4 100644 (file)
@@ -132,7 +132,7 @@ public:
     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());
index ae379b60bb2e0644fd5e7cf4029f992f696f6c08..8964d7a84ecad26e3d052289dbc2766911966b59 100644 (file)
@@ -247,7 +247,7 @@ public:
 
 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();
 
@@ -261,7 +261,7 @@ TEST_F(TestMockMirrorStatusUpdater, InitShutDown) {
 
 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();
 
@@ -278,7 +278,7 @@ TEST_F(TestMockMirrorStatusUpdater, InitStatusWatcherError) {
 
 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();
 
@@ -297,7 +297,7 @@ TEST_F(TestMockMirrorStatusUpdater, ShutDownStatusWatcherError) {
 
 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();
 
@@ -328,7 +328,7 @@ TEST_F(TestMockMirrorStatusUpdater, SmallBatch) {
 
 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();
 
@@ -369,7 +369,7 @@ TEST_F(TestMockMirrorStatusUpdater, LargeBatch) {
 
 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();
 
@@ -399,7 +399,7 @@ TEST_F(TestMockMirrorStatusUpdater, OverwriteStatus) {
 
 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();
 
@@ -440,7 +440,7 @@ TEST_F(TestMockMirrorStatusUpdater, OverwriteStatusInFlight) {
 
 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();
 
@@ -461,7 +461,7 @@ TEST_F(TestMockMirrorStatusUpdater, ImmediateUpdate) {
 
 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();
 
@@ -484,7 +484,7 @@ TEST_F(TestMockMirrorStatusUpdater, RemoveIdleStatus) {
 
 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();
 
@@ -518,7 +518,7 @@ TEST_F(TestMockMirrorStatusUpdater, RemoveInFlightStatus) {
 
 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();
 
@@ -557,7 +557,8 @@ TEST_F(TestMockMirrorStatusUpdater, MirrorPeerSitePing) {
   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();
 
index 162d2abef02059fe05a3ad301347ae6b93c9825a..66d772cea8feddb15349cb88db68839d29bfa36f 100644 (file)
@@ -176,7 +176,8 @@ struct MirrorStatusUpdater<librbd::MockTestImageCtx> {
 
   static MirrorStatusUpdater *create(librados::IoCtx &io_ctx,
                                      Threads<librbd::MockTestImageCtx> *threads,
-                                     const std::string& site_name) {
+                                     const std::string& site_name,
+                                     const std::string& fsid) {
     ceph_assert(s_instance[site_name] != nullptr);
     return s_instance[site_name];
   }
index 0fd042e828dcdab5e34d819a614ac76420476e3c..ecd544d9b24d48dfe04257692a7fde8c9f417f5a 100644 (file)
@@ -31,11 +31,12 @@ using librbd::util::create_rados_callback;
 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;
 }
 
@@ -49,16 +50,6 @@ template <typename I>
 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;
 
index 90e4697953c19c447512c5837a5cf986fc3ad15a..7615cc4c8f5a122147b7f189cfaaeed3a19828e1 100644 (file)
@@ -27,12 +27,13 @@ public:
 
   static MirrorStatusUpdater* create(librados::IoCtx& io_ctx,
                                      Threads<ImageCtxT> *threads,
-                                     const std::string& site_name) {
-    return new MirrorStatusUpdater(io_ctx, threads, site_name);
+                                     const std::string& site_name,
+                                     const std::string& fsid) {
+    return new MirrorStatusUpdater(io_ctx, threads, site_name, fsid);
   }
 
   MirrorStatusUpdater(librados::IoCtx& io_ctx, Threads<ImageCtxT> *threads,
-                      const std::string& site_name);
+                      const std::string& site_name, const std::string& fsid);
   ~MirrorStatusUpdater();
 
   void init(Context* on_finish);
index 983682159dcea7039a9cf2f50b6fcf3699311bab..ec4d10067574d76adfa1472fad3f052b2c755e17 100644 (file)
@@ -262,7 +262,7 @@ void NamespaceReplayer<I>::init_local_status_updater() {
   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);
@@ -297,8 +297,18 @@ void NamespaceReplayer<I>::init_remote_status_updater() {
   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);