From: Patrick Donnelly Date: Thu, 25 Apr 2024 00:44:58 +0000 (-0400) Subject: mds: drop client metrics during recovery X-Git-Tag: testing/wip-khiremat-testing-20250306.135557-reef-debug~6^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b05f9ba13e8764322b2dde860de8e34be5897ad3;p=ceph-ci.git mds: drop client metrics during recovery Fixes: https://tracker.ceph.com/issues/65660 Signed-off-by: Patrick Donnelly (cherry picked from commit 83f445c54fe2c61bb9239abdb961be001e34c750) --- 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);