CLOUDSTACK-5370: delete snapshot on primary storage in case of backup snapshot 
failed.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a4af8ece
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a4af8ece
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a4af8ece

Branch: refs/heads/4.4
Commit: a4af8ece8a162bf7497f2c8d3c7572dece689af0
Parents: 18f59f9
Author: edison <[email protected]>
Authored: Wed Jan 8 14:14:52 2014 -0800
Committer: Edison Su <[email protected]>
Committed: Thu Mar 27 17:38:38 2014 -0700

----------------------------------------------------------------------
 .../xen/resource/XenServerStorageProcessor.java      | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a4af8ece/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XenServerStorageProcessor.java
----------------------------------------------------------------------
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 caebe34..c1af6ca 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<String, String> 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);

Reply via email to