diff options
author | yuanyue <yyuanyuee@163.com> | 2017-06-21 03:11:43 -0700 |
---|---|---|
committer | Matt Riedemann <mriedem.os@gmail.com> | 2018-04-18 16:31:22 -0400 |
commit | c407a691674aff37b952e14d6a125e5e42d79f02 (patch) | |
tree | 8dc70ad519bc4ee4ec635b162af1d018bec0d4ec | |
parent | 2fffe196347c96092b0b22f49bc3d693b0f1d4ed (diff) | |
download | nova-c407a691674aff37b952e14d6a125e5e42d79f02.tar.gz |
Clean up volumes on boot failure
When instance fails to spawn, nova would just shutdown
the instance, during which volumes would be detached.
If not retry, volumes created by the boot task would
be left. In fact, volumes should be cleaned up.
This patch fixes this.
Change-Id: I877d8eff8d2fecde0cd16b01e80bff41bdb8d88a
Closes-Bug: #1699469
(cherry picked from commit 1a32bfd2ca1541af935b13b86728f124bba3d2c4)
-rw-r--r-- | nova/compute/manager.py | 2 | ||||
-rw-r--r-- | nova/tests/unit/compute/test_compute_mgr.py | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 2e83f07ae6..834bf42d6b 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -1796,6 +1796,8 @@ class ComputeManager(manager.Manager): instance=instance) self._cleanup_allocated_networks(context, instance, requested_networks) + self._cleanup_volumes(context, instance.uuid, + block_device_mapping, raise_exc=False) compute_utils.add_instance_fault_from_exc(context, instance, e, sys.exc_info(), fault_message=e.kwargs['reason']) diff --git a/nova/tests/unit/compute/test_compute_mgr.py b/nova/tests/unit/compute/test_compute_mgr.py index 394a1a4620..9c3b224abf 100644 --- a/nova/tests/unit/compute/test_compute_mgr.py +++ b/nova/tests/unit/compute/test_compute_mgr.py @@ -3776,6 +3776,9 @@ class ComputeManagerBuildInstanceTestCase(test.NoDBTestCase): self.block_device_mapping, self.node, self.limits, {}) mock_clean_net.assert_called_once_with(self.context, self.instance, self.requested_networks) + mock_clean_vol.assert_called_once_with(self.context, + self.instance.uuid, self.block_device_mapping, + raise_exc=False) mock_add.assert_called_once_with(self.context, self.instance, mock.ANY, mock.ANY, fault_message=mock.ANY) mock_nil.assert_called_once_with(self.instance) |