]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test: verify that snapshot items are accounted when deciding to split/merge a directory 49673/head
authorVenky Shankar <vshankar@redhat.com>
Wed, 16 Nov 2022 10:03:55 +0000 (05:03 -0500)
committerVenky Shankar <vshankar@redhat.com>
Mon, 9 Jan 2023 10:37:15 +0000 (16:07 +0530)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 754799097d5849f28a3ab8f5618e9fd01c17f200)

qa/tasks/cephfs/test_fragment.py

index 1102f887b5f0a6cd28ac2f20cc5ba6a22a0ae6d5..7d35ec0dfd53ec25c4301ec2ccb38043a2da7797 100644 (file)
@@ -317,3 +317,43 @@ class TestFragmentation(CephFSTestCase):
             lambda: _count_fragmented() > 0,
             timeout=30
         )
+
+    def test_dir_merge_with_snap_items(self):
+        """
+        That directory remain fragmented when snapshot items are taken into account.
+        """
+        split_size = 1000
+        merge_size = 100
+        self._configure(
+            mds_bal_split_size=split_size,
+            mds_bal_merge_size=merge_size,
+            mds_bal_split_bits=1
+        )
+
+        # split the dir
+        create_files = split_size + 50
+        self.mount_a.create_n_files("splitdir/file_", create_files)
+
+        self.wait_until_true(
+            lambda: self.get_splits() == 1,
+            timeout=30
+        )
+
+        frags = self.get_dir_ino("/splitdir")['dirfrags']
+        self.assertEqual(len(frags), 2)
+        self.assertEqual(frags[0]['dirfrag'], "0x10000000000.0*")
+        self.assertEqual(frags[1]['dirfrag'], "0x10000000000.1*")
+        self.assertEqual(
+            sum([len(f['dentries']) for f in frags]), create_files
+        )
+
+        self.assertEqual(self.get_merges(), 0)
+
+        self.mount_a.run_shell(["mkdir", "splitdir/.snap/snap_a"])
+        self.mount_a.run_shell(["mkdir", "splitdir/.snap/snap_b"])
+        self.mount_a.run_shell(["rm", "-f", run.Raw("splitdir/file*")])
+
+        time.sleep(30)
+
+        self.assertEqual(self.get_merges(), 0)
+        self.assertEqual(len(self.get_dir_ino("/splitdir")["dirfrags"]), 2)