From 512b1d961a50da080460977e4c142e454c9e2b52 Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Thu, 22 Feb 2018 14:11:12 -0800 Subject: [PATCH] mds: add uptime to MDS status Fixes: https://tracker.ceph.com/issues/23094 Signed-off-by: Patrick Donnelly (cherry picked from commit 2498f0a81dc992d04efcb7baf6b739ec435c1b98) Conflicts: src/common/ceph_time.h: Added func mono_clock::zero --- src/common/ceph_time.h | 4 ++++ src/mds/MDSDaemon.cc | 6 +++++- src/mds/MDSDaemon.h | 12 ++++++++++++ src/mds/MDSRank.cc | 4 +++- src/mds/MDSRank.h | 11 +++++++++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/common/ceph_time.h b/src/common/ceph_time.h index 8479a0d5494c..d3d5dfa362e8 100644 --- a/src/common/ceph_time.h +++ b/src/common/ceph_time.h @@ -240,6 +240,10 @@ namespace ceph { return time_point(seconds(ts.tv_sec) + nanoseconds(ts.tv_nsec)); } + static time_point zero() { + return time_point::min(); + } + // A monotonic clock's timepoints are only meaningful to the // computer on which they were generated. Thus having an // optional skew is meaningless. diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 6fe1e2488de0..5a6df7809a81 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -90,7 +90,8 @@ MDSDaemon::MDSDaemon(const std::string &n, Messenger *m, MonClient *mc) : mgrc(m->cct, m), log_client(m->cct, messenger, &mc->monmap, LogClient::NO_FLAGS), mds_rank(NULL), - asok_hook(NULL) + asok_hook(NULL), + starttime(mono_clock::now()) { orig_argc = 0; orig_argv = NULL; @@ -180,6 +181,9 @@ void MDSDaemon::dump_status(Formatter *f) f->dump_unsigned("osdmap_epoch", 0); f->dump_unsigned("osdmap_epoch_barrier", 0); } + + f->dump_float("uptime", get_uptime().count()); + f->close_section(); // status } diff --git a/src/mds/MDSDaemon.h b/src/mds/MDSDaemon.h index 0e3bbaf26398..dda35e1bc631 100644 --- a/src/mds/MDSDaemon.h +++ b/src/mds/MDSDaemon.h @@ -45,6 +45,15 @@ class MDSDaemon : public Dispatcher, public md_config_obs_t { SafeTimer timer; + + mono_time get_starttime() const { + return starttime; + } + chrono::duration get_uptime() const { + mono_time now = mono_clock::now(); + return chrono::duration(now-starttime); + } + protected: Beacon beacon; @@ -152,6 +161,9 @@ protected: void handle_command(class MCommand *m); void handle_mds_map(class MMDSMap *m); void _handle_mds_map(MDSMap *oldmap); + +private: + mono_time starttime = mono_clock::zero(); }; diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 5b7c9744ec51..5db31eedb93a 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -89,7 +89,8 @@ MDSRank::MDSRank( messenger(msgr), monc(monc_), respawn_hook(respawn_hook_), suicide_hook(suicide_hook_), - standby_replaying(false) + standby_replaying(false), + starttime(mono_clock::now()) { hb = g_ceph_context->get_heartbeat_map()->add_worker("MDSRank", pthread_self()); @@ -2510,6 +2511,7 @@ void MDSRank::dump_status(Formatter *f) const } else if (state == MDSMap::STATE_CLIENTREPLAY) { dump_clientreplay_status(f); } + f->dump_float("rank_uptime", get_uptime().count()); } void MDSRank::dump_clientreplay_status(Formatter *f) const diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 170bb6ed5a5a..cacf893a8484 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -136,6 +136,14 @@ class MDSRank { // a separate lock here in future potentially. Mutex &mds_lock; + mono_time get_starttime() const { + return starttime; + } + chrono::duration get_uptime() const { + mono_time now = mono_clock::now(); + return chrono::duration(now-starttime); + } + class CephContext *cct; bool is_daemon_stopping() const; @@ -506,6 +514,9 @@ class MDSRank { /* Update MDSMap export_targets for this rank. Called on ::tick(). */ void update_targets(utime_t now); + +private: + mono_time starttime = mono_clock::zero(); }; /* This expects to be given a reference which it is responsible for. -- 2.47.3