summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorMatt Riedemann <mriedem@us.ibm.com>2013-05-21 13:33:19 -0700
committerMatt Riedemann <mriedem@us.ibm.com>2013-05-23 06:27:33 -0700
commit6ea7df2cbcdca6c9be0c44d2436e24549c499297 (patch)
treeed8c5a5f2e623d7fe032c9ea95c482c24ab129c2 /nova/virt
parent047cd03ee124a5c059f79776b8b8b358410584e1 (diff)
Fix UnboundLocalError in powervm lvm cleanup code
During spawn, if a local volume for the backing block device fails to be created, the cleanup operation for the volume can fail with a "UnboundLocalError: local variable 'disk_name' referenced before assignment" error. The fix is to assign to disk_name earlier and check for None before running cleanup. This patch also adds tests to cover the failure case. Fixes bug 1180955 Change-Id: I0f32df1586d7bd87eccb674fec2a9597b1ce351d
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/powervm/blockdev.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/nova/virt/powervm/blockdev.py b/nova/virt/powervm/blockdev.py
index 5b15c14bb..5e207e1f2 100644
--- a/nova/virt/powervm/blockdev.py
+++ b/nova/virt/powervm/blockdev.py
@@ -181,6 +181,7 @@ class PowerVMLocalVolumeAdapter(PowerVMDiskAdapter):
size_gb = max(instance_type['root_gb'], constants.POWERVM_MIN_ROOT_GB)
size = size_gb * 1024 * 1024 * 1024
+ disk_name = None
try:
LOG.debug(_("Creating logical volume of size %s bytes") % size)
disk_name = self._create_logical_volume(size)
@@ -192,12 +193,13 @@ class PowerVMLocalVolumeAdapter(PowerVMDiskAdapter):
"Will attempt cleanup."))
# attempt cleanup of logical volume before re-raising exception
with excutils.save_and_reraise_exception():
- try:
- self.delete_volume(disk_name)
- except Exception:
- msg = _('Error while attempting cleanup of failed '
- 'deploy to logical volume.')
- LOG.exception(msg)
+ if disk_name is not None:
+ try:
+ self.delete_volume(disk_name)
+ except Exception:
+ msg = _('Error while attempting cleanup of failed '
+ 'deploy to logical volume.')
+ LOG.exception(msg)
return {'device_name': disk_name}