for rank, op, path in ops:
self._verify_quiesce(root=path, rank=rank, status=status)
+ def test_quiesce_block_replicated(self):
+ """
+ That an inode with quiesce.block is replicated.
+ """
+
+ self._configure_subvolume()
+
+ self.mount_a.run_shell_payload("mkdir -p dir1/dir2/dir3/dir4")
+
+ self.fs.set_max_mds(2)
+ status = self.fs.wait_for_daemons()
+
+ self.mount_a.setfattr("dir1", "ceph.dir.pin", "1")
+ self.mount_a.setfattr("dir1/dir2/dir3", "ceph.dir.pin", "0") # force dir2 to be replicated
+ status = self._wait_subtrees([(self.mntpnt+"/dir1", 1), (self.mntpnt+"/dir1/dir2/dir3", 0)], status=status, rank=1)
+
+ op = self.fs.rank_tell("lock", "path", self.mntpnt+"/dir1/dir2", "policy:r", rank=1)
+ p = self.mount_a.setfattr("dir1/dir2", "ceph.quiesce.block", "1", wait=False)
+ sleep(2) # for req to block waiting for xlock on policylock
+ reqid = self._reqid_tostr(op['op']['reqid'])
+ self.fs.kill_op(reqid, rank=1)
+ p.wait()
+
+ ino1 = self.fs.read_cache(self.mntpnt+"/dir1/dir2", depth=0, rank=1)[0]
+ self.assertTrue(ino1['quiesce_block'])
+ self.assertTrue(ino1['is_auth'])
+ replicas = ino1['auth_state']['replicas']
+ self.assertIn("0", replicas)
+
+ ino0 = self.fs.read_cache(self.mntpnt+"/dir1/dir2", depth=0, rank=0)[0]
+ self.assertFalse(ino0['is_auth'])
+ self.assertTrue(ino0['quiesce_block'])
+
+
# TODO: test for quiesce_counter
class TestQuiesceSplitAuth(QuiesceTestCase):