From: Venky Shankar Date: Thu, 17 Oct 2024 15:01:32 +0000 (+0000) Subject: mds: make parts of mdlog reusable to be used by beacon X-Git-Tag: v20.0.0~669^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7d11c708b99d824f6caad66381a6ccb12e656c2d;p=ceph.git mds: make parts of mdlog reusable to be used by beacon Signed-off-by: Venky Shankar --- diff --git a/src/mds/Beacon.cc b/src/mds/Beacon.cc index 642d3428a27d..9977b4ba378c 100644 --- a/src/mds/Beacon.cc +++ b/src/mds/Beacon.cc @@ -320,16 +320,15 @@ void Beacon::notify_health(MDSRank const *mds) // Detect MDS_HEALTH_TRIM condition // Indicates MDS is not trimming promptly { - const auto log_max_segments = mds->mdlog->get_max_segments(); - const auto log_warn_factor = g_conf().get_val("mds_log_warn_factor"); - if (mds->mdlog->get_num_segments() > (size_t)(log_max_segments * log_warn_factor)) { + if (mds->mdlog->is_trim_slow()) { + auto num_segments = mds->mdlog->get_num_segments(); + auto max_segments = mds->mdlog->get_max_segments(); CachedStackStringStream css; - *css << "Behind on trimming (" << mds->mdlog->get_num_segments() - << "/" << log_max_segments << ")"; + *css << "Behind on trimming (" << num_segments << "/" << max_segments << ")"; MDSHealthMetric m(MDS_HEALTH_TRIM, HEALTH_WARN, css->strv()); - m.metadata["num_segments"] = stringify(mds->mdlog->get_num_segments()); - m.metadata["max_segments"] = stringify(log_max_segments); + m.metadata["num_segments"] = stringify(num_segments); + m.metadata["max_segments"] = stringify(max_segments); health.metrics.push_back(m); } } diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 0be568433efe..2e1212e8cf45 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -58,6 +58,7 @@ MDLog::MDLog(MDSRank* m) max_events = g_conf().get_val("mds_log_max_events"); skip_corrupt_events = g_conf().get_val("mds_log_skip_corrupt_events"); skip_unbounded_events = g_conf().get_val("mds_log_skip_unbounded_events"); + log_warn_factor = g_conf().get_val("mds_log_warn_factor"); upkeep_thread = std::thread(&MDLog::log_trim_upkeep, this); } @@ -656,6 +657,10 @@ void MDLog::try_to_commit_open_file_table(uint64_t last_seq) } } +bool MDLog::is_trim_slow() const { + return (segments.size() > (size_t)(max_segments * log_warn_factor)); +} + void MDLog::log_trim_upkeep(void) { dout(10) << dendl; @@ -1642,4 +1647,7 @@ void MDLog::handle_conf_change(const std::set& changed, const MDSMa if (changed.count("mds_log_trim_decay_rate")){ log_trim_counter = DecayCounter(g_conf().get_val("mds_log_trim_decay_rate")); } + if (changed.count("mds_log_warn_factor")) { + log_warn_factor = g_conf().get_val("mds_log_warn_factor"); + } } diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index e2ab4e686cdd..49e3c025dde0 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -173,6 +173,9 @@ public: // replay state std::map> pending_exports; + // beacon needs me too + bool is_trim_slow() const; + protected: struct PendingEvent { PendingEvent(LogEvent *e, Context* c, bool f=false) : le(e), fin(c), flush(f) {} @@ -313,6 +316,7 @@ private: std::set expired_segments; std::set expiring_segments; uint64_t events_since_last_major_segment = 0; + double log_warn_factor; // log trimming decay counter DecayCounter log_trim_counter;