From 076ce8bf39545dad842551aa409ccfeab3c1d032 Mon Sep 17 00:00:00 2001 From: SadiJr Date: Mon, 18 Apr 2022 14:50:49 -0300 Subject: [PATCH 1/5] Fix bug where VMs restored from backups don't have NICs --- engine/schema/src/main/java/com/cloud/vm/NicVO.java | 13 +++++++++++++ .../src/main/java/com/cloud/vm/dao/NicDaoImpl.java | 2 +- .../java/com/cloud/hypervisor/guru/VMwareGuru.java | 11 ++++++++++- 3 files changed, 24 insertions(+), 2 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 2a7c6962cbd4..cd6f19e0ddec 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.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; @@ -394,4 +397,14 @@ public String getNsxLogicalSwitchPortUuid() { public void setNsxLogicalSwitchPortUuid(String nsxLogicalSwitchPortUuid) { this.nsxLogicalSwitchPortUuid = nsxLogicalSwitchPortUuid; } + + @Override + public int hashCode() { + return new HashCodeBuilder(17, 31).append(id).toHashCode(); + } + + @Override + public boolean equals(Object obj) { + return EqualsBuilder.reflectionEquals(this, obj); + } } 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 18630e85c574..8101565cfb4b 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 @@ -212,7 +212,7 @@ public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("network", networkId); sc.setParameters("macAddress", mac); - return findOneBy(sc); + return findOneIncludingRemovedBy(sc); } @Override 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 a5e4140357ba..1780ee1a3aa0 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 @@ -768,7 +768,7 @@ private void syncVMVolumes(VMInstanceVO vmInstanceVO, List virtualD 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(), + s_logger.debug(String.format("Sync volumes to VM [id: %s, instanceName: %s] in backup restore operation: %s volume [id: %s].", instanceId, vmInstanceVO.getInstanceName(), operation, volume.getUuid())); } } @@ -849,9 +849,13 @@ private NetworkVO getGuestNetworkFromNetworkMorName(String name, long accountId, 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; } @@ -863,6 +867,7 @@ private Map getNetworksMapping(String[] vmNetworkNames, long Map 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; @@ -899,10 +904,14 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map Date: Fri, 22 Apr 2022 11:32:34 -0300 Subject: [PATCH 2/5] Address reviews --- engine/schema/src/main/java/com/cloud/vm/dao/NicDao.java | 2 ++ .../schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java | 8 ++++++++ .../main/java/com/cloud/hypervisor/guru/VMwareGuru.java | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) 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 f06fb0fea836..f98433323eb3 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 @@ -88,4 +88,6 @@ public interface NicDao extends GenericDao { List listByVmIdAndKeyword(long instanceId, String keyword); NicVO findByInstanceIdAndMacAddress(long instanceId, String macAddress); + + NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, String mac); } 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 8101565cfb4b..32e491a9a1db 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 @@ -209,6 +209,14 @@ public NicVO findByIp4AddressAndNetworkId(String ip4Address, long networkId) { @Override public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("network", networkId); + sc.setParameters("macAddress", mac); + return findOneBy(sc); + } + + @Override + public NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, String mac) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("network", networkId); sc.setParameters("macAddress", mac); 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 1780ee1a3aa0..a6a4d234fb2b 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 @@ -902,7 +902,7 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map Date: Wed, 4 May 2022 09:59:06 -0300 Subject: [PATCH 3/5] Mark removed NIC as non removed in restore process --- .../src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 a6a4d234fb2b..2bab0ad99751 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 @@ -904,9 +904,13 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map Date: Wed, 11 May 2022 16:47:43 -0300 Subject: [PATCH 4/5] Address reviews --- .../src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 2bab0ad99751..c6c98f22c4ce 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 @@ -768,8 +768,7 @@ private void syncVMVolumes(VMInstanceVO vmInstanceVO, List virtualD volume = createVolume(disk, vmToImport, domainId, zoneId, accountId, instanceId, poolId, templateId, backup, true); operation = "created"; } - s_logger.debug(String.format("Sync volumes to VM [id: %s, instanceName: %s] in 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())); } } @@ -914,8 +913,7 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map Date: Tue, 2 Aug 2022 18:05:23 -0300 Subject: [PATCH 5/5] Fix compile errors --- .../src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 3c8d2e1c6407..49e18a2dad74 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 @@ -857,7 +857,7 @@ private NetworkVO getGuestNetworkFromNetworkMorName(String name, long accountId, tag = tagSplit[tagSplit.length - 1]; s_logger.debug(String.format("Trying to find network with vlan: [%s].", vlan)); - NetworkVO networkVO = _networkDao.findByVlan(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].", @@ -908,14 +908,14 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map