summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.zuul.yaml4
-rw-r--r--nova/tests/unit/virt/libvirt/test_driver.py11
-rw-r--r--nova/virt/libvirt/driver.py11
-rw-r--r--releasenotes/notes/bug-1960230-cleanup-instances-dir-resize-56282e1b436a4908.yaml6
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.