Skip to content

Commit 076ce8b

Browse files
author
SadiJr
committed
Fix bug where VMs restored from backups don't have NICs
1 parent 7012200 commit 076ce8b

3 files changed

Lines changed: 24 additions & 2 deletions

File tree

engine/schema/src/main/java/com/cloud/vm/NicVO.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
import javax.persistence.Table;
3131
import javax.persistence.Transient;
3232

33+
import org.apache.commons.lang3.builder.EqualsBuilder;
34+
import org.apache.commons.lang3.builder.HashCodeBuilder;
35+
3336
import com.cloud.network.Networks.AddressFormat;
3437
import com.cloud.network.Networks.Mode;
3538
import com.cloud.utils.db.GenericDao;
@@ -394,4 +397,14 @@ public String getNsxLogicalSwitchPortUuid() {
394397
public void setNsxLogicalSwitchPortUuid(String nsxLogicalSwitchPortUuid) {
395398
this.nsxLogicalSwitchPortUuid = nsxLogicalSwitchPortUuid;
396399
}
400+
401+
@Override
402+
public int hashCode() {
403+
return new HashCodeBuilder(17, 31).append(id).toHashCode();
404+
}
405+
406+
@Override
407+
public boolean equals(Object obj) {
408+
return EqualsBuilder.reflectionEquals(this, obj);
409+
}
397410
}

engine/schema/src/main/java/com/cloud/vm/dao/NicDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) {
212212
SearchCriteria<NicVO> sc = AllFieldsSearch.create();
213213
sc.setParameters("network", networkId);
214214
sc.setParameters("macAddress", mac);
215-
return findOneBy(sc);
215+
return findOneIncludingRemovedBy(sc);
216216
}
217217

218218
@Override

plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ private void syncVMVolumes(VMInstanceVO vmInstanceVO, List<VirtualDisk> virtualD
768768
volume = createVolume(disk, vmToImport, domainId, zoneId, accountId, instanceId, poolId, templateId, backup, true);
769769
operation = "created";
770770
}
771-
s_logger.debug(String.format("VM [id: %s, instanceName: %s] backup restore operation %s volume [id: %s].", instanceId, vmInstanceVO.getInstanceName(),
771+
s_logger.debug(String.format("Sync volumes to VM [id: %s, instanceName: %s] in backup restore operation: %s volume [id: %s].", instanceId, vmInstanceVO.getInstanceName(),
772772
operation, volume.getUuid()));
773773
}
774774
}
@@ -849,9 +849,13 @@ private NetworkVO getGuestNetworkFromNetworkMorName(String name, long accountId,
849849
String tag = parts[parts.length - 1];
850850
String[] tagSplit = tag.split("-");
851851
tag = tagSplit[tagSplit.length - 1];
852+
853+
s_logger.debug(String.format("Trying to find network with vlan: [%s].", vlan));
852854
NetworkVO networkVO = _networkDao.findByVlan(vlan);
853855
if (networkVO == null) {
854856
networkVO = createNetworkRecord(zoneId, tag, vlan, accountId, domainId);
857+
s_logger.debug(String.format("Created new network record [id: %s] with details [zoneId: %s, tag: %s, vlan: %s, accountId: %s and domainId: %s].",
858+
networkVO.getUuid(), zoneId, tag, vlan, accountId, domainId));
855859
}
856860
return networkVO;
857861
}
@@ -863,6 +867,7 @@ private Map<String, NetworkVO> getNetworksMapping(String[] vmNetworkNames, long
863867
Map<String, NetworkVO> mapping = new HashMap<>();
864868
for (String networkName : vmNetworkNames) {
865869
NetworkVO networkVO = getGuestNetworkFromNetworkMorName(networkName, accountId, zoneId, domainId);
870+
s_logger.debug(String.format("Mapping network name [%s] to networkVO [id: %s].", networkName, networkVO.getUuid()));
866871
mapping.put(networkName, networkVO);
867872
}
868873
return mapping;
@@ -899,10 +904,14 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map<Strin
899904
NetworkVO networkVO = networksMapping.get(networkName);
900905
NicVO nicVO = _nicDao.findByNetworkIdAndMacAddress(networkVO.getId(), macAddress);
901906
if (nicVO != null) {
907+
s_logger.warn(String.format("Can't find NIC in DB with networkId [%s] and MAC Address [%s], so this NIC will be removed from VM [id: %s, name: %s].",
908+
networkVO.getId(), macAddress, vm.getUuid(), vm.getInstanceName()));
902909
allNics.remove(nicVO);
903910
}
904911
}
905912
for (final NicVO unMappedNic : allNics) {
913+
s_logger.debug(String.format("Removing NIC [id: %s, MAC: %s] from backup restored VM [id: %s, name: %s].",
914+
unMappedNic.getUuid(), unMappedNic.getMacAddress(), vm.getUuid(), vm.getInstanceName()));
906915
vmManager.removeNicFromVm(vm, unMappedNic);
907916
}
908917
}

0 commit comments

Comments
 (0)