From a4af8ece8a162bf7497f2c8d3c7572dece689af0 Mon Sep 17 00:00:00 2001 From: edison Date: Wed, 8 Jan 2014 14:14:52 -0800 Subject: [PATCH] CLOUDSTACK-5370: delete snapshot on primary storage in case of backup snapshot failed. --- .../xen/resource/XenServerStorageProcessor.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java index caebe34b1d6..c1af6cad11e 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java @@ -1352,6 +1352,7 @@ public class XenServerStorageProcessor implements StorageProcessor { Long physicalSize = null; Map options = cmd.getOptions(); boolean fullbackup = Boolean.parseBoolean(options.get("fullSnapshot")); + boolean result = false; try { SR primaryStorageSR = hypervisorResource.getSRByNameLabelandHost(conn, primaryStorageNameLabel); if (primaryStorageSR == null) { @@ -1477,17 +1478,23 @@ public class XenServerStorageProcessor implements StorageProcessor { } else { newSnapshot.setParentSnapshotPath(prevBackupUuid); } + result = true; return new CopyCmdAnswer(newSnapshot); } catch (XenAPIException e) { details = "BackupSnapshot Failed due to " + e.toString(); s_logger.warn(details, e); - // remove last bad primary snapshot when exception happens - destroySnapshotOnPrimaryStorage(conn, snapshotUuid); } catch (Exception e) { details = "BackupSnapshot Failed due to " + e.getMessage(); s_logger.warn(details, e); - // remove last bad primary snapshot when exception happens - destroySnapshotOnPrimaryStorage(conn, snapshotUuid); + } finally { + if (!result) { + // remove last bad primary snapshot when exception happens + try { + destroySnapshotOnPrimaryStorage(conn, snapshotUuid); + } catch (Exception e) { + s_logger.debug("clean up snapshot failed", e); + } + } } return new CopyCmdAnswer(details);