diff options
| author | Matt Riedemann <mriedem@us.ibm.com> | 2013-05-21 13:33:19 -0700 |
|---|---|---|
| committer | Matt Riedemann <mriedem@us.ibm.com> | 2013-05-23 06:27:33 -0700 |
| commit | 6ea7df2cbcdca6c9be0c44d2436e24549c499297 (patch) | |
| tree | ed8c5a5f2e623d7fe032c9ea95c482c24ab129c2 /nova/virt | |
| parent | 047cd03ee124a5c059f79776b8b8b358410584e1 (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.py | 14 |
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} |
