SadiJr commented on code in PR #7239:
URL: https://github.com/apache/cloudstack/pull/7239#discussion_r1423016788


##########
plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java:
##########
@@ -661,30 +660,29 @@ private Long getImportingVMTemplate(List<VirtualDisk> 
virtualDisks, DatacenterMO
      * If VM exists: update VM
      */
     private VMInstanceVO getVM(String vmInternalName, long templateId, long 
guestOsId, long serviceOfferingId, long zoneId, long accountId, long userId, 
long domainId) {
-        s_logger.debug(String.format("Trying to get VM with specs: 
[vmInternalName: %s, templateId: %s, guestOsId: %s, serviceOfferingId: %s].", 
vmInternalName,
-                templateId, guestOsId, serviceOfferingId));
-        VMInstanceVO vm = 
virtualMachineDao.findVMByInstanceNameIncludingRemoved(vmInternalName);
-        if (vm != null) {
-            s_logger.debug(String.format("Found an existing VM [id: %s, 
removed: %s] with internalName: [%s].", vm.getUuid(), vm.getRemoved() != null ? 
"yes" : "no", vmInternalName));
-            vm.setState(VirtualMachine.State.Stopped);
-            vm.setPowerState(VirtualMachine.PowerState.PowerOff);
-            virtualMachineDao.update(vm.getId(), vm);
-            if (vm.getRemoved() != null) {
-                virtualMachineDao.unremove(vm.getId());
-                UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, 
accountId, vm.getDataCenterId(), vm.getId(), vm.getHostName(), 
vm.getServiceOfferingId(), vm.getTemplateId(),
-                        vm.getHypervisorType().toString(), 
VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm());
-            }
-            return virtualMachineDao.findById(vm.getId());
-        } else {
+        s_logger.debug(String.format("Trying to get VM with specs: 
[vmInternalName: %s], and in states [%s, %s].", vmInternalName, 
VirtualMachine.State.Running, VirtualMachine.State.Stopped));
+        VMInstanceVO vm = 
virtualMachineDao.findVMInStatesAndWithInternalNameIncludingRemoved(vmInternalName,
 VirtualMachine.State.Running, VirtualMachine.State.Stopped);
+        if (vm == null) {
+            s_logger.debug(String.format("Cannot find any existing VM with 
internalName [%s] in any of these [%s, %s] states. Assuming VM is destroyed in 
ACS and recreated in restore process.",
+                    vmInternalName, VirtualMachine.State.Running, 
VirtualMachine.State.Stopped));
+
             long id = userVmDao.getNextInSequence(Long.class, "id");
             s_logger.debug(String.format("Can't find an existing VM with 
internalName: [%s]. Creating a new VM with: [id: %s, name: %s, templateId: %s, 
guestOsId: %s, serviceOfferingId: %s].",
                     vmInternalName, id, vmInternalName, templateId, guestOsId, 
serviceOfferingId));
 
             UserVmVO vmInstanceVO = new UserVmVO(id, vmInternalName, 
vmInternalName, templateId, HypervisorType.VMware, guestOsId, false, false, 
domainId, accountId, userId,
                     serviceOfferingId, null, null, null, vmInternalName);
             vmInstanceVO.setDataCenterId(zoneId);
-            return userVmDao.persist(vmInstanceVO);
+            vm = userVmDao.persist(vmInstanceVO);
+            UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VM_CREATE, 
accountId, vm.getDataCenterId(), vm.getId(), vm.getHostName(), 
vm.getServiceOfferingId(), vm.getTemplateId(),
+                    vm.getHypervisorType().toString(), 
VirtualMachine.class.getName(), vm.getUuid(), vm.isDisplayVm());
+        } else {
+            s_logger.debug(String.format("Found an existing VM [id: %s, 
removed: %s] with internalName [%s], and with state [%s].", vm.getUuid(), 
vm.getRemoved() != null ? "yes" : "no", vmInternalName, vm.getState()));

Review Comment:
   Yes, but remember, if the VM is not in state `Stopped` or `Destroyed`, the 
restore fails at the begin:
   
   
https://github.com/apache/cloudstack/blob/031b4c675c2bbf76568e9cfa6653d4abc851563e/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java#L591C27-L591C27
   
   Please tell me if I misunderstood your question.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to