From: Neha Ojha Date: Fri, 5 Jun 2020 23:32:38 +0000 (+0000) Subject: qa/tasks/ceph_manager.py: dump more useful info before failing X-Git-Tag: v15.2.5~176^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=809a97dd4eb611dc9787a1509005350f31c8df26;p=ceph.git qa/tasks/ceph_manager.py: dump more useful info before failing Add helpers that dump information only about PGs that haven't reached the desired state when we fail. Previously we dumped the output of "ceph pg dump" before failing, which prints a lot of unnecessary information about PGs that are not responsible for the failure, making debugging harder. Also, try to make the failure messages distinct. Signed-off-by: Neha Ojha (cherry picked from commit 4deba4e8bd0fea34f9e4ec6a6b96e64ee231d06f) --- diff --git a/qa/tasks/ceph_manager.py b/qa/tasks/ceph_manager.py index 5742cff75286..c6f5f32231a4 100644 --- a/qa/tasks/ceph_manager.py +++ b/qa/tasks/ceph_manager.py @@ -2466,6 +2466,36 @@ class CephManager: pgs = self.get_pg_stats() return self._get_num_active_down(pgs) == len(pgs) + def dump_pgs_not_active_clean(self): + """ + Dumps all pgs that are not active+clean + """ + pgs = self.get_pg_stats() + for pg in pgs: + if pg['state'] != 'active+clean': + self.log('PG %s is not active+clean' % pg['pgid']) + self.log(pg) + + def dump_pgs_not_active_down(self): + """ + Dumps all pgs that are not active or down + """ + pgs = self.get_pg_stats() + for pg in pgs: + if 'active' not in pg['state'] and 'down' not in pg['state']: + self.log('PG %s is not active or down' % pg['pgid']) + self.log(pg) + + def dump_pgs_not_active(self): + """ + Dumps all pgs that are not active + """ + pgs = self.get_pg_stats() + for pg in pgs: + if 'active' not in pg['state']: + self.log('PG %s is not active' % pg['pgid']) + self.log(pg) + def wait_for_clean(self, timeout=1200): """ Returns true when all pgs are clean. @@ -2481,11 +2511,10 @@ class CephManager: else: self.log("no progress seen, keeping timeout for now") if time.time() - start >= timeout: - self.log('dumping pgs') - out = self.raw_cluster_cmd('pg', 'dump') - self.log(out) + self.log('dumping pgs not clean') + self.dump_pgs_not_active_clean() assert time.time() - start < timeout, \ - 'failed to become clean before timeout expired' + 'wait_for_clean: failed before timeout expired' cur_active_clean = self.get_num_active_clean() if cur_active_clean != num_active_clean: start = time.time() @@ -2567,11 +2596,10 @@ class CephManager: if now - start >= timeout: if self.is_recovered(): break - self.log('dumping pgs') - out = self.raw_cluster_cmd('pg', 'dump') - self.log(out) + self.log('dumping pgs not recovered yet') + self.dump_pgs_not_active_clean() assert now - start < timeout, \ - 'failed to recover before timeout expired' + 'wait_for_recovery: failed before timeout expired' cur_active_recovered = self.get_num_active_recovered() if cur_active_recovered != num_active_recovered: start = time.time() @@ -2589,11 +2617,10 @@ class CephManager: while not self.is_active(): if timeout is not None: if time.time() - start >= timeout: - self.log('dumping pgs') - out = self.raw_cluster_cmd('pg', 'dump') - self.log(out) + self.log('dumping pgs not active') + self.dump_pgs_not_active() assert time.time() - start < timeout, \ - 'failed to recover before timeout expired' + 'wait_for_active: failed before timeout expired' cur_active = self.get_num_active() if cur_active != num_active: start = time.time() @@ -2612,11 +2639,10 @@ class CephManager: while not self.is_active_or_down(): if timeout is not None: if time.time() - start >= timeout: - self.log('dumping pgs') - out = self.raw_cluster_cmd('pg', 'dump') - self.log(out) + self.log('dumping pgs not active or down') + self.dump_pgs_not_active_down() assert time.time() - start < timeout, \ - 'failed to recover before timeout expired' + 'wait_for_active_or_down: failed before timeout expired' cur_active_down = self.get_num_active_down() if cur_active_down != num_active_down: start = time.time() @@ -2666,11 +2692,10 @@ class CephManager: while not self.is_active(): if timeout is not None: if time.time() - start >= timeout: - self.log('dumping pgs') - out = self.raw_cluster_cmd('pg', 'dump') - self.log(out) + self.log('dumping pgs not active') + self.dump_pgs_not_active() assert time.time() - start < timeout, \ - 'failed to become active before timeout expired' + 'wait_till_active: failed before timeout expired' time.sleep(3) self.log("active!")