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