From 216ced39bc205a3c1e2d626450c23b5c969ffb0e Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Fri, 14 Feb 2025 12:34:50 +0000 Subject: [PATCH] ceph-volume: refactor get_physical_osds() This refactors `get_physical_osds()`. The calculation of `data_slots` is now more concise. The handling of `dev_size`, `rel_data_size`, and `abs_size` is standardized. The initialization of `free_size` is moved outside the loop for clarity. Redundant checks and assignments are removed to simplify the code. Signed-off-by: Guillaume Abrioux (cherry picked from commit 140199b098bcc203b480330dbd8547230a7954c2) --- .../ceph_volume/devices/lvm/batch.py | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/src/ceph-volume/ceph_volume/devices/lvm/batch.py b/src/ceph-volume/ceph_volume/devices/lvm/batch.py index 57c715a2fb97c..f9ecf4bb5d9ba 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/batch.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/batch.py @@ -597,46 +597,48 @@ class Batch(object): return {k: str(v) for k, v in self._get_osd_plan().items()} def get_physical_osds(devices: List[device.Device], args: argparse.Namespace) -> List[Batch.OSD]: - ''' - Goes through passed physical devices and assigns OSDs - ''' - data_slots = args.osds_per_device - if args.data_slots: - data_slots = max(args.data_slots, args.osds_per_device) - #rel_data_size = args.data_allocate_fraction / data_slots - #mlogger.debug('relative data size: {}'.format(rel_data_size)) + """ + Goes through passed physical devices and assigns OSDs. + """ + data_slots = max(args.data_slots, args.osds_per_device) if args.data_slots else args.osds_per_device ret = [] + for dev in devices: + if not dev.available_lvm: + continue + + total_dev_size = dev.vg_size[0] + dev_size = total_dev_size rel_data_size = args.data_allocate_fraction / data_slots - if dev.available_lvm: - total_dev_size = dev.vg_size[0] - dev_size = dev.vg_size[0] - if args.has_block_db_size_without_db_devices: - all_db_space = args.block_db_size * data_slots - dev_size -= all_db_space.b.as_int() + if args.has_block_db_size_without_db_devices: + all_db_space = args.block_db_size * data_slots + dev_size -= all_db_space.b.as_int() - abs_size = disk.Size(b=int(dev_size * rel_data_size)) - mlogger.error(f'{dev_size} {abs_size} {rel_data_size}') + abs_size = disk.Size(b=int(dev_size * rel_data_size)) - if args.has_block_db_size_without_db_devices: - rel_data_size = abs_size / disk.Size(b=total_dev_size) + if args.has_block_db_size_without_db_devices: + rel_data_size = abs_size / disk.Size(b=total_dev_size) + + free_size = dev.vg_free[0] + + for _ in range(args.osds_per_device): + if abs_size.b > free_size: + break + + free_size -= abs_size.b + osd_id = args.osd_ids.pop() if args.osd_ids else None + + ret.append(Batch.OSD( + dev.path, + rel_data_size, + abs_size, + args.osds_per_device, + osd_id, + 'dmcrypt' if args.dmcrypt else None, + dev.symlink + )) - free_size = dev.vg_free[0] - for _ in range(args.osds_per_device): - if abs_size > free_size: - break - free_size -= abs_size.b - osd_id = None - if args.osd_ids: - osd_id = args.osd_ids.pop() - ret.append(Batch.OSD(dev.path, - rel_data_size, - abs_size, - args.osds_per_device, - osd_id, - 'dmcrypt' if args.dmcrypt else None, - dev.symlink)) return ret def get_lvm_osds(lvs: List[device.Device], args: argparse.Namespace) -> List[Batch.OSD]: -- 2.39.5