From 8dda69952f93b6fcdaf45f0d3cb82b074f1c320a 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 6d1705ca48d..cd576435fe9 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 @@ -237,8 +237,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 7e3c9e0f4ae..012c8a5e25c 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 @@ -617,7 +617,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 32aa6030167..7eed47497ee 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 @@ -252,7 +252,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