From: Patrick Donnelly Date: Thu, 25 Apr 2024 00:44:58 +0000 (-0400) Subject: mds: drop client metrics during recovery X-Git-Tag: v19.2.3~458^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=819a7a20ec9d5e2e1947bd6bf30ac7807d1a80ed;p=ceph.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 c766e9ef1f982..8e437e268975c 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -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(); diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 9ea6ddd96d13b..c4a8809b6e1a0 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 @@ -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 { diff --git a/src/mds/MetricsHandler.cc b/src/mds/MetricsHandler.cc index b28b06b7ad294..9ad10b9d6e62e 100644 --- a/src/mds/MetricsHandler.cc +++ b/src/mds/MetricsHandler.cc @@ -331,6 +331,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);