]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: automate MDS object count tracking 13591/head
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 22 Feb 2017 02:44:42 +0000 (21:44 -0500)
committerPatrick Donnelly <pdonnell@redhat.com>
Wed, 22 Feb 2017 21:08:48 +0000 (16:08 -0500)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/include/counter.h [new file with mode: 0644]
src/mds/CDentry.h
src/mds/CDir.cc
src/mds/CDir.h
src/mds/CInode.h
src/mds/Capability.h
src/mds/MDCache.cc
src/mds/MDSRank.cc
src/mds/mdstypes.h

diff --git a/src/include/counter.h b/src/include/counter.h
new file mode 100644 (file)
index 0000000..d161c0b
--- /dev/null
@@ -0,0 +1,54 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2017 Red Hat, Inc.
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#ifndef CEPH_COUNTER_H
+#define CEPH_COUNTER_H
+
+template <typename T>
+class Counter {
+public:
+  Counter() {
+    _count()++;
+    _increments()++;
+  }
+  Counter(const Counter &rhs) {
+    _count()++;
+    _increments()++;
+  }
+  Counter(Counter &&rhs) {}
+  ~Counter() {
+    _count()--;
+  }
+  static unsigned long count() {
+    return _count();
+  }
+  static unsigned long increments() {
+    return _increments();
+  }
+  static unsigned long decrements() {
+    return increments()-count();
+  }
+
+private:
+  static unsigned long &_count() {
+    static unsigned long c;
+    return c;
+  }
+  static unsigned long &_increments() {
+    static unsigned long i;
+    return i;
+  }
+};
+
+#endif
index d280eece5d5c369df74dad0c0a5ae6d2c96f16d9..f5f9510f89a41ec4f9fb0a519189cebddb1e27cc 100644 (file)
@@ -20,6 +20,7 @@
 #include <string>
 #include <set>
 
+#include "include/counter.h"
 #include "include/types.h"
 #include "include/buffer_fwd.h"
 #include "include/lru.h"
@@ -46,7 +47,7 @@ class Session;
 bool operator<(const CDentry& l, const CDentry& r);
 
 // dentry
