diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index aa2f0ba167b0..15a06a1653aa 100755 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -7350,6 +7350,39 @@ class LibvirtConnTestCase(test.NoDBTestCase, "is_volume_backed": False}, matchers.DictMatches(return_value.to_legacy_dict())) + @mock.patch.object(objects.Service, 'get_by_compute_host') + @mock.patch.object(libvirt_driver.LibvirtDriver, + '_create_shared_storage_test_file') + @mock.patch.object(fakelibvirt.Connection, 'compareCPU') + def test_check_can_live_migrate_dest_all_pass_with_over_commit( + self, mock_cpu, mock_test_file, mock_svc): + instance_ref = objects.Instance(**self.test_instance) + instance_ref.vcpu_model = test_vcpu_model.fake_vcpumodel + drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) + compute_info = {'disk_available_least': -1000, + 'local_gb': 100, + 'cpu_info': 'asdf', + } + filename = "file" + + # _check_cpu_match + mock_cpu.return_value = 1 + + # mounted_on_same_shared_storage + mock_test_file.return_value = filename + + # No need for the src_compute_info + return_value = drvr.check_can_live_migrate_destination(self.context, + instance_ref, None, compute_info, True, True) + return_value.is_volume_backed = False + self.assertThat({"filename": "file", + 'image_type': 'default', + 'disk_available_mb': 102400, + "disk_over_commit": True, + "block_migration": True, + "is_volume_backed": False}, + matchers.DictMatches(return_value.to_legacy_dict())) + @mock.patch.object(objects.Service, 'get_by_compute_host') @mock.patch.object(libvirt_driver.LibvirtDriver, '_create_shared_storage_test_file') diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 407b9daf83f3..d6d32c0a66d8 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -5894,7 +5894,10 @@ class LibvirtDriver(driver.ComputeDriver): :param disk_over_commit: if true, allow disk over commit :returns: a LibvirtLiveMigrateData object """ - disk_available_gb = dst_compute_info['disk_available_least'] + if disk_over_commit: + disk_available_gb = dst_compute_info['local_gb'] + else: + disk_available_gb = dst_compute_info['disk_available_least'] disk_available_mb = ( (disk_available_gb * units.Ki) - CONF.reserved_host_disk_mb)