]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_filestore.py
2 from ceph_volume
.devices
.lvm
.strategies
import filestore
3 from ceph_volume
.api
import lvm
6 class TestSingleType(object):
8 def test_hdd_device_is_large_enough(self
, fakedevice
, factory
, conf_ceph
):
9 conf_ceph(get_safe
=lambda *a
: '5120')
10 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
12 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=12073740000))
14 computed_osd
= filestore
.SingleType(devices
, args
).computed
['osds'][0]
15 assert computed_osd
['data']['percentage'] == 55
16 assert computed_osd
['data']['parts'] == 1
17 assert computed_osd
['data']['human_readable_size'] == '6.24 GB'
18 assert computed_osd
['data']['path'] == '/dev/sda'
20 def test_hdd_device_with_large_journal(self
, fakedevice
, factory
, conf_ceph
):
21 conf_ceph(get_safe
=lambda *a
: '5120')
22 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
24 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
26 with pytest
.raises(RuntimeError) as error
:
27 filestore
.SingleType(devices
, args
)
28 msg
= "Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB"
29 assert msg
in str(error
)
31 def test_ssd_device_is_large_enough(self
, fakedevice
, factory
, conf_ceph
):
32 conf_ceph(get_safe
=lambda *a
: '5120')
33 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
35 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=12073740000))
37 computed_osd
= filestore
.SingleType(devices
, args
).computed
['osds'][0]
38 assert computed_osd
['data']['percentage'] == 55
39 assert computed_osd
['data']['parts'] == 1
40 assert computed_osd
['data']['human_readable_size'] == '6.24 GB'
41 assert computed_osd
['data']['path'] == '/dev/sda'
43 def test_ssd_device_with_large_journal(self
, fakedevice
, factory
, conf_ceph
):
44 conf_ceph(get_safe
=lambda *a
: '5120')
45 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
47 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=6073740000))
49 with pytest
.raises(RuntimeError) as error
:
50 filestore
.SingleType(devices
, args
)
51 msg
= "Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB"
52 assert msg
in str(error
)
54 def test_ssd_device_multi_osd(self
, fakedevice
, factory
, conf_ceph
):
55 conf_ceph(get_safe
=lambda *a
: '5120')
56 args
= factory(filtered_devices
=[], osds_per_device
=4, journal_size
=None)
58 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=16073740000))
60 with pytest
.raises(RuntimeError) as error
:
61 filestore
.SingleType(devices
, args
)
62 msg
= "Unable to use device 14.97 GB /dev/sda, LVs would be smaller than 5GB"
63 assert msg
in str(error
)
65 def test_hdd_device_multi_osd(self
, fakedevice
, factory
, conf_ceph
):
66 conf_ceph(get_safe
=lambda *a
: '5120')
67 args
= factory(filtered_devices
=[], osds_per_device
=4, journal_size
=None)
69 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=16073740000))
71 with pytest
.raises(RuntimeError) as error
:
72 filestore
.SingleType(devices
, args
)
73 msg
= "Unable to use device 14.97 GB /dev/sda, LVs would be smaller than 5GB"
74 assert msg
in str(error
)
76 def test_device_is_lvm_member_fails(self
, fakedevice
, factory
, conf_ceph
):
77 conf_ceph(get_safe
=lambda *a
: '5120')
78 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
80 fakedevice(used_by_ceph
=False, is_lvm_member
=True, sys_api
=dict(rotational
='1', size
=12073740000))
82 with pytest
.raises(RuntimeError) as error
:
83 filestore
.SingleType(devices
, args
)
84 assert 'Unable to use device, already a member of LVM' in str(error
)
86 def test_hdd_device_with_small_configured_journal(self
, fakedevice
, factory
, conf_ceph
):
87 conf_ceph(get_safe
=lambda *a
: '120')
88 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
90 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
92 with pytest
.raises(RuntimeError) as error
:
93 filestore
.SingleType(devices
, args
)
94 msg
= "journal sizes must be larger than 2GB, detected: 120.00 MB"
95 assert msg
in str(error
)
97 def test_ssd_device_with_small_configured_journal(self
, fakedevice
, factory
, conf_ceph
):
98 conf_ceph(get_safe
=lambda *a
: '120')
99 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
101 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=6073740000))
103 with pytest
.raises(RuntimeError) as error
:
104 filestore
.SingleType(devices
, args
)
105 msg
= "journal sizes must be larger than 2GB, detected: 120.00 MB"
106 assert msg
in str(error
)
109 class TestMixedType(object):
111 def test_minimum_size_is_not_met(self
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
112 conf_ceph(get_safe
=lambda *a
: '120')
113 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
115 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=6073740000)),
116 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
118 with pytest
.raises(RuntimeError) as error
:
119 filestore
.MixedType(devices
, args
)
120 msg
= "journal sizes must be larger than 2GB, detected: 120.00 MB"
121 assert msg
in str(error
)
123 def test_ssd_device_is_not_large_enough(self
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
124 conf_ceph(get_safe
=lambda *a
: '7120')
125 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
127 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=6073740000)),
128 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
130 with pytest
.raises(RuntimeError) as error
:
131 filestore
.MixedType(devices
, args
)
132 msg
= "Not enough space in fast devices (5.66 GB) to create 1 x 6.95 GB journal LV"
133 assert msg
in str(error
)
135 def test_hdd_device_is_lvm_member_fails(self
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
136 conf_ceph(get_safe
=lambda *a
: '5120')
137 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
139 fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=6073740000)),
140 fakedevice(used_by_ceph
=False, is_lvm_member
=True, sys_api
=dict(rotational
='1', size
=6073740000))
142 with pytest
.raises(RuntimeError) as error
:
143 filestore
.MixedType(devices
, args
)
144 assert 'Unable to use device, already a member of LVM' in str(error
)
146 def test_ssd_is_lvm_member_doesnt_fail(self
, volumes
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
147 # fast PV, because ssd is an LVM member
148 CephPV
= lvm
.PVolume(vg_name
='fast', pv_name
='/dev/sda', pv_tags
='')
150 used_by_ceph
=False, is_lvm_member
=True, sys_api
=dict(rotational
='0', size
=6073740000), pvs_api
=[CephPV
]
152 hdd
= fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
153 # when get_api_vgs() gets called, it will return this one VG
156 vg_free
='7g', vg_name
='fast', lv_name
='foo',
157 lv_path
='/dev/vg/foo', lv_tags
="ceph.type=data"
161 conf_ceph(get_safe
=lambda *a
: '5120')
162 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
164 result
= filestore
.MixedType(devices
, args
).computed
['osds'][0]
165 assert result
['journal']['path'] == 'vg: fast'
166 assert result
['journal']['percentage'] == 71
167 assert result
['journal']['human_readable_size'] == '5.00 GB'
169 def test_no_common_vg(self
, volumes
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
170 # fast PV, because ssd is an LVM member
171 CephPV1
= lvm
.PVolume(vg_name
='fast1', pv_name
='/dev/sda', pv_tags
='')
172 CephPV2
= lvm
.PVolume(vg_name
='fast2', pv_name
='/dev/sdb', pv_tags
='')
174 used_by_ceph
=False, is_lvm_member
=True, sys_api
=dict(rotational
='0', size
=6073740000), pvs_api
=[CephPV1
]
177 used_by_ceph
=False, is_lvm_member
=True, sys_api
=dict(rotational
='0', size
=6073740000), pvs_api
=[CephPV2
]
179 hdd
= fakedevice(used_by_ceph
=False, is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=6073740000))
180 # when get_api_vgs() gets called, it will return this one VG
183 vg_free
='7g', vg_name
='fast1', lv_name
='foo',
184 lv_path
='/dev/vg/fast1', lv_tags
="ceph.type=data"
187 vg_free
='7g', vg_name
='fast2', lv_name
='foo',
188 lv_path
='/dev/vg/fast2', lv_tags
="ceph.type=data"
192 conf_ceph(get_safe
=lambda *a
: '5120')
193 args
= factory(filtered_devices
=[], osds_per_device
=1, journal_size
=None)
194 devices
= [ssd1
, ssd2
, hdd
]
195 with pytest
.raises(RuntimeError) as error
:
196 filestore
.MixedType(devices
, args
)
198 assert 'Could not find a common VG between devices' in str(error
)
200 def test_ssd_device_fails_multiple_osds(self
, stub_vgs
, fakedevice
, factory
, conf_ceph
):
201 conf_ceph(get_safe
=lambda *a
: '15120')
202 args
= factory(filtered_devices
=[], osds_per_device
=2, journal_size
=None)
204 fakedevice(is_lvm_member
=False, sys_api
=dict(rotational
='0', size
=16073740000)),
205 fakedevice(is_lvm_member
=False, sys_api
=dict(rotational
='1', size
=16073740000))
207 with pytest
.raises(RuntimeError) as error
:
208 filestore
.MixedType(devices
, args
)
209 msg
= "Not enough space in fast devices (14.97 GB) to create 2 x 14.77 GB journal LV"
210 assert msg
in str(error
)