# fill up uneven distributions across fast devices: 5 osds and 2 fast
# devices? create 3 slots on each device rather then deploying
# heterogeneous osds
- if (requested_osds - len(lvm_devs)) % len(phys_devs):
- fast_slots_per_device = int((requested_osds - len(lvm_devs)) / len(phys_devs)) + 1
+ slot_divider = max(1, len(phys_devs))
+ if (requested_osds - len(lvm_devs)) % slot_divider:
+ fast_slots_per_device = int((requested_osds - len(lvm_devs)) / slot_divider) + 1
else:
- fast_slots_per_device = int((requested_osds - len(lvm_devs)) / len(phys_devs))
+ fast_slots_per_device = int((requested_osds - len(lvm_devs)) / slot_divider)
ret.extend(get_physical_fast_allocs(phys_devs,
dev.used_by_ceph = False
dev.vg_size = [size]
dev.vg_free = dev.vg_size
+ dev.available_lvm = True
+ dev.is_device = False
dev.lvs = [lvm.Volume(vg_name=dev.vg_name, lv_name=dev.lv_name, lv_size=size, lv_tags='')]
return dev
return mock_lv
'block_db', 2, 2, args)
assert len(fast) == 2
+ def test_batch_fast_allocations_one_block_db_length(self, factory, conf_ceph_stub,
+ mock_lv_device_generator):
+ conf_ceph_stub('[global]\nfsid=asdf-lkjh')
+
+ b = batch.Batch([])
+ db_lv_devices = [mock_lv_device_generator()]
+ fast = b.fast_allocations(db_lv_devices, 1, 0, 'block_db')
+ assert len(fast) == 1
+
@pytest.mark.parametrize('occupied_prior', range(7))
@pytest.mark.parametrize('slots,num_devs',
[l for sub in [list(zip([x]*x, range(1, x + 1))) for x in range(1,7)] for l in sub])