]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: drop client metrics during recovery 59866/head
authorPatrick Donnelly <pdonnell@redhat.com>
Thu, 25 Apr 2024 00:44:58 +0000 (20:44 -0400)
committerDhairya Parmar <dparmar@redhat.com>
Wed, 18 Sep 2024 20:51:41 +0000 (02:21 +0530)
Fixes: https://tracker.ceph.com/issues/65660
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 83f445c54fe2c61bb9239abdb961be001e34c750)

src/mds/MDSRank.cc
src/mds/MDSRank.h
src/mds/MetricsHandler.cc

index c766e9ef1f982aa5ed29c0bfc44af68607d1f425..8e437e268975c64e082dfcd5813ddd7adf25ea79 100644 (file)
@@ -2130,6 +2130,8 @@ void MDSRank::active_start()
 {
   dout(1) << "active_start" << dendl;
 
+  m_is_active = true;
+
   if (last_state == MDSMap::STATE_CREATING ||
       last_state == MDSMap::STATE_STARTING) {
     mdcache->open_root();
index 9ea6ddd96d13b0e3587775def8decf4862810d04..c4a8809b6e1a0e8e99697cf70399b5dc15c251a6 100644 (file)
@@ -15,6 +15,7 @@
 #ifndef MDS_RANK_H_
 #define MDS_RANK_H_
 
+#include <atomic>
 #include <string_view>
 
 #include <boost/asio/io_context.hpp>
@@ -226,6 +227,8 @@ class MDSRank {
     bool is_cluster_degraded() const { return cluster_degraded; }
     bool allows_multimds_snaps() const { return mdsmap->allows_multimds_snaps(); }
 
+    bool is_active_lockless() const { return m_is_active.load(); }
+
     bool is_cache_trimmable() const {
       return is_standby_replay() || is_clientreplay() || is_active() || is_stopping();
     }
@@ -669,6 +672,8 @@ private:
 
     mono_time starttime = mono_clock::zero();
     boost::asio::io_context& ioc;
+
+    std::atomic_bool m_is_active = false; /* accessed outside mds_lock */
 };
 
 class C_MDS_RetryMessage : public MDSInternalContext {
index b28b06b7ad294cbe0225b1d47ac3ea2d47c1dad4..9ad10b9d6e62e873a960ca126343745b963a33e2 100644 (file)
@@ -331,6 +331,11 @@ void MetricsHandler::handle_payload(Session *session, const UnknownPayload &payl
 }
 
 void MetricsHandler::handle_client_metrics(const cref_t<MClientMetrics> &m) {
+  if (!mds->is_active_lockless()) {
+    dout(20) << ": dropping metrics message during recovery" << dendl;
+    return;
+  }
+
   std::scoped_lock locker(lock);
 
   Session *session = mds->get_session(m);