]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: batch: fix size retrieval for lvs
authorJan Fajerski <jfajerski@suse.com>
Thu, 10 Sep 2020 14:45:34 +0000 (16:45 +0200)
committerJan Fajerski <jfajerski@suse.com>
Fri, 25 Sep 2020 09:50:23 +0000 (11:50 +0200)
Signed-off-by: Jan Fajerski <jfajerski@suse.com>
src/ceph-volume/ceph_volume/devices/lvm/batch.py
src/ceph-volume/ceph_volume/tests/conftest.py
src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py

index 9f18fe478fca316b5a701e00aabb486bbde707b3..877fd58e674761748ea3d15a93539ec47a2eb659 100644 (file)
@@ -90,7 +90,7 @@ def get_lvm_osds(lvs, args):
             osd_id = args.osd_ids.pop()
         osd = Batch.OSD("{}/{}".format(lv.vg_name, lv.lv_name),
                         100.0,
-                        disk.Size(b=int(lv.lv_size)),
+                        disk.Size(b=int(lv.lvs[0].lv_size)),
                         1,
                         osd_id,
                         'dmcrypt' if args.dmcrypt else None)
@@ -142,7 +142,7 @@ def get_physical_fast_allocs(devices, type_, fast_slots_per_device, new_osds, ar
 
 def get_lvm_fast_allocs(lvs):
     return [("{}/{}".format(d.vg_name, d.lv_name), 100.0,
-             disk.Size(b=int(d.lv_size)), 1) for d in lvs if not
+             disk.Size(b=int(d.lvs[0].lv_size)), 1) for d in lvs if not
             d.used_by_ceph]
 
 
index bf6235b755ce57ee6e9203cce2067504aa9378de..2abedac3240dbc20942b7dfa39cc898fa2d1879e 100644 (file)
@@ -1,6 +1,7 @@
 import os
 import pytest
 from mock.mock import patch, PropertyMock, create_autospec
+from ceph_volume.api import lvm
 from ceph_volume.util import disk
 from ceph_volume.util import device
 from ceph_volume.util.constants import ceph_disk_guids
@@ -40,6 +41,21 @@ def factory():
 def capture():
     return Capture()
 
+@pytest.fixture
+def mock_lv_device_generator():
+    def mock_lv():
+        size = 21474836480
+        dev = create_autospec(device.Device)
+        dev.lv_name = 'lv'
+        dev.vg_name = 'vg'
+        dev.path = '{}/{}'.format(dev.vg_name, dev.lv_name)
+        dev.used_by_ceph = False
+        dev.vg_size = [size]
+        dev.vg_free = dev.vg_size
+        dev.lvs = [lvm.Volume(vg_name=dev.vg_name, lv_name=dev.lv_name, lv_size=size, lv_tags='')]
+        return dev
+    return mock_lv
+
 
 @pytest.fixture
 def mock_devices_available():
index 4ccf29267a2d299c9ebd5b32331b1eda1a80efaa..b2b599a4a460e432288d6d2a30a78a3cbb2ed74e 100644 (file)
@@ -115,3 +115,14 @@ class TestBatch(object):
         expected_assignment_on_used_devices = sum([slots - len(d.lvs) for d in devs if len(d.lvs) > 0])
         assert len([f for f in fast if f[0] == '/dev/bar']) == expected_assignment_on_used_devices
         assert len([f for f in fast if f[0] != '/dev/bar']) == expected_num_osds - expected_assignment_on_used_devices
+
+    def test_get_lvm_osds_return_len(self, factory,
+                                     mock_lv_device_generator,
+                                     conf_ceph_stub,
+                                     osds_per_device):
+        conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+        args = factory(data_slots=1, osds_per_device=osds_per_device,
+                       osd_ids=[], dmcrypt=False)
+        mock_lvs = [mock_lv_device_generator()]
+        osds = batch.get_lvm_osds(mock_lvs, args)
+        assert len(osds) == 1