]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
qa: update handling of fs status format
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 20 Dec 2017 00:12:28 +0000 (16:12 -0800)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 21 Dec 2017 18:35:09 +0000 (10:35 -0800)
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
qa/tasks/cephfs/filesystem.py
qa/tasks/cephfs/test_failover.py
qa/tasks/cephfs/test_strays.py

index fce7931696fde11d7a277ce6533ff3d3c7252ad5..5cccbc86131987cfc3b3980657efb8e201d1ca1a 100644 (file)
@@ -64,7 +64,7 @@ class FSStatus(object):
         for info in self.get_standbys():
             yield info
         for fs in self.map['filesystems']:
-            for info in fs['mdsmap']['info'].values():
+            for info in fs['mdsmap']['info']:
                 yield info
 
     def get_standbys(self):
@@ -97,7 +97,7 @@ class FSStatus(object):
         Get the standby:replay MDS for the given FSCID.
         """
         fs = self.get_fsmap(fscid)
-        for info in fs['mdsmap']['info'].values():
+        for info in fs['mdsmap']['info']:
             if info['state'] == 'up:standby-replay':
                 yield info
 
@@ -106,7 +106,7 @@ class FSStatus(object):
         Get the ranks for the given FSCID.
         """
         fs = self.get_fsmap(fscid)
-        for info in fs['mdsmap']['info'].values():
+        for info in fs['mdsmap']['info']:
             if info['rank'] >= 0:
                 yield info
 
@@ -119,6 +119,14 @@ class FSStatus(object):
                 return info
         raise RuntimeError("FSCID {0} has no rank {1}".format(fscid, rank))
 
+    def get_cluster(self, fscid):
+        """
+        Get the MDS cluster for the given FSCID.
+        """
+        fs = self.get_fsmap(fscid)
+        for info in fs['mdsmap']['info']:
+            yield info
+
     def get_mds(self, name):
         """
         Get the info for the given MDS name.
@@ -294,8 +302,8 @@ class MDSCluster(CephCluster):
             mdsmap = fs['mdsmap']
             metadata_pool = pool_id_name[mdsmap['metadata_pool']]
 
-            for gid in mdsmap['up'].values():
-                self.mon_manager.raw_cluster_cmd('mds', 'fail', gid.__str__())
+            for info in status.get_ranks(fs['id']):
+                self.mon_manager.raw_cluster_cmd('mds', 'fail', str(info['gid']))
 
             self.mon_manager.raw_cluster_cmd('fs', 'rm', mdsmap['fs_name'], '--yes-i-really-mean-it')
             self.mon_manager.raw_cluster_cmd('osd', 'pool', 'delete',
@@ -659,11 +667,11 @@ class Filesystem(MDSCluster):
 
         log.info("are_daemons_healthy: mds map: {0}".format(mds_map))
 
-        for mds_id, mds_status in mds_map['info'].items():
-            if mds_status['state'] not in ["up:active", "up:standby", "up:standby-replay"]:
-                log.warning("Unhealthy mds state {0}:{1}".format(mds_id, mds_status['state']))
+        for info in mds_map['info']:
+            if info['state'] not in ["up:active", "up:standby", "up:standby-replay"]:
+                log.warning("Unhealthy mds state {0}:{1}".format(info['gid'], info['state']))
                 return False
-            elif mds_status['state'] == 'up:active':
+            elif info['state'] == 'up:active':
                 active_count += 1
 
         log.info("are_daemons_healthy: {0}/{1}".format(
@@ -672,10 +680,10 @@ class Filesystem(MDSCluster):
 
         if active_count >= mds_map['max_mds']:
             # The MDSMap says these guys are active, but let's check they really are
-            for mds_id, mds_status in mds_map['info'].items():
-                if mds_status['state'] == 'up:active':
+            for info in mds_map['info']:
+                if info['state'] == 'up:active':
                     try:
-                        daemon_status = self.mds_asok(["status"], mds_id=mds_status['name'])
+                        daemon_status = self.mds_asok(["status"], mds_id=info['name'])
                     except CommandFailedError as cfe:
                         if cfe.exitstatus == errno.EINVAL:
                             # Old version, can't do this check
@@ -700,7 +708,7 @@ class Filesystem(MDSCluster):
         """
         status = self.get_mds_map()
         result = []
-        for mds_status in sorted(status['info'].values(), lambda a, b: cmp(a['rank'], b['rank'])):
+        for mds_status in sorted(status['info'], lambda a, b: cmp(a['rank'], b['rank'])):
             if mds_status['state'] == state or state is None:
                 result.append(mds_status['name'])
 
@@ -718,7 +726,7 @@ class Filesystem(MDSCluster):
     def get_all_mds_rank(self):
         status = self.get_mds_map()
         result = []
-        for mds_status in sorted(status['info'].values(), lambda a, b: cmp(a['rank'], b['rank'])):
+        for mds_status in sorted(status['info'], lambda a, b: cmp(a['rank'], b['rank'])):
             if mds_status['rank'] != -1 and mds_status['state'] != 'up:standby-replay':
                 result.append(mds_status['rank'])
 
@@ -733,7 +741,7 @@ class Filesystem(MDSCluster):
         """
         status = self.get_mds_map()
         result = []
-        for mds_status in sorted(status['info'].values(), lambda a, b: cmp(a['rank'], b['rank'])):
+        for mds_status in sorted(status['info'], lambda a, b: cmp(a['rank'], b['rank'])):
             if mds_status['rank'] != -1 and mds_status['state'] != 'up:standby-replay':
                 result.append(mds_status['name'])
 
index 3306e9441c712a8462230a4c21e7db11ff5ed93a..1ece40fcc6e3705b36417f687fa1e21e9cf146f8 100644 (file)
@@ -83,8 +83,7 @@ class TestFailover(CephFSTestCase):
 
         # Wait for everyone to go laggy
         def laggy():
-            mdsmap = self.fs.get_mds_map()
-            for info in mdsmap['info'].values():
+            for info in self.fs.status().get_cluster(self.fs.id):
                 if "laggy_since" not in info:
                     return False
 
@@ -469,7 +468,7 @@ class TestMultiFilesystems(CephFSTestCase):
 
         def get_info_by_name(fs, mds_name):
             mds_map = fs.get_mds_map()
-            for gid_str, info in mds_map['info'].items():
+            for info in mds_map['info']:
                 if info['name'] == mds_name:
                     return info
 
index 3c2a86993f2da71c0272be1f9f65664e8392be4d..2c1d4c682499f8dbfe27a2fce512e26424bab53e 100644 (file)
@@ -544,8 +544,7 @@ class TestStrays(CephFSTestCase):
                     time.sleep(1)
 
     def _is_stopped(self, rank):
-        mds_map = self.fs.get_mds_map()
-        return rank not in [i['rank'] for i in mds_map['info'].values()]
+        return rank not in self.fs.get_mds_map()['up']
 
     def test_purge_on_shutdown(self):
         """