summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryuanyue <yyuanyuee@163.com>2017-06-21 03:11:43 -0700
committerMatt Riedemann <mriedem.os@gmail.com>2018-04-18 16:31:22 -0400
commitc407a691674aff37b952e14d6a125e5e42d79f02 (patch)
tree8dc70ad519bc4ee4ec635b162af1d018bec0d4ec
parent2fffe196347c96092b0b22f49bc3d693b0f1d4ed (diff)
downloadnova-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.py2
-rw-r--r--nova/tests/unit/compute/test_compute_mgr.py3
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)