# are matched
out_json = self.fs.rank_tell(["scrub", "start", "/subdir", "repair", "recursive"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
# Remove the whole 'sudbdir' directory
self.mount_a.run_shell(["rm", "-rf", "subdir/"])
with self.assert_cluster_log("inode table repaired", invert_match=True):
out_json = self.fs.rank_tell(["scrub", "start", "/", "repair", "recursive"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
self.mds_cluster.mds_stop()
self.mds_cluster.mds_fail()
with self.assert_cluster_log("inode table repaired"):
out_json = self.fs.rank_tell(["scrub", "start", "/", "repair", "recursive"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
self.mds_cluster.mds_stop()
table_text = self.fs.table_tool(["0", "show", "inode"])
with self.assert_cluster_log("bad backtrace on inode"):
out_json = self.fs.rank_tell(["scrub", "start", "/", "repair", "recursive"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
+
self.fs.mds_asok(["flush", "journal"])
backtrace = self.fs.read_backtrace(file_ino)
self.assertEqual(['alpha', 'parent_a'],
def _get_scrub_status(self, rank=0):
return self.fs.rank_tell(["scrub", "status"], rank)
- def _wait_until_scrubbed(self, timeout):
- self.wait_until_true(lambda: "no active" in self._get_scrub_status()['status'], timeout)
-
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:
inos = self._find_path_inos('d1/d2/d3/')
tag = "tag123"
- self.fs.rank_tell(["tag", "path", "/d1/d2/d3", tag], 0)
- self._wait_until_scrubbed(30);
+ out_json = self.fs.rank_tell(["tag", "path", "/d1/d2/d3", tag], 0)
+ self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
def assertTagged(ino):
file_obj_name = "{0:x}.00000000".format(ino)
file_obj_name = "{0:x}.00000000".format(ino)
self.fs.rados(["rmxattr", file_obj_name, "parent"])
- self.fs.rank_tell(["scrub", "start", "/d1/d2/d3", "recursive", "force"], 0)
- self._wait_until_scrubbed(30);
+ out_json = self.fs.rank_tell(["scrub", "start", "/d1/d2/d3", "recursive", "force"], 0)
+ self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
def _check_damage(mds_rank, inos):
all_damage = self.fs.rank_tell(["damage", "ls"], mds_rank)
def validate(self):
out_json = self._filesystem.rank_tell(["scrub", "start", "/", "recursive", "repair"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self._filesystem.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
self.assertTrue(self._filesystem.are_daemons_healthy())
return self._errors
out_json = self.fs.rank_tell(["scrub", "start", "/", "recursive", "repair"])
self.assertNotEqual(out_json, None)
+ self.assertEqual(out_json["return_code"], 0)
+ self.assertEqual(self.fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
# See that the files are present and correct
errors = workload.validate()
That scrubbing new files does not lead to errors
"""
workload.create_files(1000)
- self._wait_until_scrub_complete()
+ self.fs.wait_until_scrub_complete()
self.assertEqual(self._get_damage_count(), 0)
def test_scrub_backtrace_for_new_files(self):
json = fs.rank_tell(["scrub", "start", "/", "force", "recursive", "repair"])
if not json or json['return_code'] == 0:
+ assert(fs.wait_until_scrub_complete(tag=json["scrub_tag"]) == True)
log.info("scrub / completed")
else:
log.info("scrub / failed: {}".format(json))
json = fs.rank_tell(["scrub", "start", "~mdsdir", "force", "recursive", "repair"])
if not json or json['return_code'] == 0:
+ assert(fs.wait_until_scrub_complete(tag=json["scrub_tag"]) == True)
log.info("scrub ~mdsdir completed")
else:
log.info("scrub / failed: {}".format(json))