]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds/MDSMap : use arrary_section for mds stat
authorYou Ji <youji@ebay.com>
Thu, 7 Dec 2017 03:02:16 +0000 (20:02 -0700)
committerYou Ji <youji@ebay.com>
Mon, 18 Dec 2017 01:59:03 +0000 (18:59 -0700)
http://tracker.ceph.com/issues/22338
Signed-off-by: You Ji <youji@ebay.com>
src/mds/MDSMap.cc
src/pybind/ceph_volume_client.py

index ea154ff18bb9be6a2596f95ded191c7f6af50c70..7678635e53421c8d22f87b9e0aaa6ab316d91598 100644 (file)
@@ -153,11 +153,9 @@ void MDSMap::dump(Formatter *f) const
   for (set<mds_rank_t>::const_iterator p = in.begin(); p != in.end(); ++p)
     f->dump_int("mds", *p);
   f->close_section();
-  f->open_object_section("up");
+  f->open_array_section("up");
   for (map<mds_rank_t,mds_gid_t>::const_iterator p = up.begin(); p != up.end(); ++p) {
-    char s[14];
-    sprintf(s, "mds_%d", int(p->first));
-    f->dump_int(s, p->second);
+    f->dump_int("mds", p->first);
   }
   f->close_section();
   f->open_array_section("failed");
@@ -172,11 +170,9 @@ void MDSMap::dump(Formatter *f) const
   for (set<mds_rank_t>::const_iterator p = stopped.begin(); p != stopped.end(); ++p)
     f->dump_int("mds", *p);
   f->close_section();
-  f->open_object_section("info");
+  f->open_array_section("info");
   for (map<mds_gid_t,mds_info_t>::const_iterator p = mds_info.begin(); p != mds_info.end(); ++p) {
-    char s[25]; // 'gid_' + len(str(ULLONG_MAX)) + '\0'
-    sprintf(s, "gid_%llu", (long long unsigned)p->first);
-    f->open_object_section(s);
+    f->open_object_section("info_item");
     p->second.dump(f);
     f->close_section();
   }
index b27953d3f95e714345e51bd2589d856304cbe350..a09c41da5ed9f51394bc693dc1923f1cf163afa4 100644 (file)
@@ -114,14 +114,21 @@ class RankEvicter(threading.Thread):
 
         super(RankEvicter, self).__init__()
 
+    def _get_info(self, key, value):
+        for info in self._mds_map["info"]:
+            if info[key] == value:
+                return info
+        return {}
+
     def _ready_to_evict(self):
-        if self._mds_map['up'].get("mds_{0}".format(self.rank), None) != self.gid:
+        info = self._get_info('rank', self.rank)
+        if (self.rank not in self._mds_map['up']) or info.get('gid', None) != self.gid:
             log.info("Evicting {0} from {1}/{2}: rank no longer associated with gid, done.".format(
                 self._client_spec, self.rank, self.gid
             ))
             raise RankEvicter.GidGone()
 
-        info = self._mds_map['info']["gid_{0}".format(self.gid)]
+        info = self._get_info('gid', self.gid)
         log.debug("_ready_to_evict: state={0}".format(info['state']))
         return info['state'] in ["up:active", "up:clientreplay"]
 
@@ -393,10 +400,8 @@ class CephFSVolumeClient(object):
 
         mds_map = get_mds_map()
         up = {}
-        for name, gid in mds_map['up'].items():
-            # Quirk of the MDSMap JSON dump: keys in the up dict are like "mds_0"
-            assert name.startswith("mds_")
-            up[int(name[4:])] = gid
+        for rank in mds_map['up']:
+            up[rank] = self._get_info('rank', rank)['gid']
 
         # For all MDS ranks held by a daemon
         # Do the parallelism in python instead of using "tell mds.*", because