diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 6049c9f0bfa9..719376602149 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -11671,12 +11671,19 @@ class LibvirtDriverTestCase(test.NoDBTestCase): mock_path.return_value = instance_base mock_shared.return_value = False - self.drvr.migrate_disk_and_power_off(context.get_admin_context(), - instance, mock.sentinel, - flavor_obj, None) - src_disk_info_path = os.path.join(instance_base + '_resize', 'disk.info') + + with mock.patch.object(os.path, 'exists', autospec=True) \ + as mock_exists: + # disk.info exists on the source + mock_exists.side_effect = \ + lambda path: path == src_disk_info_path + self.drvr.migrate_disk_and_power_off(context.get_admin_context(), + instance, mock.sentinel, + flavor_obj, None) + self.assertTrue(mock_exists.called) + dst_disk_info_path = os.path.join(instance_base, 'disk.info') mock_copy.assert_any_call(src_disk_info_path, dst_disk_info_path, host=mock.sentinel, on_execute=mock.ANY, diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 0d68b16cdf1d..180bd4f88825 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -6338,6 +6338,11 @@ class LibvirtDriver(driver.ComputeDriver): dest = None utils.execute('mkdir', '-p', inst_base) + on_execute = lambda process: \ + self.job_tracker.add_job(instance, process.pid) + on_completion = lambda process: \ + self.job_tracker.remove_job(instance, process.pid) + active_flavor = instance.get_flavor() for info in disk_info: # assume inst_base == dirname(info['path']) @@ -6357,11 +6362,6 @@ class LibvirtDriver(driver.ComputeDriver): # finish_migration/_create_image to re-create it for us. continue - on_execute = lambda process: self.job_tracker.add_job( - instance, process.pid) - on_completion = lambda process: self.job_tracker.remove_job( - instance, process.pid) - if info['type'] == 'qcow2' and info['backing_file']: tmp_path = from_path + "_rbase" # merge backing file @@ -6384,10 +6384,12 @@ class LibvirtDriver(driver.ComputeDriver): # Ensure disk.info is written to the new path to avoid disks being # reinspected and potentially changing format. src_disk_info_path = os.path.join(inst_base_resize, 'disk.info') - dst_disk_info_path = os.path.join(inst_base, 'disk.info') - libvirt_utils.copy_image(src_disk_info_path, dst_disk_info_path, - host=dest, on_execute=on_execute, - on_completion=on_completion) + if os.path.exists(src_disk_info_path): + dst_disk_info_path = os.path.join(inst_base, 'disk.info') + libvirt_utils.copy_image(src_disk_info_path, + dst_disk_info_path, + host=dest, on_execute=on_execute, + on_completion=on_completion) except Exception: with excutils.save_and_reraise_exception(): self._cleanup_remote_migration(dest, inst_base,