From: Jan Fajerski Date: Thu, 10 Sep 2020 14:45:34 +0000 (+0200) Subject: ceph-volume: batch: fix size retrieval for lvs X-Git-Tag: v16.1.0~950^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=24e4aa1296608ef861d4ea4b6a1892246a53ef76;p=ceph.git ceph-volume: batch: fix size retrieval for lvs Signed-off-by: Jan Fajerski --- diff --git a/src/ceph-volume/ceph_volume/devices/lvm/batch.py b/src/ceph-volume/ceph_volume/devices/lvm/batch.py index 9f18fe478fc..877fd58e674 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/batch.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/batch.py @@ -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] diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index bf6235b755c..2abedac3240 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -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(): diff --git a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py index 4ccf29267a2..b2b599a4a46 100644 --- a/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py +++ b/src/ceph-volume/ceph_volume/tests/devices/lvm/test_batch.py @@ -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