]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephfs-mirror: shutdown ClusterWatcher on termination
authorVenky Shankar <vshankar@redhat.com>
Thu, 5 Aug 2021 08:35:10 +0000 (04:35 -0400)
committerVenky Shankar <vshankar@redhat.com>
Fri, 17 Sep 2021 00:58:17 +0000 (06:28 +0530)
Fixes: https://tracker.ceph.com/issues/52062
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 9b8d82009278cc275a71102914bcb34850ce03b8)

src/tools/cephfs_mirror/ClusterWatcher.cc
src/tools/cephfs_mirror/ClusterWatcher.h
src/tools/cephfs_mirror/Mirror.cc

index a5d04717a97bf5c7cf1e7c77fb99f2f45f547680..40aab756ee97fa1c68e7f1dc77b79217642771d5 100644 (file)
@@ -68,6 +68,7 @@ int ClusterWatcher::init() {
 void ClusterWatcher::shutdown() {
   dout(20) << dendl;
   std::scoped_lock locker(m_lock);
+  m_stopping = true;
   m_monc->sub_unwant("fsmap");
 }
 
@@ -84,6 +85,10 @@ void ClusterWatcher::handle_fsmap(const cref_t<MFSMap> &m) {
   std::map<Filesystem, uint64_t> fs_metadata_pools;
   {
     std::scoped_lock locker(m_lock);
+    if (m_stopping) {
+      return;
+    }
+
     // deleted filesystems are considered mirroring disabled
     for (auto it = m_filesystem_peers.begin(); it != m_filesystem_peers.end();) {
       if (!fsmap.filesystem_exists(it->first.fscid)) {
@@ -167,7 +172,10 @@ void ClusterWatcher::handle_fsmap(const cref_t<MFSMap> &m) {
     }
   }
 
-  m_monc->sub_got("fsmap", fsmap.get_epoch());
+  std::scoped_lock(m_lock);
+  if (!m_stopping) {
+    m_monc->sub_got("fsmap", fsmap.get_epoch());
+  } // else we have already done a sub_unwant()
 }
 
 } // namespace mirror
index e3bf6298b507cee9705e8cee5993801fbc14f898..a418898f555ef91a5798b410598501e06c0a43ea 100644 (file)
@@ -65,6 +65,7 @@ private:
   ServiceDaemon *m_service_daemon;
   Listener &m_listener;
 
+  bool m_stopping = false;
   std::map<Filesystem, Peers> m_filesystem_peers;
 
   void handle_fsmap(const cref_t<MFSMap> &m);
index efaa27106e51da94863bae15c4910c781c379202..88648f2b3a13c12cd13579e742266ef358c0000f 100644 (file)
@@ -222,7 +222,6 @@ Mirror::~Mirror() {
   {
     std::scoped_lock locker(m_lock);
     m_thread_pool->stop();
-    m_cluster_watcher.reset();
   }
 }
 
@@ -285,6 +284,7 @@ int Mirror::init(std::string &reason) {
 void Mirror::shutdown() {
   dout(20) << dendl;
   m_stopping = true;
+  m_cluster_watcher->shutdown();
   m_cond.notify_all();
 }