From 6ea7df2cbcdca6c9be0c44d2436e24549c499297 Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Tue, 21 May 2013 13:33:19 -0700 Subject: 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 --- nova/virt/powervm/blockdev.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'nova/virt') 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} -- cgit