Skip to content

Commit 8e87ff5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Cleanup old resize instances dir before resize" into stable/xena
2 parents ba3c5b8 + 31179f6 commit 8e87ff5

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21511,6 +21511,8 @@ def test_migrate_disk_and_power_off_exception(
2151121511
context.get_admin_context(), ins_ref, '10.0.0.2',
2151221512
flavor_obj, None)
2151321513

21514+
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
21515+
'_cleanup_failed_instance_base')
2151421516
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.unplug_vifs')
2151521517
@mock.patch('nova.virt.libvirt.utils.save_and_migrate_vtpm_dir')
2151621518
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
@@ -21527,7 +21529,7 @@ def _test_migrate_disk_and_power_off(
2152721529
self, ctxt, flavor_obj, mock_execute, mock_exists, mock_rename,
2152821530
mock_is_shared, mock_get_host_ip, mock_destroy,
2152921531
mock_get_disk_info, mock_vtpm, mock_unplug_vifs,
21530-
block_device_info=None, params_for_instance=None):
21532+
mock_cleanup, block_device_info=None, params_for_instance=None):
2153121533
"""Test for nova.virt.libvirt.driver.LivirtConnection
2153221534
.migrate_disk_and_power_off.
2153321535
"""
@@ -21542,6 +21544,8 @@ def _test_migrate_disk_and_power_off(
2154221544
ctxt, instance, '10.0.0.2', flavor_obj, None,
2154321545
block_device_info=block_device_info)
2154421546

21547+
mock_cleanup.assert_called_once()
21548+
mock_cleanup.reset_mock()
2154521549
self.assertEqual(out, disk_info_text)
2154621550
mock_vtpm.assert_called_with(
2154721551
instance.uuid, mock.ANY, mock.ANY, '10.0.0.2', mock.ANY, mock.ANY)
@@ -21552,6 +21556,7 @@ def _test_migrate_disk_and_power_off(
2155221556
ctxt, instance, '10.0.0.1', flavor_obj, None,
2155321557
block_device_info=block_device_info)
2155421558

21559+
mock_cleanup.assert_called_once()
2155521560
self.assertEqual(out, disk_info_text)
2155621561
mock_vtpm.assert_called_with(
2155721562
instance.uuid, mock.ANY, mock.ANY, '10.0.0.1', mock.ANY, mock.ANY)
@@ -22449,8 +22454,8 @@ def test_finish_revert_migration_snap_backend_image_does_not_exist(self):
2244922454
self.assertFalse(drvr.image_backend.remove_snap.called)
2245022455

2245122456
@mock.patch.object(shutil, 'rmtree')
22452-
def test_cleanup_failed_migration(self, mock_rmtree):
22453-
self.drvr._cleanup_failed_migration('/fake/inst')
22457+
def test_cleanup_failed_instance_base(self, mock_rmtree):
22458+
self.drvr._cleanup_failed_instance_base('/fake/inst')
2245422459
mock_rmtree.assert_called_once_with('/fake/inst')
2245522460

2245622461
@mock.patch.object(libvirt_driver.LibvirtDriver, '_cleanup_resize')

nova/virt/libvirt/driver.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10933,6 +10933,9 @@ def migrate_disk_and_power_off(self, context, instance, dest,
1093310933
disk_info = self._get_instance_disk_info(instance, block_device_info)
1093410934

1093510935
try:
10936+
# If cleanup failed in previous resize attempts we try to remedy
10937+
# that before a resize is tried again
10938+
self._cleanup_failed_instance_base(inst_base_resize)
1093610939
os.rename(inst_base, inst_base_resize)
1093710940
# if we are migrating the instance with shared instance path then
1093810941
# create the directory. If it is a remote node the directory
@@ -11156,9 +11159,9 @@ def finish_migration(
1115611159

1115711160
LOG.debug("finish_migration finished successfully.", instance=instance)
1115811161

11159-
def _cleanup_failed_migration(self, inst_base):
11160-
"""Make sure that a failed migrate doesn't prevent us from rolling
11161-
back in a revert.
11162+
def _cleanup_failed_instance_base(self, inst_base):
11163+
"""Make sure that a failed migrate or resize doesn't prevent us from
11164+
rolling back in a revert or retrying a resize.
1116211165
"""
1116311166
try:
1116411167
shutil.rmtree(inst_base)
@@ -11214,7 +11217,7 @@ def finish_revert_migration(
1121411217
# that would conflict. Also, don't fail on the rename if the
1121511218
# failure happened early.
1121611219
if os.path.exists(inst_base_resize):
11217-
self._cleanup_failed_migration(inst_base)
11220+
self._cleanup_failed_instance_base(inst_base)
1121811221
os.rename(inst_base_resize, inst_base)
1121911222

1122011223
root_disk = self.image_backend.by_name(instance, 'disk')
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
fixes:
3+
- |
4+
Fixed bug `1960230 <https://bugs.launchpad.net/nova/+bug/1960230>`_ that
5+
prevented resize of instances that had previously failed and not been
6+
cleaned up.

0 commit comments

Comments
 (0)