-class CDentry : public MDSCacheObject, public LRUObject {
+class CDentry : public MDSCacheObject, public LRUObject, public Counter<CDentry> {
 public:
   friend class CDir;
 
@@ -106,8 +107,6 @@ public:
     versionlock(this, &versionlock_type),
     dir(0),
     version(0), projected_version(0) {
-    g_num_dn++;
-    g_num_dna++;
   }
   CDentry(const std::string& n, __u32 h, inodeno_t ino, unsigned char dt,
          snapid_t f, snapid_t l) :
@@ -118,16 +117,9 @@ public:
     versionlock(this, &versionlock_type),
     dir(0),
     version(0), projected_version(0) {
-    g_num_dn++;
-    g_num_dna++;
     linkage.remote_ino = ino;
     linkage.remote_d_type = dt;
   }
-  ~CDentry() {
-    g_num_dn--;
-    g_num_dns++;
-  }
-
 
   static void *operator new(size_t num_bytes) {
     void *n = pool.malloc();
index 1faa02e4e937018f9d313f11140ed41dba36c96f..a69a267779f5ac1d5d14ff9e43df0b27f77791c5 100644 (file)
@@ -198,9 +198,6 @@ CDir::CDir(CInode *in, frag_t fg, MDCache *mdcache, bool auth) :
   num_dentries_auth_subtree_nested(0),
   dir_auth(CDIR_AUTH_DEFAULT)
 {
-  g_num_dir++;
-  g_num_dira++;
-
   state = STATE_INITIAL;
 
   memset(&fnode, 0, sizeof(fnode));
index 8eb2cbc27e8c0d60b3f1e876e7117312ae644639..06ae9a487b664e268051f0a031204838bf7a5c66 100644 (file)
@@ -17,6 +17,7 @@
 #ifndef CEPH_CDIR_H
 #define CEPH_CDIR_H
 
+#include "include/counter.h"
 #include "include/types.h"
 #include "include/buffer_fwd.h"
 #include "common/bloom_filter.hpp"
@@ -41,7 +42,7 @@ class MDCache;
 struct ObjectOperation;
 
 ostream& operator<<(ostream& out, const class CDir& dir);
-class CDir : public MDSCacheObject {
+class CDir : public MDSCacheObject, public Counter<CDir> {
   friend ostream& operator<<(ostream& out, const class CDir& dir);
 
   /*
@@ -404,10 +405,6 @@ protected:
 
  public:
   CDir(CInode *in, frag_t fg, MDCache *mdcache, bool auth);
-  ~CDir() {
-    g_num_dir--;
-    g_num_dirs++;
-  }
 
   const scrub_info_t *scrub_info() const {
     if (!scrub_infop) {
index b8bd8206fd17735fb3292aca8a83abe7546c5e29..484aed549e077ba58c2918e07e76774bc0862c3d 100644 (file)
@@ -18,6 +18,7 @@
 #define CEPH_CINODE_H
 
 #include "common/config.h"
+#include "include/counter.h"
 #include "include/elist.h"
 #include "include/types.h"
 #include "include/lru.h"
@@ -127,7 +128,7 @@ public:
 WRITE_CLASS_ENCODER_FEATURES(InodeStore)
 
 // cached inode wrapper
-class CInode : public MDSCacheObject, public InodeStoreBase {
+class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CInode> {
   /*
    * This class uses a boost::pool to handle allocation. This is *not*
    * thread-safe, so don't do allocations from multiple threads!
@@ -681,14 +682,10 @@ public:
     policylock(this, &policylock_type),
     loner_cap(-1), want_loner_cap(-1)
   {
-    g_num_ino++;
-    g_num_inoa++;
     state = 0;  
     if (auth) state_set(STATE_AUTH);
   }
   ~CInode() {
-    g_num_ino--;
-    g_num_inos++;
     close_dirfrags();
     close_snaprealm();
     clear_file_locks();
index b8ea0a1e732b6c6088eaae38d055a317a15e64d7..e66f8c7e426c1ede4c30bff73ce2a958c8e50aff 100644 (file)
@@ -16,6 +16,7 @@
 #ifndef CEPH_CAPABILITY_H
 #define CEPH_CAPABILITY_H
 
+#include "include/counter.h"
 #include "include/buffer_fwd.h"
 #include "include/xlist.h"
 
@@ -63,7 +64,7 @@ namespace ceph {
   class Formatter;
 }
 
-class Capability {
+class Capability : public Counter<Capability> {
 public:
   struct Export {
     int64_t cap_id;
@@ -123,14 +124,8 @@ public:
     last_issue(0),
     mseq(0),
     suppress(0), state(0) {
-    g_num_cap++;
-    g_num_capa++;
   }
   Capability(const Capability& other);  // no copying
-  ~Capability() {
-    g_num_cap--;
-    g_num_caps++;
-  }
 
 
   static void *operator new(size_t num_bytes) {
index e5773dd30e822f2bcd4a67a2a1445cdf745dcb19..7d6343fef6800cf951e3ab88f896eac2283e7884 100644 (file)
@@ -111,21 +111,6 @@ static ostream& _prefix(std::ostream *_dout, MDSRank *mds) {
   return *_dout << "mds." << mds->get_nodeid() << ".cache ";
 }
 
-long g_num_ino = 0;
-long g_num_dir = 0;
-long g_num_dn = 0;
-long g_num_cap = 0;
-
-long g_num_inoa = 0;
-long g_num_dira = 0;
-long g_num_dna = 0;
-long g_num_capa = 0;
-
-long g_num_inos = 0;
-long g_num_dirs = 0;
-long g_num_dns = 0;
-long g_num_caps = 0;
-
 set<int> SimpleLock::empty_gather_set;
 
 
index 0264ae412e04e6462a8359816f36ad9ae117cabb..58a196985eb03f7aa27473813dedd1fa9d716c7a 100644 (file)
@@ -546,19 +546,19 @@ bool MDSRank::_dispatch(Message *m, bool new_msg)
   */
 
   if (mlogger) {
-    mlogger->set(l_mdm_ino, g_num_ino);
-    mlogger->set(l_mdm_dir, g_num_dir);
-    mlogger->set(l_mdm_dn, g_num_dn);
-    mlogger->set(l_mdm_cap, g_num_cap);
-
-    mlogger->inc(l_mdm_inoa, g_num_inoa);  g_num_inoa = 0;
-    mlogger->inc(l_mdm_inos, g_num_inos);  g_num_inos = 0;
-    mlogger->inc(l_mdm_dira, g_num_dira);  g_num_dira = 0;
-    mlogger->inc(l_mdm_dirs, g_num_dirs);  g_num_dirs = 0;
-    mlogger->inc(l_mdm_dna, g_num_dna);  g_num_dna = 0;
-    mlogger->inc(l_mdm_dns, g_num_dns);  g_num_dns = 0;
-    mlogger->inc(l_mdm_capa, g_num_capa);  g_num_capa = 0;
-    mlogger->inc(l_mdm_caps, g_num_caps);  g_num_caps = 0;
+    mlogger->set(l_mdm_ino, CInode::count());
+    mlogger->set(l_mdm_dir, CDir::count());
+    mlogger->set(l_mdm_dn, CDentry::count());
+    mlogger->set(l_mdm_cap, Capability::count());
+
+    mlogger->set(l_mdm_inoa, CInode::increments());
+    mlogger->set(l_mdm_inos, CInode::decrements());
+    mlogger->set(l_mdm_dira, CDir::increments());
+    mlogger->set(l_mdm_dirs, CDir::decrements());
+    mlogger->set(l_mdm_dna, CDentry::increments());
+    mlogger->set(l_mdm_dns, CDentry::decrements());
+    mlogger->set(l_mdm_capa, Capability::increments());
+    mlogger->set(l_mdm_caps, Capability::decrements());
 
     mlogger->set(l_mdm_buf, buffer::get_total_alloc());
   }
index 961fbf8d37809ff4a7f1e09e0991fb65943e90d0..9a6779307d686c1da7f4e6e505d8fa511f1c4346 100644 (file)
@@ -113,11 +113,6 @@ class mds_role_t
 std::ostream& operator<<(std::ostream &out, const mds_role_t &role);
 
 
-extern long g_num_ino, g_num_dir, g_num_dn, g_num_cap;
-extern long g_num_inoa, g_num_dira, g_num_dna, g_num_capa;
-extern long g_num_inos, g_num_dirs, g_num_dns, g_num_caps;
-
-
 // CAPS
 
 inline string gcap_string(int cap)