diff options
-rw-r--r-- | .zuul.yaml | 4 | ||||
-rw-r--r-- | nova/tests/unit/virt/libvirt/test_driver.py | 11 | ||||
-rw-r--r-- | nova/virt/libvirt/driver.py | 11 | ||||
-rw-r--r-- | releasenotes/notes/bug-1960230-cleanup-instances-dir-resize-56282e1b436a4908.yaml | 6 |
4 files changed, 21 insertions, 11 deletions
diff --git a/.zuul.yaml b/.zuul.yaml index baa199626e..401f6f9f89 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -566,8 +566,6 @@ irrelevant-files: *policies-irrelevant-files - tempest-ipv6-only: irrelevant-files: *dsvm-irrelevant-files - - openstacksdk-functional-devstack: - irrelevant-files: *dsvm-irrelevant-files - cyborg-tempest: irrelevant-files: *dsvm-irrelevant-files voting: false @@ -595,8 +593,6 @@ irrelevant-files: *policies-irrelevant-files - tempest-ipv6-only: irrelevant-files: *dsvm-irrelevant-files - - openstacksdk-functional-devstack: - irrelevant-files: *dsvm-irrelevant-files experimental: jobs: - ironic-tempest-bfv: diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index a009284270..6d6543d43b 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -21457,6 +21457,8 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): context.get_admin_context(), ins_ref, '10.0.0.2', flavor_obj, None) + @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.' + '_cleanup_failed_instance_base') @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.unplug_vifs') @mock.patch('nova.virt.libvirt.utils.save_and_migrate_vtpm_dir') @mock.patch('nova.virt.libvirt.driver.LibvirtDriver.' @@ -21473,7 +21475,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): self, ctxt, flavor_obj, mock_execute, mock_exists, mock_rename, mock_is_shared, mock_get_host_ip, mock_destroy, mock_get_disk_info, mock_vtpm, mock_unplug_vifs, - block_device_info=None, params_for_instance=None): + mock_cleanup, block_device_info=None, params_for_instance=None): """Test for nova.virt.libvirt.driver.LivirtConnection .migrate_disk_and_power_off. """ @@ -21488,6 +21490,8 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): ctxt, instance, '10.0.0.2', flavor_obj, None, block_device_info=block_device_info) + mock_cleanup.assert_called_once() + mock_cleanup.reset_mock() self.assertEqual(out, disk_info_text) mock_vtpm.assert_called_with( instance.uuid, mock.ANY, mock.ANY, '10.0.0.2', mock.ANY, mock.ANY) @@ -21498,6 +21502,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): ctxt, instance, '10.0.0.1', flavor_obj, None, block_device_info=block_device_info) + mock_cleanup.assert_called_once() self.assertEqual(out, disk_info_text) mock_vtpm.assert_called_with( instance.uuid, mock.ANY, mock.ANY, '10.0.0.1', mock.ANY, mock.ANY) @@ -22395,8 +22400,8 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): self.assertFalse(drvr.image_backend.remove_snap.called) @mock.patch.object(shutil, 'rmtree') - def test_cleanup_failed_migration(self, mock_rmtree): - self.drvr._cleanup_failed_migration('/fake/inst') + def test_cleanup_failed_instance_base(self, mock_rmtree): + self.drvr._cleanup_failed_instance_base('/fake/inst') mock_rmtree.assert_called_once_with('/fake/inst') @mock.patch.object(libvirt_driver.LibvirtDriver, '_cleanup_resize') diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index aee8a2aa28..735557a3aa 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -10851,6 +10851,9 @@ class LibvirtDriver(driver.ComputeDriver): disk_info = self._get_instance_disk_info(instance, block_device_info) try: + # If cleanup failed in previous resize attempts we try to remedy + # that before a resize is tried again + self._cleanup_failed_instance_base(inst_base_resize) os.rename(inst_base, inst_base_resize) # if we are migrating the instance with shared instance path then # create the directory. If it is a remote node the directory @@ -11074,9 +11077,9 @@ class LibvirtDriver(driver.ComputeDriver): LOG.debug("finish_migration finished successfully.", instance=instance) - def _cleanup_failed_migration(self, inst_base): - """Make sure that a failed migrate doesn't prevent us from rolling - back in a revert. + def _cleanup_failed_instance_base(self, inst_base): + """Make sure that a failed migrate or resize doesn't prevent us from + rolling back in a revert or retrying a resize. """ try: shutil.rmtree(inst_base) @@ -11132,7 +11135,7 @@ class LibvirtDriver(driver.ComputeDriver): # that would conflict. Also, don't fail on the rename if the # failure happened early. if os.path.exists(inst_base_resize): - self._cleanup_failed_migration(inst_base) + self._cleanup_failed_instance_base(inst_base) os.rename(inst_base_resize, inst_base) root_disk = self.image_backend.by_name(instance, 'disk') diff --git a/releasenotes/notes/bug-1960230-cleanup-instances-dir-resize-56282e1b436a4908.yaml b/releasenotes/notes/bug-1960230-cleanup-instances-dir-resize-56282e1b436a4908.yaml new file mode 100644 index 0000000000..7a89c66092 --- /dev/null +++ b/releasenotes/notes/bug-1960230-cleanup-instances-dir-resize-56282e1b436a4908.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Fixed bug `1960230 <https://bugs.launchpad.net/nova/+bug/1960230>`_ that + prevented resize of instances that had previously failed and not been + cleaned up. |