From: Patrick Donnelly Date: Thu, 22 Feb 2018 22:11:12 +0000 (-0800) Subject: mds: add uptime to MDS status X-Git-Tag: v13.0.2~175^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F20547%2Fhead;p=ceph.git mds: add uptime to MDS status Fixes: https://tracker.ceph.com/issues/23094 Signed-off-by: Patrick Donnelly --- diff --git a/src/mds/MDSDaemon.cc b/src/mds/MDSDaemon.cc index 305d630239910..a516a6ff25cb7 100644 --- a/src/mds/MDSDaemon.cc +++ b/src/mds/MDSDaemon.cc @@ -89,7 +89,8 @@ MDSDaemon::MDSDaemon(std::string_view 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; @@ -179,6 +180,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 4ba26d54ee9d5..8d746b547ac5f 100644 --- a/src/mds/MDSDaemon.h +++ b/src/mds/MDSDaemon.h @@ -47,6 +47,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; @@ -154,6 +163,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 6650755e58fed..82d65ba0d5e49 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -91,7 +91,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()); @@ -2534,6 +2535,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 fa64d1d8b7adc..f6c95b9503552 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -138,6 +138,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; @@ -510,6 +518,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.