From 3d6c64d262897d025652a08587ae1105c7239117 Mon Sep 17 00:00:00 2001 From: Saksham Srivastava Date: Mon, 28 Jul 2014 09:57:01 +0530 Subject: [PATCH] CLOUDSTACK-7206: Update vm_network_map table correctly --- .../orchestration/NetworkOrchestrator.java | 23 ++++++++++++++++++- .../entity/api/db/dao/VMNetworkMapDao.java | 2 ++ .../api/db/dao/VMNetworkMapDaoImpl.java | 16 +++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 64a1f3a4994..3b7e92a5c06 100755 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -38,10 +38,11 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.context.CallContext; +import org.apache.cloudstack.engine.cloud.entity.api.db.VMNetworkMapVO; +import org.apache.cloudstack.engine.cloud.entity.api.db.dao.VMNetworkMapDao; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.ConfigDepot; import org.apache.cloudstack.framework.config.ConfigKey; @@ -261,6 +262,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra protected IpAddressManager _ipAddrMgr; @Inject MessageBus _messageBus; + @Inject + VMNetworkMapDao _vmNetworkMapDao; List networkGurus; @@ -1517,6 +1520,18 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra } }); + // cleanup the entry in vm_network_map + if(vmProfile.getType().equals(VirtualMachine.Type.User)) { + NicVO nic = _nicDao.findById(nicId); + if(nic != null) { + NetworkVO vmNetwork = _networksDao.findById(nic.getNetworkId()); + VMNetworkMapVO vno = _vmNetworkMapDao.findByVmAndNetworkId(vmProfile.getVirtualMachine().getId(), vmNetwork.getId()); + if(vno != null) { + _vmNetworkMapDao.remove(vno.getId()); + } + } + } + if (networkToRelease != null) { Network network = networkToRelease.first(); NicProfile profile = networkToRelease.second(); @@ -1615,6 +1630,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra NetworkGuru guru = AdapterBase.getAdapterByName(networkGurus, network.getGuruName()); guru.deallocate(network, profile, vm); _nicDao.remove(nic.getId()); + s_logger.debug("Removed nic id=" + nic.getId()); //remove the secondary ip addresses corresponding to to this nic if (!removeVmSecondaryIpsOfNic(nic.getId())) { @@ -3056,6 +3072,11 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); } + //Update vm_network_map table + if(vmProfile.getType() == VirtualMachine.Type.User) { + VMNetworkMapVO vno = new VMNetworkMapVO(vm.getId(), network.getId()); + _vmNetworkMapDao.persist(vno); + } s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); } diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java index beab7e52b8a..5c54ac32aac 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java +++ b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDao.java @@ -28,4 +28,6 @@ public interface VMNetworkMapDao extends GenericDao { List getNetworks(long vmId); + VMNetworkMapVO findByVmAndNetworkId(long vmId, long networkId); + } diff --git a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java index 6b614728adc..5e683e147f7 100644 --- a/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java +++ b/engine/schema/src/org/apache/cloudstack/engine/cloud/entity/api/db/dao/VMNetworkMapDaoImpl.java @@ -38,6 +38,7 @@ import com.cloud.utils.db.TransactionLegacy; public class VMNetworkMapDaoImpl extends GenericDaoBase implements VMNetworkMapDao { protected SearchBuilder VmIdSearch; + protected SearchBuilder VmNetworkSearch; @Inject protected NetworkDao _networkDao; @@ -51,6 +52,11 @@ public class VMNetworkMapDaoImpl extends GenericDaoBase im VmIdSearch.and("vmId", VmIdSearch.entity().getVmId(), SearchCriteria.Op.EQ); VmIdSearch.done(); + VmNetworkSearch = createSearchBuilder(); + VmNetworkSearch.and("vmId", VmNetworkSearch.entity().getVmId(), SearchCriteria.Op.EQ); + VmNetworkSearch.and("networkId", VmNetworkSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); + VmNetworkSearch.done(); + } @Override @@ -85,4 +91,14 @@ public class VMNetworkMapDaoImpl extends GenericDaoBase im return networks; } + @Override + public VMNetworkMapVO findByVmAndNetworkId(long vmId, long networkId) { + + SearchCriteria sc = VmNetworkSearch.create(); + sc.setParameters("vmId", vmId); + sc.setParameters("networkId", networkId); + VMNetworkMapVO network = findOneBy(sc); + + return network; + } }