{
dout(1) << "active_start" << dendl;
+ m_is_active = true;
+
if (last_state == MDSMap::STATE_CREATING ||
last_state == MDSMap::STATE_STARTING) {
mdcache->open_root();
#ifndef MDS_RANK_H_
#define MDS_RANK_H_
+#include <atomic>
#include <string_view>
#include <boost/asio/io_context.hpp>
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();
}
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 {
}
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);