]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume tests.devices.lvm add bluestore strategy cases
authorAlfredo Deza <adeza@redhat.com>
Tue, 11 Sep 2018 20:53:05 +0000 (16:53 -0400)
committerAlfredo Deza <adeza@redhat.com>
Thu, 13 Sep 2018 15:29:30 +0000 (11:29 -0400)
Signed-off-by: Alfredo Deza <adeza@redhat.com>
(cherry picked from commit 2ced05a2bc6ba01cf8946f43d5839890a28cab20)

src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py [new file with mode: 0644]

diff --git a/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py b/src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py
new file mode 100644 (file)
index 0000000..ddc91f7
--- /dev/null
@@ -0,0 +1,139 @@
+import pytest
+from ceph_volume.devices.lvm.strategies import bluestore
+
+
+class TestSingleType(object):
+
+    def test_hdd_device_is_large_enough(self, fakedevice, factory):
+        args = factory(osds_per_device=1)
+        devices = [
+            fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        ]
+        computed_osd = bluestore.SingleType(devices, args).computed['osds'][0]
+        assert computed_osd['data']['percentage'] == 100
+        assert computed_osd['data']['parts'] == 1
+        assert computed_osd['data']['human_readable_size'] == '5.66 GB'
+        assert computed_osd['data']['path'] == '/dev/sda'
+
+    def test_sdd_device_is_large_enough(self, fakedevice, factory):
+        args = factory(osds_per_device=1)
+        devices = [
+            fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
+        ]
+        computed_osd = bluestore.SingleType(devices, args).computed['osds'][0]
+        assert computed_osd['data']['percentage'] == 100
+        assert computed_osd['data']['parts'] == 1
+        assert computed_osd['data']['human_readable_size'] == '5.66 GB'
+        assert computed_osd['data']['path'] == '/dev/sda'
+
+    def test_device_cannot_have_many_osds_per_device(self, fakedevice, factory):
+        args = factory(osds_per_device=3)
+        devices = [
+            fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        ]
+        with pytest.raises(RuntimeError) as error:
+            bluestore.SingleType(devices, args)
+        assert 'Unable to use device 5.66 GB /dev/sda' in str(error)
+
+    def test_device_is_lvm_member_fails(self, fakedevice, factory):
+        args = factory(osds_per_device=1)
+        devices = [
+            fakedevice(is_lvm_member=True, sys_api=dict(rotational='1', size=6073740000))
+        ]
+        with pytest.raises(RuntimeError) as error:
+            bluestore.SingleType(devices, args)
+        assert 'Unable to use device, already a member of LVM' in str(error)
+
+
+class TestMixedTypeConfiguredSize(object):
+    # uses a block.db size that has been configured via ceph.conf, instead of
+    # defaulting to 'as large as possible'
+
+    def test_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        # 3GB block.db in ceph.conf
+        conf_ceph(get_safe=lambda *a: 3147483640)
+        args = factory(osds_per_device=1)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        devices = [ssd, hdd]
+
+        osd = bluestore.MixedType(devices, args).computed['osds'][0]
+        assert osd['data']['percentage'] == 100
+        assert osd['data']['human_readable_size'] == '5.66 GB'
+        assert osd['data']['path'] == '/dev/sda'
+        # a new vg will be created
+        assert osd['block.db']['path'] == 'vg: vg/lv'
+        assert osd['block.db']['percentage'] == 100
+
+    def test_ssd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        # 7GB block.db in ceph.conf
+        conf_ceph(get_safe=lambda *a: 7747483640)
+        args = factory(osds_per_device=1)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        devices = [ssd, hdd]
+
+        with pytest.raises(RuntimeError) as error:
+            bluestore.MixedType(devices, args).computed['osds'][0]
+        expected = 'Not enough space in fast devices (5.66 GB) to create 1 x 7.22 GB block.db LV'
+        assert expected in str(error)
+
+    def test_multi_hdd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        # 3GB block.db in ceph.conf
+        conf_ceph(get_safe=lambda *a: 3147483640)
+        args = factory(osds_per_device=2)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=60737400000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        devices = [ssd, hdd]
+
+        with pytest.raises(RuntimeError) as error:
+            bluestore.MixedType(devices, args)
+        expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
+        assert expected in str(error)
+
+
+class TestMixedTypeLargeAsPossible(object):
+
+    def test_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        conf_ceph(get_safe=lambda *a: None)
+        args = factory(osds_per_device=1)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=6073740000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        devices = [ssd, hdd]
+
+        osd = bluestore.MixedType(devices, args).computed['osds'][0]
+        assert osd['data']['percentage'] == 100
+        assert osd['data']['human_readable_size'] == '5.66 GB'
+        assert osd['data']['path'] == '/dev/sda'
+        # a new vg will be created
+        assert osd['block.db']['path'] == 'vg: vg/lv'
+        # as large as possible
+        assert osd['block.db']['percentage'] == 100
+
+    def test_multi_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        conf_ceph(get_safe=lambda *a: None)
+        args = factory(osds_per_device=2)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=60073740000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
+        devices = [ssd, hdd]
+
+        osd = bluestore.MixedType(devices, args).computed['osds'][0]
+        assert osd['data']['percentage'] == 50
+        assert osd['data']['human_readable_size'] == '27.97 GB'
+        assert osd['data']['path'] == '/dev/sda'
+        # a new vg will be created
+        assert osd['block.db']['path'] == 'vg: vg/lv'
+        # as large as possible
+        assert osd['block.db']['percentage'] == 50
+
+    def test_multi_hdd_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        conf_ceph(get_safe=lambda *a: None)
+        args = factory(osds_per_device=2)
+        ssd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='0', size=60737400000))
+        hdd = fakedevice(is_lvm_member=False, sys_api=dict(rotational='1', size=6073740000))
+        devices = [ssd, hdd]
+
+        with pytest.raises(RuntimeError) as error:
+            bluestore.MixedType(devices, args)
+        expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
+        assert expected in str(error)