]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
qa: test quiesce.block is replicated
authorPatrick Donnelly <pdonnell@redhat.com>
Tue, 16 Apr 2024 19:50:24 +0000 (15:50 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Mon, 22 Apr 2024 19:01:34 +0000 (15:01 -0400)
When the policy xlock cannot be immediately acquired.

Test-case: https://tracker.ceph.com/issues/65496
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
qa/tasks/cephfs/test_quiesce.py

index 6b18055aff00635d386eff09d0f005e67929147c..c996b4f065d7764a102a49834ecf39e3d4fd6bf7 100644 (file)
@@ -734,6 +734,40 @@ class TestQuiesceMultiRank(QuiesceTestCase):
         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):