]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: add a wal device specific unit test and size validator
authorJan Fajerski <jfajerski@suse.com>
Thu, 24 Jan 2019 17:10:45 +0000 (18:10 +0100)
committerJan Fajerski <jfajerski@suse.com>
Wed, 30 Jan 2019 14:48:12 +0000 (15:48 +0100)
Signed-off-by: Jan Fajerski <jfajerski@suse.com>
src/ceph-volume/ceph_volume/devices/lvm/strategies/bluestore.py
src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py
src/ceph-volume/ceph_volume/tests/devices/lvm/strategies/test_bluestore.py

index 0024d4428c9ac117345768e5d93c2c1b66d114d7..07116661c57f79a55d446209947bdf17b57dd818 100644 (file)
@@ -396,7 +396,11 @@ class MixedType(MixedStrategy):
         those LVs would be large enough to accommodate a block.db
         """
         # validate minimum size for all devices
-        validators.minimum_device_size(self.devices, osds_per_device=self.osds_per_device)
+        validators.minimum_device_size(self.data_devs + self.db_or_journal_devs,
+                                       osds_per_device=self.osds_per_device)
+        validators.minimum_device_size(self.wal_devs,
+                                      osds_per_device=self.osds_per_device,
+                                      min_size=1)
 
         # make sure that data devices do not have any LVs
         validators.no_lvm_membership(self.data_devs)
index 3d01e5778370c55e59fd76701d7ad9eb46716118..f67d6ffaa97361d178c4e1037468206b240c1a20 100644 (file)
@@ -2,16 +2,16 @@ from ceph_volume.util import disk
 from ceph_volume.api import lvm
 
 
-def minimum_device_size(devices, osds_per_device=1):
+def minimum_device_size(devices, osds_per_device=1, min_size=5):
     """
     Ensure that the minimum requirements for this type of scenario is
     met, raise an error if the provided devices would not work
     """
-    msg = 'Unable to use device %s %s, LVs would be smaller than 5GB'
+    msg = 'Unable to use device %s %s, LVs would be smaller than {}GB'.format(min_size)
     for device in devices:
         device_size = disk.Size(b=device.lvm_size.b)
         lv_size = device_size / osds_per_device
-        if lv_size < disk.Size(gb=5):
+        if lv_size < disk.Size(gb=min_size):
             raise RuntimeError(msg % (device_size, device.path))
 
 
index 1af580c631ad880a41cc209c1a2fbb571806c863..4f19405a7623363743ba6edec6a0b5942ae6100f 100644 (file)
@@ -153,3 +153,36 @@ class TestMixedTypeLargeAsPossible(object):
             bluestore.MixedType.with_auto_devices(args, devices)
         expected = 'Unable to use device 5.66 GB /dev/sda, LVs would be smaller than 5GB'
         assert expected in str(error)
+
+
+class TestMixedTypeWithExplicitDevices(object):
+
+    def test_multi_hdd_device_is_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        conf_ceph(get_safe=lambda *a: None)
+        args = factory(filtered_devices=[], osds_per_device=2,
+                       block_db_size=None, block_wal_size=None,
+                       osd_ids=[])
+        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=60073740000))
+        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
+
+        osd = bluestore.MixedType(args, [hdd], [], [ssd]).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.wal']['path'] == 'vg: vg/lv'
+        # as large as possible
+        assert osd['block.wal']['percentage'] == 50
+
+    def test_wal_device_is_not_large_enough(self, stub_vgs, fakedevice, factory, conf_ceph):
+        conf_ceph(get_safe=lambda *a: None)
+        args = factory(filtered_devices=[], osds_per_device=2,
+                       block_db_size=None, block_wal_size=None,
+                       osd_ids=[])
+        ssd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='0', size=1610612736))
+        hdd = fakedevice(used_by_ceph=False, is_lvm_member=False, sys_api=dict(rotational='1', size=60073740000))
+
+        with pytest.raises(RuntimeError) as error:
+            bluestore.MixedType(args, [hdd], [], [ssd]).computed['osds'][0]
+        expected = 'Unable to use device 1.50 GB /dev/sda, LVs would be smaller than 1GB'
+        assert expected in str(error), str(error)