Skip to content

Commit 3c5fdea

Browse files
authored
[Veeam] restored VMs without NICs (#6282)
1 parent 3b054b2 commit 3c5fdea

4 files changed

Lines changed: 36 additions & 3 deletions

File tree

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

Lines changed: 12 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;
@@ -399,6 +402,15 @@ public void setNsxLogicalSwitchPortUuid(String nsxLogicalSwitchPortUuid) {
399402
}
400403

401404
@Override
405+
public int hashCode() {
406+
return new HashCodeBuilder(17, 31).append(id).toHashCode();
407+
}
408+
409+
@Override
410+
public boolean equals(Object obj) {
411+
return EqualsBuilder.reflectionEquals(this, obj);
412+
}
413+
402414
public Integer getMtu() {
403415
return mtu;
404416
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ public interface NicDao extends GenericDao<NicVO, Long> {
8989

9090
NicVO findByInstanceIdAndMacAddress(long instanceId, String macAddress);
9191

92+
NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, String mac);
93+
9294
List<NicVO> findNicsByIpv6GatewayIpv6CidrAndReserver(String ipv6Gateway, String ipv6Cidr, String reserverName);
9395

9496
NicVO findByIpAddressAndVmType(String ip, VirtualMachine.Type vmType);

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,14 @@ public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) {
217217
return findOneBy(sc);
218218
}
219219

220+
@Override
221+
public NicVO findByNetworkIdAndMacAddressIncludingRemoved(long networkId, String mac) {
222+
SearchCriteria<NicVO> sc = AllFieldsSearch.create();
223+
sc.setParameters("network", networkId);
224+
sc.setParameters("macAddress", mac);
225+
return findOneIncludingRemovedBy(sc);
226+
}
227+
220228
@Override
221229
public NicVO findDefaultNicForVM(long instanceId) {
222230
SearchCriteria<NicVO> sc = AllFieldsSearch.create();

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -781,8 +781,7 @@ private void syncVMVolumes(VMInstanceVO vmInstanceVO, List<VirtualDisk> virtualD
781781
volume = createVolume(disk, vmToImport, domainId, zoneId, accountId, instanceId, poolId, templateId, backup, true);
782782
operation = "created";
783783
}
784-
s_logger.debug(String.format("VM [id: %s, instanceName: %s] backup restore operation %s volume [id: %s].", instanceId, vmInstanceVO.getInstanceName(),
785-
operation, volume.getUuid()));
784+
s_logger.debug(String.format("Sync volumes to %s in backup restore operation: %s volume [id: %s].", vmInstanceVO, operation, volume.getUuid()));
786785
}
787786
}
788787

@@ -879,9 +878,13 @@ private NetworkVO getGuestNetworkFromNetworkMorName(String name, long accountId,
879878
String tag = parts[parts.length - 1];
880879
String[] tagSplit = tag.split("-");
881880
tag = tagSplit[tagSplit.length - 1];
881+
882+
s_logger.debug(String.format("Trying to find network with vlan: [%s].", vlan));
882883
NetworkVO networkVO = networkDao.findByVlan(vlan);
883884
if (networkVO == null) {
884885
networkVO = createNetworkRecord(zoneId, tag, vlan, accountId, domainId);
886+
s_logger.debug(String.format("Created new network record [id: %s] with details [zoneId: %s, tag: %s, vlan: %s, accountId: %s and domainId: %s].",
887+
networkVO.getUuid(), zoneId, tag, vlan, accountId, domainId));
885888
}
886889
return networkVO;
887890
}
@@ -893,6 +896,7 @@ private Map<String, NetworkVO> getNetworksMapping(String[] vmNetworkNames, long
893896
Map<String, NetworkVO> mapping = new HashMap<>();
894897
for (String networkName : vmNetworkNames) {
895898
NetworkVO networkVO = getGuestNetworkFromNetworkMorName(networkName, accountId, zoneId, domainId);
899+
s_logger.debug(String.format("Mapping network name [%s] to networkVO [id: %s].", networkName, networkVO.getUuid()));
896900
mapping.put(networkName, networkVO);
897901
}
898902
return mapping;
@@ -927,12 +931,19 @@ private void syncVMNics(VirtualDevice[] nicDevices, DatacenterMO dcMo, Map<Strin
927931
String macAddress = pair.first();
928932
String networkName = pair.second();
929933
NetworkVO networkVO = networksMapping.get(networkName);
930-
NicVO nicVO = nicDao.findByNetworkIdAndMacAddress(networkVO.getId(), macAddress);
934+
NicVO nicVO = nicDao.findByNetworkIdAndMacAddressIncludingRemoved(networkVO.getId(), macAddress);
931935
if (nicVO != null) {
936+
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].",
937+
networkVO.getId(), macAddress, vm.getUuid(), vm.getInstanceName()));
932938
allNics.remove(nicVO);
939+
940+
if (nicVO.getRemoved() != null) {
941+
nicDao.unremove(nicVO.getId());
942+
}
933943
}
934944
}
935945
for (final NicVO unMappedNic : allNics) {
946+
s_logger.debug(String.format("Removing NIC [%s] from backup restored %s.", ReflectionToStringBuilderUtils.reflectOnlySelectedFields(unMappedNic, "uuid", "macAddress"), vm));
936947
vmManager.removeNicFromVm(vm, unMappedNic);
937948
}
938949
}

0 commit comments

Comments
 (0)