]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add perf counters to track current open/stale sessions
authorVenky Shankar <vshankar@redhat.com>
Wed, 27 Jun 2018 08:05:49 +0000 (04:05 -0400)
committerVenky Shankar <vshankar@redhat.com>
Tue, 6 Nov 2018 04:17:26 +0000 (09:47 +0530)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 315aa47a07429ba0a47fbd40078f0e8fd16b9ffd)

src/mds/SessionMap.cc
src/mds/SessionMap.h

index 4327013c57faa2170655d1cf95a9bff52c069f24..19056061d8ef7afc36bf621c08267821c06ec693 100644 (file)
@@ -52,6 +52,10 @@ void SessionMap::register_perfcounters()
       "Sessions added");
   plb.add_u64_counter(l_mdssm_session_remove, "session_remove",
       "Sessions removed");
+  plb.add_u64(l_mdssm_session_open, "sessions_open",
+              "Sessions currently open");
+  plb.add_u64(l_mdssm_session_stale, "sessions_stale",
+              "Sessions currently stale");
   logger = plb.create_perf_counters();
   g_ceph_context->get_perfcounters_collection()->add(logger);
 }
@@ -483,7 +487,15 @@ uint64_t SessionMap::set_state(Session *session, int s) {
     if (by_state_entry == by_state.end())
       by_state_entry = by_state.emplace(s, new xlist<Session*>).first;
     by_state_entry->second->push_back(&session->item_session_list);
+
+    // refresh number of sessions for states which have perf
+    // couters associated
+    logger->set(l_mdssm_session_open,
+                get_session_count_in_state(Session::STATE_OPEN));
+    logger->set(l_mdssm_session_stale,
+                get_session_count_in_state(Session::STATE_STALE));
   }
+
   return session->get_state_seq();
 }
 
index a1761400094f38a590de2d56911d719db9952135..f41f30763f9cce7a9e11d53939017895125e0d8e 100644 (file)
@@ -40,6 +40,8 @@ enum {
   l_mdssm_session_count,
   l_mdssm_session_add,
   l_mdssm_session_remove,
+  l_mdssm_session_open,
+  l_mdssm_session_stale,
   l_mdssm_last,
 };
 
@@ -666,6 +668,11 @@ public:
    */
   void save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
                      MDSGatherBuilder *gather_bld);
+
+private:
+  uint64_t get_session_count_in_state(int state) {
+    return !is_any_state(state) ? 0 : by_state[state]->size();
+  }
 };
 
 std::ostream& operator<<(std::ostream &out, const Session &s);