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

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


The following commit(s) were added to refs/heads/main by this push:
     new 3c5fdeafdc0 [Veeam] restored VMs without NICs (#6282)
3c5fdeafdc0 is described below

commit 3c5fdeafdc05af7efea812ba5901545a5f356ef9
Author: SadiJr <[email protected]>
AuthorDate: Mon Jul 3 09:35:48 2023 -0300

    [Veeam] restored VMs without NICs (#6282)
---
 engine/schema/src/main/java/com/cloud/vm/NicVO.java     | 12 ++++++++++++
 .../schema/src/main/java/com/cloud/vm/dao/NicDao.java   |  2 ++
 .../src/main/java/com/cloud/vm/dao/NicDaoImpl.java      |  8 ++++++++
 .../main/java/com/cloud/hypervisor/guru/VMwareGuru.java | 17 ++++++++++++++---
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/engine/schema/src/main/java/com/cloud/vm/NicVO.java 
b/engine/schema/src/main/java/com/cloud/vm/NicVO.java
index 8905ebf732b..fba7c966c44 100644
--- a/engine/schema/src/main/java/com/cloud/vm/NicVO.java
+++ b/engine/schema/src/main/java/com/cloud/vm/NicVO.java
@@ -30,6 +30,9 @@ import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
 import com.cloud.network.Networks.AddressFormat;
 import com.cloud.network.Networks.Mode;
 import com.cloud.utils.db.GenericDao;
@@ -399,6 +402,15 @@ public class NicVO implements Nic {
     }
 
     @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 31).append(id).toHashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        return EqualsBuilder.reflectionEquals(this, obj);
+    }
+
     public Integer getMtu() {
         return mtu;
     }
diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java 
b/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java
index fc2da6124cf..3c9b3e235a8 100644
--- a/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java
@@ -89,6 +89,8 @@ public interface NicDao extends GenericDao<NicVO, Long> {
 
     NicVO findByInstanceIdAndMacAddress(long instanceId, String macAddress);
 
+    NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, String 
mac);
+
     List<NicVO> findNicsByIpv6GatewayIpv6CidrAndReserver(String ipv6Gateway, 
String ipv6Cidr, String reserverName);
 
     NicVO findByIpAddressAndVmType(String ip, VirtualMachine.Type vmType);
diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java 
b/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
index 3b669aa526b..228e71fb0bb 100644
--- a/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java
@@ -217,6 +217,14 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, 
Long> implements NicDao {
         return findOneBy(sc);
     }
 
+    @Override
+    public NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, 
String mac) {
+        SearchCriteria<NicVO> sc = AllFieldsSearch.create();
+        sc.setParameters("network", networkId);
+        sc.setParameters("macAddress", mac);
+        return findOneIncludingRemovedBy(sc);
+    }
+
     @Override
     public NicVO findDefaultNicForVM(long instanceId) {
         SearchCriteria<NicVO> sc = AllFieldsSearch.create();
diff --git 
a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
 
b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
index fe35d565088..8c49860c81a 100644
--- 
a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
+++ 
b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java
@@ -781,8 +781,7 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru, Co
                 volume = createVolume(disk, vmToImport, domainId, zoneId, 
accountId, instanceId, poolId, templateId, backup, true);
                 operation = "created";
             }
-            s_logger.debug(String.format("VM [id: %s, instanceName: %s] backup 
restore operation %s volume [id: %s].", instanceId, 
vmInstanceVO.getInstanceName(),
-                    operation, volume.getUuid()));
+            s_logger.debug(String.format("Sync volumes to %s in backup restore 
operation: %s volume [id: %s].", vmInstanceVO, operation, volume.getUuid()));
         }
     }
 
@@ -879,9 +878,13 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru, Co
         String tag = parts[parts.length - 1];
         String[] tagSplit = tag.split("-");
         tag = tagSplit[tagSplit.length - 1];
+
+        s_logger.debug(String.format("Trying to find network with vlan: 
[%s].", vlan));
         NetworkVO networkVO = networkDao.findByVlan(vlan);
         if (networkVO == null) {
             networkVO = createNetworkRecord(zoneId, tag, vlan, accountId, 
domainId);
+            s_logger.debug(String.format("Created new network record [id: %s] 
with details [zoneId: %s, tag: %s, vlan: %s, accountId: %s and domainId: %s].",
+                    networkVO.getUuid(), zoneId, tag, vlan, accountId, 
domainId));
         }
         return networkVO;
     }
@@ -893,6 +896,7 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru, Co
         Map<String, NetworkVO> mapping = new HashMap<>();
         for (String networkName : vmNetworkNames) {
             NetworkVO networkVO = 
getGuestNetworkFromNetworkMorName(networkName, accountId, zoneId, domainId);
+            s_logger.debug(String.format("Mapping network name [%s] to 
networkVO [id: %s].", networkName, networkVO.getUuid()));
             mapping.put(networkName, networkVO);
         }
         return mapping;
@@ -927,12 +931,19 @@ public class VMwareGuru extends HypervisorGuruBase 
implements HypervisorGuru, Co
             String macAddress = pair.first();
             String networkName = pair.second();
             NetworkVO networkVO = networksMapping.get(networkName);
-            NicVO nicVO = 
nicDao.findByNetworkIdAndMacAddress(networkVO.getId(), macAddress);
+            NicVO nicVO = 
nicDao.findByNetworkIdAndMacAddressIncludingRemoved(networkVO.getId(), 
macAddress);
             if (nicVO != null) {
+                s_logger.warn(String.format("Find NIC in DB with networkId 
[%s] and MAC Address [%s], so this NIC will be removed from list of unmapped 
NICs of VM [id: %s, name: %s].",
+                        networkVO.getId(), macAddress, vm.getUuid(), 
vm.getInstanceName()));
                 allNics.remove(nicVO);
+
+                if (nicVO.getRemoved() != null) {
+                    nicDao.unremove(nicVO.getId());
+                }
             }
         }
         for (final NicVO unMappedNic : allNics) {
+            s_logger.debug(String.format("Removing NIC [%s] from backup 
restored %s.", 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(unMappedNic, "uuid", 
"macAddress"), vm));
             vmManager.removeNicFromVm(vm, unMappedNic);
         }
     }

Reply via email to