def get_scrub_status(self, rank=0):
return self.run_scrub(["status"], rank)
- def wait_until_scrub_complete(self, result=None, tag=None, rank=0, sleep=30, timeout=300):
+ def wait_until_scrub_complete(self, result=None, tag=None, rank=0, sleep=30,
+ timeout=300, reverse=False):
# time out after "timeout" seconds and assume as done
if result is None:
result = "no active scrubs running"
while proceed():
out_json = self.rank_tell(["scrub", "status"], rank=rank)
assert out_json is not None
- if result in out_json['status']:
- log.info("all active scrubs completed")
- return True
+ if not reverse:
+ if result in out_json['status']:
+ log.info("all active scrubs completed")
+ return True
+ else:
+ if result not in out_json['status']:
+ log.info("all active scrubs completed")
+ return True
if tag is not None:
status = out_json['scrubs'][tag]
MDSS_REQUIRED = 3
CLIENTS_REQUIRED = 1
+ def _check_scrub_status(self, result=None, reverse=False):
+ self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=1,
+ sleep=5, timeout=30,
+ reverse=reverse), True)
+ self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=2,
+ sleep=5, timeout=30,
+ reverse=reverse), True)
+ self.assertEqual(self.fs.wait_until_scrub_complete(result=result, rank=0,
+ sleep=5, timeout=30,
+ reverse=reverse), True)
+
def _check_task_status_na(self, timo=120):
""" check absence of scrub status in ceph status """
with safe_while(sleep=1, tries=120, action='wait for task status') as proceed:
# Abort and verify in both mdss. We also check the status in rank 0 mds because
# it is supposed to gather the scrub status from other mdss.
- self.wait_until_true(lambda: "no active" in self.fs.get_scrub_status(1)['status']
- and "no active" in self.fs.get_scrub_status(2)['status']
- and "no active" in self.fs.get_scrub_status(0)['status'], 30)
+ self._check_scrub_status()
# sleep enough to fetch updated task status
checked = self._check_task_status_na()
res = self.fs.run_scrub(["pause"])
self.assertEqual(res['return_code'], 0)
- self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status']
- and "PAUSED" in self.fs.get_scrub_status(2)['status']
- and "PAUSED" in self.fs.get_scrub_status(0)['status'], 30)
+ self._check_scrub_status(result="PAUSED")
checked = self._check_task_status("paused")
self.assertTrue(checked)
res = self.fs.run_scrub(["resume"])
self.assertEqual(res['return_code'], 0)
- self.wait_until_true(lambda: not("PAUSED" in self.fs.get_scrub_status(1)['status'])
- and not("PAUSED" in self.fs.get_scrub_status(2)['status'])
- and not("PAUSED" in self.fs.get_scrub_status(0)['status']), 30)
+ self._check_scrub_status(result="PAUSED", reverse=True)
checked = self._check_task_status_na()
self.assertTrue(checked)
res = self.fs.run_scrub(["pause"])
self.assertEqual(res['return_code'], 0)
- self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status']
- and "PAUSED" in self.fs.get_scrub_status(2)['status']
- and "PAUSED" in self.fs.get_scrub_status(0)['status'], 30)
+ self._check_scrub_status(result="PAUSED")
checked = self._check_task_status("paused")
self.assertTrue(checked)
res = self.fs.run_scrub(["abort"])
self.assertEqual(res['return_code'], 0)
- self.wait_until_true(lambda: "PAUSED" in self.fs.get_scrub_status(1)['status']
- and "0 inodes" in self.fs.get_scrub_status(1)['status']
- and "PAUSED" in self.fs.get_scrub_status(2)['status']
- and "0 inodes" in self.fs.get_scrub_status(2)['status']
- and "PAUSED" in self.fs.get_scrub_status(0)['status']
- and "0 inodes" in self.fs.get_scrub_status(0)['status'], 30)
+ self._check_scrub_status(result="PAUSED")
+ self._check_scrub_status(result="0 inodes")
# scrub status should still be paused...
checked = self._check_task_status("paused")
res = self.fs.run_scrub(["resume"])
self.assertEqual(res['return_code'], 0)
- self.wait_until_true(lambda: not("PAUSED" in self.fs.get_scrub_status(1)['status'])
- and not("PAUSED" in self.fs.get_scrub_status(2)['status'])
- and not("PAUSED" in self.fs.get_scrub_status(0)['status']), 30)
+ self._check_scrub_status(result="PAUSED", reverse=True)
checked = self._check_task_status_na()
self.assertTrue(checked)