Skip to content

Commit bcd94d1

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "libvirt: ensure disk_over_commit is not negative"
2 parents 24223ce + 6108470 commit bcd94d1

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

nova/tests/unit/virt/libvirt/test_driver.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16817,6 +16817,34 @@ def test_get_instance_disk_info_from_config_raw_files(self,
1681716817
self.assertEqual(expected_over_committed_disk_size,
1681816818
disk_info[0]['over_committed_disk_size'])
1681916819

16820+
@mock.patch('nova.virt.disk.api.get_disk_info')
16821+
@mock.patch('nova.virt.libvirt.utils.get_disk_backing_file',
16822+
return_value='file')
16823+
def test_get_instance_disk_info_from_config_negative(self,
16824+
mock_backing_file, mock_disk_info):
16825+
"""Test that over_committed_disk_size is set to 0 when
16826+
disk_actual_size is greater than disk_virtual_size
16827+
"""
16828+
config = vconfig.LibvirtConfigGuest()
16829+
16830+
disk_config = vconfig.LibvirtConfigGuestDisk()
16831+
disk_config.source_type = "file"
16832+
disk_config.source_path = "fake"
16833+
disk_config.driver_format = 'qcow2'
16834+
config.devices.append(disk_config)
16835+
16836+
disk_virtual_size = 53687091200
16837+
disk_actual_size = 54000000000
16838+
expected_over_committed_disk_size = 0
16839+
16840+
mock_disk_info.return_value = mock.Mock(disk_size=disk_actual_size,
16841+
virtual_size=disk_virtual_size)
16842+
16843+
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
16844+
disk_info = drvr._get_instance_disk_info_from_config(config, None)
16845+
self.assertEqual(expected_over_committed_disk_size,
16846+
disk_info[0]['over_committed_disk_size'])
16847+
1682016848
def test_cpu_info(self):
1682116849
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
1682216850

nova/virt/libvirt/driver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9858,7 +9858,7 @@ def _get_instance_disk_info_from_config(self, guest_config,
98589858
dk_size = qemu_img_info.disk_size
98599859
virt_size = qemu_img_info.virtual_size
98609860
backing_file = libvirt_utils.get_disk_backing_file(path)
9861-
over_commit_size = int(virt_size) - dk_size
9861+
over_commit_size = max(0, int(virt_size) - dk_size)
98629862

98639863
elif disk_type == 'file':
98649864
dk_size = os.stat(path).st_blocks * 512

0 commit comments

Comments
 (0)