From d1d855fef475816c68972debeea0fda0dc33734c Mon Sep 17 00:00:00 2001 From: edison Date: Mon, 13 Jan 2014 14:55:47 -0800 Subject: [PATCH] CLOUDSTACK-5857: for some reasons, delete secondary pool failed during copy template from secondary storage to primary storage, but the volume is already copied to primary storage, we didn't clean up the volume on primary storage, then all the following copy the same template to primary storage failed, as we are always using the same uuid when creating a new volume, libvirt complaining that the volume already exists. Current fix is ignoring "the delete secondary storage error". --- .../cloud/hypervisor/kvm/storage/KVMStorageProcessor.java | 8 ++++++-- .../hypervisor/kvm/storage/LibvirtStorageAdaptor.java | 2 +- .../cloud/hypervisor/kvm/storage/LibvirtStoragePool.java | 7 ++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java index a47b2ca251e..604bdae0511 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java @@ -242,8 +242,12 @@ public class KVMStorageProcessor implements StorageProcessor { } catch (CloudRuntimeException e) { return new CopyCmdAnswer(e.toString()); } finally { - if (secondaryPool != null) { - secondaryPool.delete(); + try { + if (secondaryPool != null) { + secondaryPool.delete(); + } + } catch(Exception e) { + s_logger.debug("Failed to clean up secondary storage", e); } } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java index c1a504323fa..a85a64fea79 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStorageAdaptor.java @@ -609,7 +609,7 @@ public class LibvirtStorageAdaptor implements StorageAdaptor { } s_logger.error("failed in umount retry"); } - throw new CloudRuntimeException(e.toString()); + throw new CloudRuntimeException(e.toString(), e); } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java index 54edffc9289..936ccf771ba 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java @@ -249,7 +249,12 @@ public class LibvirtStoragePool implements KVMStoragePool { @Override public boolean delete() { - return this._storageAdaptor.deleteStoragePool(this); + try { + return this._storageAdaptor.deleteStoragePool(this); + } catch (Exception e) { + s_logger.debug("Failed to delete storage pool", e); + } + return false; } @Override