]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cephfs-mirror: shutdown filesystem/cluster connections on shutdown
authorVenky Shankar <vshankar@redhat.com>
Thu, 28 Jan 2021 08:52:48 +0000 (03:52 -0500)
committerVenky Shankar <vshankar@redhat.com>
Tue, 2 Feb 2021 14:25:20 +0000 (09:25 -0500)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/tools/cephfs_mirror/FSMirror.cc
src/tools/cephfs_mirror/FSMirror.h

index 39bae6a5cb2cd43b63414402873721338c46a6ca..7f2211a95f4787de6480d2d1a96c42301f6d6a21 100644 (file)
@@ -173,13 +173,12 @@ void FSMirror::shutdown(Context *on_finish) {
     if (m_on_init_finish != nullptr) {
       dout(10) << ": delaying shutdown -- init in progress" << dendl;
       m_on_shutdown_finish = new LambdaContext([this, on_finish](int r) {
-                                                 cleanup();
                                                  if (r < 0) {
                                                    on_finish->complete(0);
                                                    return;
                                                  }
                                                  m_on_shutdown_finish = on_finish;
-                                                 shutdown_mirror_watcher();
+                                                 shutdown_peer_replayers();
                                                });
       return;
     }
@@ -187,11 +186,18 @@ void FSMirror::shutdown(Context *on_finish) {
     m_on_shutdown_finish = on_finish;
   }
 
+  shutdown_peer_replayers();
+}
+
+void FSMirror::shutdown_peer_replayers() {
+  dout(20) << dendl;
+
   for (auto &[peer, peer_replayer] : m_peer_replayers) {
-      dout(5) << ": shutting down replayer for peer=" << peer << dendl;
-      shutdown_replayer(peer_replayer.get());
+    dout(5) << ": shutting down replayer for peer=" << peer << dendl;
+    shutdown_replayer(peer_replayer.get());
   }
   m_peer_replayers.clear();
+
   shutdown_mirror_watcher();
 }
 
@@ -287,12 +293,14 @@ void FSMirror::shutdown_instance_watcher() {
   std::scoped_lock locker(m_lock);
   Context *ctx = new C_CallbackAdapter<
     FSMirror, &FSMirror::handle_shutdown_instance_watcher>(this);
-  m_instance_watcher->shutdown(ctx);
+  m_instance_watcher->shutdown(new C_AsyncCallback<ContextWQ>(m_work_queue, ctx));
 }
 
 void FSMirror::handle_shutdown_instance_watcher(int r) {
   dout(20) << ": r=" << r << dendl;
 
+  cleanup();
+
   Context *on_init_finish = nullptr;
   Context *on_shutdown_finish = nullptr;
 
index f7939c143b7908c83990645a441ff9e4cd3e0b44..25aa97e863f9b2f7d25b5119d3d5c7a3c13d405e 100644 (file)
@@ -128,6 +128,8 @@ private:
   void init_mirror_watcher();
   void handle_init_mirror_watcher(int r);
 
+  void shutdown_peer_replayers();
+
   void shutdown_mirror_watcher();
   void handle_shutdown_mirror_watcher(int r);