]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / lvm / strategies / test_bluestore.py
CommitLineData
91327a77
AA
1import pytest
2from ceph_volume.devices.lvm.strategies import bluestore
3
4
5class TestSingleType(object):
6
7 def test_hdd_device_is_large_enough(self, fakedevice, factory):
11fdf7f2
TL
8 args = factory(filtered_devices=[], osds_per_device=1,
9 block_db_size=None, osd_ids=[])
91327a77
AA
10 devices = [
11 fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
12 ]
11fdf7f2 13 computed_osd = bluestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
14 assert computed_osd['data']['percentage'] == 100
15 assert computed_osd['data']['parts'] == 1
16 assert computed_osd['data']['human_readable_size'] == '5.66 GB'
17 assert computed_osd['data']['path'] == '/dev/sda'
18
19 def test_sdd_device_is_large_enough(self, fakedevice, factory):
11fdf7f2
TL
20 args = factory(filtered_devices=[], osds_per_device=1,
21 block_db_size=None, osd_ids=[])
91327a77
AA
22 devices = [
23 fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
24 ]
11fdf7f2 25 computed_osd = bluestore.SingleType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
26 assert computed_osd['data']['percentage'] == 100
27 assert computed_osd['data']['parts'] == 1
28 assert computed_osd['data']['human_readable_size'] == '5.66 GB'
29 assert computed_osd['data']['path'] == '/dev/sda'
30
31 def test_device_cannot_have_many_osds_per_device(self, fakedevice, factory):
11fdf7f2
TL
32 args = factory(filtered_devices=[], osds_per_device=3,
33 block_db_size=None, osd_ids=[])
91327a77
AA
34 devices = [
35 fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
36 ]
37 with pytest.raises(RuntimeError) as error:
11fdf7f2 38 bluestore.SingleType.with_auto_devices(args, devices)
91327a77
AA
39 assert 'Unable to use device 5.66 GB /dev/sda' in str(error)
40
41 def test_device_is_lvm_member_fails(self, fakedevice, factory):
11fdf7f2
TL
42 args = factory(filtered_devices=[], osds_per_device=1,
43 block_db_size=None, osd_ids=[])
91327a77
AA
44 devices = [
45 fakedevice(used_by_ceph=False, is_lvm_member=True, sys_api=dict(rotational='1', size=6073740000))
46 ]
47 with pytest.raises(RuntimeError) as error:
11fdf7f2 48 bluestore.SingleType.with_auto_devices(args, devices)
91327a77
AA
49 assert 'Unable to use device, already a member of LVM' in str(error)
50
51
11fdf7f2
TL
52class TestMixedType(object):
53
54 def test_filter_all_data_devs(self, fakedevice, factory):
55 # in this scenario the user passed a already used device to be used for
56 # data and an unused device to be used as db device.
57 db_dev = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
58 data_dev = fakedevice(used_by_ceph=True, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
59 args = factory(filtered_devices=[data_dev], osds_per_device=1,
60 block_db_size=None, block_wal_size=None,
61 osd_ids=[])
62 bluestore.MixedType(args, [], [db_dev], [])
63
64
91327a77
AA
65class TestMixedTypeConfiguredSize(object):
66 # uses a block.db size that has been configured via ceph.conf, instead of
67 # defaulting to 'as large as possible'
68
69 def test_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
70 # 3GB block.db in ceph.conf
71 conf_ceph(get_safe=lambda *a: 3147483640)
11fdf7f2
TL
72 args = factory(filtered_devices=[], osds_per_device=1,
73 block_db_size=None, block_wal_size=None,
74 osd_ids=[])
91327a77
AA
75 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
76 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
77 devices = [ssd, hdd]
78
11fdf7f2 79 osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
80 assert osd['data']['percentage'] == 100
81 assert osd['data']['human_readable_size'] == '5.66 GB'
82 assert osd['data']['path'] == '/dev/sda'
83 # a new vg will be created
84 assert osd['block.db']['path'] == 'vg: vg/lv'
85 assert osd['block.db']['percentage'] == 100
86
87 def test_ssd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
88 # 7GB block.db in ceph.conf
89 conf_ceph(get_safe=lambda *a: 7747483640)
11fdf7f2
TL
90 args = factory(filtered_devices=[], osds_per_device=1,
91 block_db_size=None, block_wal_size=None,
92 osd_ids=[])
91327a77
AA
93 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
94 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
95 devices = [ssd, hdd]
96
97 with pytest.raises(RuntimeError) as error:
11fdf7f2 98 bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
99 expected = 'Not enough space in fast devices (5.66 GB) to create 1 x 7.22 GB block.db LV'
100 assert expected in str(error)
101
102 def test_multi_hdd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
103 # 3GB block.db in ceph.conf
104 conf_ceph(get_safe=lambda *a: 3147483640)
11fdf7f2
TL
105 args = factory(filtered_devices=[], osds_per_device=2,
106 block_db_size=None, block_wal_size=None,
107 osd_ids=[])
91327a77
AA
108 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=60737400000))
109 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
110 devices = [ssd, hdd]
111
112 with pytest.raises(RuntimeError) as error:
11fdf7f2 113 bluestore.MixedType.with_auto_devices(args, devices)
91327a77
AA
114 expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
115 assert expected in str(error)
116
117
118class TestMixedTypeLargeAsPossible(object):
119
120 def test_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
121 conf_ceph(get_safe=lambda *a: None)
11fdf7f2
TL
122 args = factory(filtered_devices=[], osds_per_device=1,
123 block_db_size=None, block_wal_size=None,
124 osd_ids=[])
91327a77
AA
125 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
126 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
127 devices = [ssd, hdd]
128
11fdf7f2 129 osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
130 assert osd['data']['percentage'] == 100
131 assert osd['data']['human_readable_size'] == '5.66 GB'
132 assert osd['data']['path'] == '/dev/sda'
133 # a new vg will be created
134 assert osd['block.db']['path'] == 'vg: vg/lv'
135 # as large as possible
136 assert osd['block.db']['percentage'] == 100
137
138 def test_multi_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
139 conf_ceph(get_safe=lambda *a: None)
11fdf7f2
TL
140 args = factory(filtered_devices=[], osds_per_device=2,
141 block_db_size=None, block_wal_size=None,
142 osd_ids=[])
91327a77
AA
143 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=60073740000))
144 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
145 devices = [ssd, hdd]
146
11fdf7f2 147 osd = bluestore.MixedType.with_auto_devices(args, devices).computed['osds'][0]
91327a77
AA
148 assert osd['data']['percentage'] == 50
149 assert osd['data']['human_readable_size'] == '27.97 GB'
150 assert osd['data']['path'] == '/dev/sda'
151 # a new vg will be created
152 assert osd['block.db']['path'] == 'vg: vg/lv'
153 # as large as possible
154 assert osd['block.db']['percentage'] == 50
155
156 def test_multi_hdd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
157 conf_ceph(get_safe=lambda *a: None)
11fdf7f2
TL
158 args = factory(filtered_devices=[], osds_per_device=2,
159 block_db_size=None, block_wal_size=None,
160 osd_ids=[])
91327a77
AA
161 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=60737400000))
162 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
163 devices = [ssd, hdd]
164
165 with pytest.raises(RuntimeError) as error:
11fdf7f2 166 bluestore.MixedType.with_auto_devices(args, devices)
91327a77
AA
167 expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
168 assert expected in str(error)
11fdf7f2
TL
169
170
171class TestMixedTypeWithExplicitDevices(object):
172
173 def test_multi_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
174 conf_ceph(get_safe=lambda *a: None)
175 args = factory(filtered_devices=[], osds_per_device=2,
176 block_db_size=None, block_wal_size=None,
177 osd_ids=[])
178 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=60073740000))
179 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
180
181 osd = bluestore.MixedType(args, [hdd], [], [ssd]).computed['osds'][0]
182 assert osd['data']['percentage'] == 50
183 assert osd['data']['human_readable_size'] == '27.97 GB'
184 assert osd['data']['path'] == '/dev/sda'
185 # a new vg will be created
186 assert osd['block.wal']['path'] == 'vg: vg/lv'
187 # as large as possible
188 assert osd['block.wal']['percentage'] == 50
189
190 def test_wal_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
191 conf_ceph(get_safe=lambda *a: None)
192 args = factory(filtered_devices=[], osds_per_device=2,
193 block_db_size=None, block_wal_size=None,
194 osd_ids=[])
195 ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=1610612736))
196 hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
197
198 with pytest.raises(RuntimeError) as error:
199 bluestore.MixedType(args, [hdd], [], [ssd]).computed['osds'][0]
200 expected = 'Unable to use device 1.50 GB /dev/sda, LVs would be smaller than 1GB'
201 assert expected in str(error), str(error)