]> git.proxmox.com Git - ceph.git/blob - ceph/qa/tasks/mgr/test_cache.py
import quincy beta 17.1.0
[ceph.git] / ceph / qa / tasks / mgr / test_cache.py
1 import json
2
3 from .mgr_test_case import MgrTestCase
4
5 class TestCache(MgrTestCase):
6
7 def setUp(self):
8 super(TestCache, self).setUp()
9 self.setup_mgrs()
10 self._load_module("cli_api")
11 self.ttl = 10
12 self.enable_cache(self.ttl)
13
14 def tearDown(self):
15 self.disable_cache()
16
17 def get_hit_miss_ratio(self):
18 perf_dump_command = f"daemon mgr.{self.mgr_cluster.get_active_id()} perf dump"
19 perf_dump_res = self.cluster_cmd(perf_dump_command)
20 perf_dump = json.loads(perf_dump_res)
21 h = perf_dump["mgr"]["cache_hit"]
22 m = perf_dump["mgr"]["cache_miss"]
23 return int(h), int(m)
24
25 def enable_cache(self, ttl):
26 set_ttl = f"config set mgr mgr_ttl_cache_expire_seconds {ttl}"
27 self.cluster_cmd(set_ttl)
28
29 def disable_cache(self):
30 set_ttl = "config set mgr mgr_ttl_cache_expire_seconds 0"
31 self.cluster_cmd(set_ttl)
32
33
34 def test_init_cache(self):
35 get_ttl = "config get mgr mgr_ttl_cache_expire_seconds"
36 res = self.cluster_cmd(get_ttl)
37 self.assertEquals(int(res), 10)
38
39 def test_health_not_cached(self):
40 get_health = "mgr api get health"
41
42 h_start, m_start = self.get_hit_miss_ratio()
43 self.cluster_cmd(get_health)
44 h, m = self.get_hit_miss_ratio()
45
46 self.assertEquals(h, h_start)
47 self.assertEquals(m, m_start)
48
49 def test_osdmap(self):
50 get_osdmap = "mgr api get osd_map"
51
52 # store in cache
53 self.cluster_cmd(get_osdmap)
54 # get from cache
55 res = self.cluster_cmd(get_osdmap)
56 osd_map = json.loads(res)
57 self.assertIn("osds", osd_map)
58 self.assertGreater(len(osd_map["osds"]), 0)
59 self.assertIn("epoch", osd_map)
60
61
62
63 def test_hit_miss_ratio(self):
64 get_osdmap = "mgr api get osd_map"
65
66 hit_start, miss_start = self.get_hit_miss_ratio()
67
68 def wait_miss():
69 self.cluster_cmd(get_osdmap)
70 _, m = self.get_hit_miss_ratio()
71 return m == miss_start + 1
72
73 # Miss, add osd_map to cache
74 self.wait_until_true(wait_miss, self.ttl + 5)
75 h, m = self.get_hit_miss_ratio()
76 self.assertEquals(h, hit_start)
77 self.assertEquals(m, miss_start+1)
78
79 # Hit, get osd_map from cache
80 self.cluster_cmd(get_osdmap)
81 h, m = self.get_hit_miss_ratio()
82 self.assertEquals(h, hit_start+1)
83 self.assertEquals(m, miss_start+1)