6 from pg_autoscaler
import module
10 def __init__(self
, pools
):
16 def pool_raw_used_rate(pool_id
):
21 def __init__(self
, rules
, osd_dic
):
23 self
.osd_dic
= osd_dic
25 def get_rule_by_id(self
, rule_id
):
26 for rule
in self
.rules
:
27 if rule
['rule_id'] == rule_id
:
32 def get_rule_root(self
, rule_name
):
33 for rule
in self
.rules
:
34 if rule
['rule_name'] == rule_name
:
35 return rule
['root_id']
39 def get_osds_under(self
, root_id
):
40 return self
.osd_dic
[root_id
]
43 class TestPgAutoscaler(object):
46 # a bunch of attributes for testing.
47 self
.autoscaler
= module
.PgAutoscaler('module_name', 0, 0)
49 def helper_test(self
, osd_dic
, rules
, pools
, expected_overlapped_roots
):
52 overlapped_roots
= set()
53 osdmap
= OSDMAP(pools
)
54 crush
= CRUSH(rules
, osd_dic
)
55 roots
, overlapped_roots
= self
.autoscaler
.identify_subtrees_and_overlaps(osdmap
,
56 crush
, result
, overlapped_roots
, roots
)
57 assert overlapped_roots
== expected_overlapped_roots
59 def test_subtrees_and_overlaps(self
):
61 -1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
62 -40: [11, 12, 13, 14, 15],
63 -5: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
78 "rule_name": "teuthology-data-ec",
87 "rule_name": "rep-ssd",
98 "pg_num_target": 1024,
101 "capacity_ratio": 0.1624,
105 "expected_final_pg_target": 1024,
108 "pool_name": "metadata",
112 "capacity_ratio": 0.0144,
116 "expected_final_pg_target": 64,
119 "pool_name": "libvirt-pool",
123 "capacity_ratio": 0.0001,
125 "expected_final_pg_target": 128,
128 "pool_name": ".rgw.root",
134 "expected_final_pg_target": 32,
137 "pool_name": "default.rgw.control",
143 "expected_final_pg_target": 32,
146 "pool_name": "default.rgw.meta",
152 "expected_final_pg_target": 32,
155 "pool_name": "default.rgw.log",
161 "expected_final_pg_target": 32,
164 "pool_name": "default.rgw.buckets.index",
168 "capacity_ratio": 0.0002,
170 "expected_final_pg_target": 32,
173 "pool_name": "default.rgw.buckets.data",
177 "capacity_ratio": 0.0457,
179 "expected_final_pg_target": 128,
182 "pool_name": "default.rgw.buckets.non-ec",
188 "expected_final_pg_target": 32,
191 "pool_name": "device_health_metrics",
199 "expected_final_pg_target": 1,
202 "pool_name": "cephfs.teuthology.meta",
206 "capacity_ratio": 0.1389,
208 "pg_autoscale_bias": 4,
211 "expected_final_pg_target": 512,
214 "pool_name": "cephfs.teuthology.data",
215 "pg_num_target": 256,
218 "capacity_ratio": 0.0006,
222 "expected_final_pg_target": 1024,
223 "expected_final_pg_target": 256,
226 "pool_name": "cephfs.scratch.meta",
230 "capacity_ratio": 0.0027,
232 "pg_autoscale_bias": 4,
235 "expected_final_pg_target": 64,
238 "pool_name": "cephfs.scratch.data",
242 "capacity_ratio": 0.0027,
244 "expected_final_pg_target": 128,
247 "pool_name": "cephfs.teuthology.data-ec",
248 "pg_num_target": 1024,
251 "capacity_ratio": 0.8490,
255 "expected_final_pg_target": 1024,
258 "pool_name": "cephsqlite",
264 "expected_final_pg_target": 128,
267 expected_overlapped_roots
= {-40, -1, -5}
268 self
.helper_test(osd_dic
, rules
, pools
, expected_overlapped_roots
)
270 def test_no_overlaps(self
):
272 -1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
273 -40: [11, 12, 13, 14, 15],
289 "rule_name": "teuthology-data-ec",
298 "rule_name": "rep-ssd",
309 "pg_num_target": 1024,
312 "capacity_ratio": 0.1624,
316 "expected_final_pg_target": 1024,
319 "pool_name": "metadata",
323 "capacity_ratio": 0.0144,
327 "expected_final_pg_target": 64,
330 "pool_name": "libvirt-pool",
334 "capacity_ratio": 0.0001,
336 "expected_final_pg_target": 128,
339 "pool_name": ".rgw.root",
345 "expected_final_pg_target": 32,
348 "pool_name": "default.rgw.control",
354 "expected_final_pg_target": 32,
357 "pool_name": "default.rgw.meta",
363 "expected_final_pg_target": 32,
366 "pool_name": "default.rgw.log",
372 "expected_final_pg_target": 32,
375 "pool_name": "default.rgw.buckets.index",
379 "capacity_ratio": 0.0002,
381 "expected_final_pg_target": 32,
384 "pool_name": "default.rgw.buckets.data",
388 "capacity_ratio": 0.0457,
390 "expected_final_pg_target": 128,
393 "pool_name": "default.rgw.buckets.non-ec",
399 "expected_final_pg_target": 32,
402 "pool_name": "device_health_metrics",
410 "expected_final_pg_target": 1,
413 "pool_name": "cephfs.teuthology.meta",
417 "capacity_ratio": 0.1389,
419 "pg_autoscale_bias": 4,
422 "expected_final_pg_target": 512,
425 "pool_name": "cephfs.teuthology.data",
426 "pg_num_target": 256,
429 "capacity_ratio": 0.0006,
433 "expected_final_pg_target": 1024,
434 "expected_final_pg_target": 256,
437 "pool_name": "cephfs.scratch.meta",
441 "capacity_ratio": 0.0027,
443 "pg_autoscale_bias": 4,
446 "expected_final_pg_target": 64,
449 "pool_name": "cephfs.scratch.data",
453 "capacity_ratio": 0.0027,
455 "expected_final_pg_target": 128,
458 "pool_name": "cephfs.teuthology.data-ec",
459 "pg_num_target": 1024,
462 "capacity_ratio": 0.8490,
466 "expected_final_pg_target": 1024,
469 "pool_name": "cephsqlite",
475 "expected_final_pg_target": 128,
478 expected_overlapped_roots
= set()
479 self
.helper_test(osd_dic
, rules
, pools
, expected_overlapped_roots
)