From b05f9ba13e8764322b2dde860de8e34be5897ad3 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Wed, 24 Apr 2024 20:44:58 -0400 Subject: [PATCH] mds: drop client metrics during recovery Fixes: https://tracker.ceph.com/issues/65660 Signed-off-by: Patrick Donnelly (cherry picked from commit 83f445c54fe2c61bb9239abdb961be001e34c750) --- src/mds/MDSRank.cc | 2 ++ src/mds/MDSRank.h | 5 +++++ src/mds/MetricsHandler.cc | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 7d089e89b9c..33626f4dc7f 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -2103,6 +2103,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(); diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index a9e8da1817a..f4335d0c68c 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -15,6 +15,7 @@ #ifndef MDS_RANK_H_ #define MDS_RANK_H_ +#include #include #include @@ -224,6 +225,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(); } @@ -661,6 +664,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 { diff --git a/src/mds/MetricsHandler.cc b/src/mds/MetricsHandler.cc index 1fd4de4d2cf..9fc4c6122a4 100644 --- a/src/mds/MetricsHandler.cc +++ b/src/mds/MetricsHandler.cc @@ -332,6 +332,11 @@ void MetricsHandler::handle_payload(Session *session, const UnknownPayload &payl } void MetricsHandler::handle_client_metrics(const cref_t &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); -- 2.39.5