You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ro...@apache.org on 2021/09/02 19:09:02 UTC

[cloudstack] branch 4.15 updated: vmware: delete snapshot disk after backup to secondary storage (#5333)

This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.15 by this push:
     new 2297c73  vmware: delete snapshot disk after backup to secondary storage (#5333)
2297c73 is described below

commit 2297c73c92a46cc9eb544d79123487b21c8064d1
Author: Rohit Yadav <ro...@shapeblue.com>
AuthorDate: Fri Sep 3 00:38:44 2021 +0530

    vmware: delete snapshot disk after backup to secondary storage (#5333)
    
    * vmware: delete snapshot disk after backup to secondary storage
    
    WIP - This ensures that worker VM is destroyed along with any of its own
    disks that are backed up to secondary storage.
    
    Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
    
    * fix
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
    
    * fix for volume backup and confuding vm var name
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
    
    * change
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
    
    * tag as worker vm
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
    
    Co-authored-by: Abhishek Kumar <ab...@gmail.com>
---
 .../storage/resource/VmwareStorageProcessor.java    | 21 ++++++++++++---------
 .../hypervisor/vmware/mo/VirtualMachineMO.java      | 13 +++++++------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
index 6536bb7..db24603 100644
--- a/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -1264,7 +1264,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
 
         } finally {
             if (clonedVm != null) {
-                clonedVm.detachAllDisksAndDestroy();
+                s_logger.debug(String.format("Destroying cloned VM: %s with its disks", clonedVm.getName()));
+                clonedVm.destroy();
             }
         }
     }
@@ -1832,7 +1833,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
             return new Pair<>(diskDevice, disks);
         } finally {
             if (clonedVm != null) {
-                clonedVm.detachAllDisksAndDestroy();
+                s_logger.debug(String.format("Destroying cloned VM: %s with its disks", clonedVm.getName()));
+                clonedVm.destroy();
             }
         }
     }
@@ -3738,23 +3740,24 @@ public class VmwareStorageProcessor implements StorageProcessor {
             throw new Exception(msg);
         }
 
-        VirtualMachineMO clonedVm = null;
+        VirtualMachineMO workerVm = null;
         try {
             hyperHost.importVmFromOVF(srcOVFFileName, newVolumeName, primaryDsMo, "thin", null);
-            clonedVm = hyperHost.findVmOnHyperHost(newVolumeName);
-            if (clonedVm == null) {
+            workerVm = hyperHost.findVmOnHyperHost(newVolumeName);
+            if (workerVm == null) {
                 throw new Exception("Unable to create container VM for volume creation");
             }
+            workerVm.tagAsWorkerVM();
 
             if(!primaryDsMo.getDatastoreType().equalsIgnoreCase("VVOL")) {
                 HypervisorHostHelper.createBaseFolderInDatastore(primaryDsMo, primaryDsMo.getDataCenterMor());
-                clonedVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false);
+                workerVm.moveAllVmDiskFiles(primaryDsMo, HypervisorHostHelper.VSPHERE_DATASTORE_BASE_FOLDER, false);
             }
-            clonedVm.detachAllDisks();
+            workerVm.detachAllDisks();
             return _storage.getSize(srcOVFFileName);
         } finally {
-            if (clonedVm != null) {
-                clonedVm.detachAllDisksAndDestroy();
+            if (workerVm != null) {
+                workerVm.detachAllDisksAndDestroy();
             }
         }
     }
diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
index 30396f6..be999b4 100644
--- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
+++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
@@ -36,12 +36,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.vmware.vim25.InvalidStateFaultMsg;
-import com.vmware.vim25.RuntimeFaultFaultMsg;
-import com.vmware.vim25.TaskInfo;
-import com.vmware.vim25.TaskInfoState;
-import com.vmware.vim25.VirtualMachineTicket;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -53,6 +47,7 @@ import com.cloud.utils.ActionDelegate;
 import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.concurrency.NamedThreadFactory;
+import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.utils.script.Script;
 import com.google.gson.Gson;
 import com.vmware.vim25.ArrayOfManagedObjectReference;
@@ -66,6 +61,7 @@ import com.vmware.vim25.GuestOsDescriptor;
 import com.vmware.vim25.HttpNfcLeaseDeviceUrl;
 import com.vmware.vim25.HttpNfcLeaseInfo;
 import com.vmware.vim25.HttpNfcLeaseState;
+import com.vmware.vim25.InvalidStateFaultMsg;
 import com.vmware.vim25.ManagedObjectReference;
 import com.vmware.vim25.ObjectContent;
 import com.vmware.vim25.ObjectSpec;
@@ -76,6 +72,9 @@ import com.vmware.vim25.OvfFile;
 import com.vmware.vim25.ParaVirtualSCSIController;
 import com.vmware.vim25.PropertyFilterSpec;
 import com.vmware.vim25.PropertySpec;
+import com.vmware.vim25.RuntimeFaultFaultMsg;
+import com.vmware.vim25.TaskInfo;
+import com.vmware.vim25.TaskInfoState;
 import com.vmware.vim25.TraversalSpec;
 import com.vmware.vim25.VirtualBusLogicController;
 import com.vmware.vim25.VirtualCdrom;
@@ -120,6 +119,7 @@ import com.vmware.vim25.VirtualMachineRelocateSpecDiskLocator;
 import com.vmware.vim25.VirtualMachineRuntimeInfo;
 import com.vmware.vim25.VirtualMachineSnapshotInfo;
 import com.vmware.vim25.VirtualMachineSnapshotTree;
+import com.vmware.vim25.VirtualMachineTicket;
 import com.vmware.vim25.VirtualSCSIController;
 import com.vmware.vim25.VirtualSCSISharing;
 
@@ -771,6 +771,7 @@ public class VirtualMachineMO extends BaseMO {
         boolean result = _context.getVimClient().waitForTask(morTask);
         if (result) {
             _context.waitForTaskProgressDone(morTask);
+            s_logger.debug(String.format("Cloned VM: %s as %s", getName(), cloneName));
             return true;
         } else {
             s_logger.error("VMware cloneVM_Task failed due to " + TaskMO.getTaskFailureInfo(_context, morTask));