]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: gather perf stats on session adds, removes, counts
authorSage Weil <sage@inktank.com>
Sun, 8 Jun 2014 15:56:26 +0000 (08:56 -0700)
committerSage Weil <sage@inktank.com>
Sun, 8 Jun 2014 15:56:26 +0000 (08:56 -0700)
I found myself wanting to know this on a running cluster.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/Session.h

index 036c2f6712bb337411dad80631588a2efafd2c30..5bd6c2eaab442c2625992e1fa43292779a3f8324 100644 (file)
@@ -243,12 +243,6 @@ Monitor::~Monitor()
 }
 
 
-enum {
-  l_mon_first = 456000,
-  l_mon_last,
-};
-
-
 class AdminHook : public AdminSocketHook {
   Monitor *mon;
 public:
@@ -395,7 +389,10 @@ int Monitor::preinit()
   assert(!logger);
   {
     PerfCountersBuilder pcb(g_ceph_context, "mon", l_mon_first, l_mon_last);
-    // ...
+    pcb.add_u64(l_mon_num_sessions, "num_sessions");
+    pcb.add_u64_counter(l_mon_session_add, "session_add");
+    pcb.add_u64_counter(l_mon_session_rm, "session_rm");
+    pcb.add_u64_counter(l_mon_session_trim, "session_trim");
     logger = pcb.create_perf_counters();
     cct->get_perfcounters_collection()->add(logger);
   }
@@ -2776,6 +2773,8 @@ void Monitor::remove_session(MonSession *s)
   }
   s->con->set_priv(NULL);
   session_map.remove_session(s);
+  logger->set(l_mon_num_sessions, session_map.get_size());
+  logger->inc(l_mon_session_rm);
 }
 
 void Monitor::remove_all_sessions()
@@ -2783,7 +2782,9 @@ void Monitor::remove_all_sessions()
   while (!session_map.sessions.empty()) {
     MonSession *s = session_map.sessions.front();
     remove_session(s);
+    logger->inc(l_mon_session_rm);
   }
+  logger->set(l_mon_num_sessions, session_map.get_size());
 }
 
 void Monitor::send_command(const entity_inst_t& inst,
@@ -2882,6 +2883,9 @@ bool Monitor::_ms_dispatch(Message *m)
     m->get_connection()->set_priv(s->get());
     dout(10) << "ms_dispatch new session " << s << " for " << s->inst << dendl;
 
+    logger->set(l_mon_num_sessions, session_map.get_size());
+    logger->inc(l_mon_session_add);
+
     if (!src_is_mon) {
       dout(10) << "setting timeout on session" << dendl;
       // set an initial timeout here, so we will trim this session even if they don't
@@ -3835,12 +3839,14 @@ void Monitor::tick()
               << " (until " << s->until << " < now " << now << ")" << dendl;
       messenger->mark_down(s->con);
       remove_session(s);
+      logger->inc(l_mon_session_trim);
     } else if (!exited_quorum.is_zero()) {
       if (now > (exited_quorum + 2 * g_conf->mon_lease)) {
         // boot the client Session because we've taken too long getting back in
         dout(10) << " trimming session " << s->con << " " << s->inst
                 << " because we've been out of quorum too long" << dendl;
         messenger->mark_down(s->con);
+       logger->inc(l_mon_session_trim);
         remove_session(s);
       }
     }
index 2fb784229538eedaea4cc2905ca3f1d4860a7833..c3ed9ce589e993939898edf9116728e0eed08149 100644 (file)
@@ -85,6 +85,15 @@ enum {
   l_cluster_last,
 };
 
+enum {
+  l_mon_first = 456000,
+  l_mon_num_sessions,
+  l_mon_session_add,
+  l_mon_session_rm,
+  l_mon_session_trim,
+  l_mon_last,
+};
+
 class QuorumService;
 class PaxosService;
 
index d6e0a998991183e38d73ec262d6f703be96aef4b..6da8c9ba0a345bb099d116b8d714bcc854b333fd 100644 (file)
@@ -96,6 +96,10 @@ struct MonSessionMap {
     }
   }
 
+  unsigned get_size() const {
+    return sessions.size();
+  }
+
   void remove_session(MonSession *s) {
     assert(!s->closed);
     for (map<string,Subscription*>::iterator p = s->sub_map.begin(); p != s->sub_map.end(); ++p) {