]> git.proxmox.com Git - ceph.git/blob - ceph/qa/tasks/cephfs/test_openfiletable.py
import ceph quincy 17.2.4
[ceph.git] / ceph / qa / tasks / cephfs / test_openfiletable.py
1 import time
2 import logging
3 from tasks.cephfs.cephfs_test_case import CephFSTestCase
4
5 log = logging.getLogger(__name__)
6
7 class OpenFileTable(CephFSTestCase):
8 CLIENTS_REQUIRED = 1
9 MDSS_REQUIRED = 1
10
11 def _check_oft_counter(self, name, count):
12 perf_dump = self.fs.mds_asok(['perf', 'dump'])
13 if perf_dump['oft'][name] == count:
14 return True
15 return False
16
17 def test_max_items_per_obj(self):
18 """
19 The maximum number of openfiles omap objects keys are now equal to
20 osd_deep_scrub_large_omap_object_key_threshold option.
21 """
22 self.set_conf("mds", "osd_deep_scrub_large_omap_object_key_threshold", "5")
23
24 self.fs.mds_restart()
25 self.fs.wait_for_daemons()
26
27 # Write some bytes to a file
28 size_mb = 1
29
30 # Hold the file open
31 file_count = 8
32 for i in range(0, file_count):
33 filename = "open_file{}".format(i)
34 p = self.mount_a.open_background(filename)
35 self.mount_a.write_n_mb(filename, size_mb)
36
37 time.sleep(10)
38
39 """
40 With osd_deep_scrub_large_omap_object_key_threshold value as 5 and
41 opening 8 files we should have a new rados object with name
42 mds0_openfiles.1 to hold the extra keys.
43 """
44
45 self.fs.radosm(["stat", "mds0_openfiles.1"])
46
47 # Now close the file
48 self.mount_a.kill_background(p)
49
50 def test_perf_counters(self):
51 """
52 Opening a file should increment omap_total_updates by 1.
53 """
54
55 self.set_conf("mds", "osd_deep_scrub_large_omap_object_key_threshold", "1")
56 self.fs.mds_restart()
57 self.fs.wait_for_daemons()
58
59 perf_dump = self.fs.mds_asok(['perf', 'dump'])
60 omap_total_updates_0 = perf_dump['oft']['omap_total_updates']
61 log.info("omap_total_updates_0:{}".format(omap_total_updates_0))
62
63 # Open the file
64 p = self.mount_a.open_background("omap_counter_test_file")
65 self.wait_until_true(lambda: self._check_oft_counter('omap_total_updates', 2), timeout=120)
66
67 perf_dump = self.fs.mds_asok(['perf', 'dump'])
68 omap_total_updates_1 = perf_dump['oft']['omap_total_updates']
69 log.info("omap_total_updates_1:{}".format(omap_total_updates_1))
70
71 self.assertTrue((omap_total_updates_1 - omap_total_updates_0) == 2)
72
73 # Now close the file
74 self.mount_a.kill_background(p)
75 # Ensure that the file does not exist any more
76 self.wait_until_true(lambda: self._check_oft_counter('omap_total_removes', 1), timeout=120)
77 self.wait_until_true(lambda: self._check_oft_counter('omap_total_kv_pairs', 1), timeout=120)
78
79 perf_dump = self.fs.mds_asok(['perf', 'dump'])
80 omap_total_removes = perf_dump['oft']['omap_total_removes']
81 omap_total_kv_pairs = perf_dump['oft']['omap_total_kv_pairs']
82 log.info("omap_total_removes:{}".format(omap_total_removes))
83 log.info("omap_total_kv_pairs:{}".format(omap_total_kv_pairs))
84 self.assertTrue(omap_total_removes == 1)
85 self.assertTrue(omap_total_kv_pairs == 1)