You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/10 03:28:49 UTC

[1/6] git commit: VPC: CS-15505 - allocate guest nics when new VR starts in VPC

Updated Branches:
  refs/heads/vpc 8404dba5e -> c2134b431


VPC: CS-15505 - allocate guest nics when new VR starts in VPC


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/c2134b43
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/c2134b43
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/c2134b43

Branch: refs/heads/vpc
Commit: c2134b431f31ebb2b743d14d833cfd19d7bc2902
Parents: 525ba47
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Mon Jul 9 18:07:23 2012 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Mon Jul 9 18:30:58 2012 -0700

----------------------------------------------------------------------
 .../router/VirtualNetworkApplianceManagerImpl.java |    9 +--
 .../VpcVirtualNetworkApplianceManagerImpl.java     |   52 ++++++++------
 server/src/com/cloud/network/vpc/VpcManager.java   |    7 --
 server/src/com/cloud/vm/dao/DomainRouterDao.java   |   12 +---
 .../src/com/cloud/vm/dao/DomainRouterDaoImpl.java  |   53 +++++++--------
 5 files changed, 61 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2134b43/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index efbf241..ec74333 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1285,11 +1285,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
                         new Pair<Boolean, PublicIp>(publicNetwork, sourceNatIp));
                 DomainRouterVO router = deployRouter(owner, dest, plan, params, isRedundant, vrProvider, offeringId,
                         null, networks);
-                //add router to router network map
-                if (!_routerDao.isRouterPartOfGuestNetwork(router.getId(), network.getId())) {
-                    DomainRouterVO routerVO = _routerDao.findById(router.getId());
-                    _routerDao.addRouterToGuestNetwork(routerVO, network);
-                }
+                
+                _routerDao.addRouterToGuestNetwork(router, network);
+                
                 routers.add(router);
             }
         } finally {
@@ -1443,6 +1441,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
             } else {
                 gatewayNic.setDefaultNic(true);
             }
+            
             networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) guestNetwork, gatewayNic));
             hasGuestNetwork = true;
         }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2134b43/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 2e7bd25..6b645e3 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -18,7 +18,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import javax.ejb.Local;
 
@@ -221,11 +220,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         //Add router to the Guest network
         boolean result = true;
         try {
-            if (!_routerDao.isRouterPartOfGuestNetwork(router.getId(), network.getId())) {
-                DomainRouterVO routerVO = _routerDao.findById(router.getId());
-                _routerDao.addRouterToGuestNetwork(routerVO, network);
-            } 
-            
+            _routerDao.addRouterToGuestNetwork(router, network);
+
             NicProfile guestNic = _itMgr.addVmToNetwork(router, network, null);
             //setup guest network
             if (guestNic != null) {
@@ -275,11 +271,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         
         if (result) {
             if (result) {
-                //check if router is already part of network
-                if (_routerDao.isRouterPartOfGuestNetwork(router.getId(), network.getId())) {
-                    s_logger.debug("Removing router " + router + " from network" + network);
-                    _routerDao.removeRouterFromNetwork(router.getId(), network.getId());
-                }
+                _routerDao.removeRouterFromGuestNetwork(router.getId(), network.getId());
             }
         }
         return result;
@@ -795,10 +787,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
             }
         }
         
-       
-        
-        
-        //4) PREPARE PLUG NIC COMMANDS
+        //3) PREPARE PLUG NIC COMMANDS
         try {
             //add VPC router to public networks
             List<PublicIp> sourceNat = new ArrayList<PublicIp>(1);
@@ -860,7 +849,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
             return false;
         }
         
-        //5) RE-APPLY ALL STATIC ROUTE RULES
+        //4) RE-APPLY ALL STATIC ROUTE RULES
         List<? extends StaticRoute> routes = _staticRouteDao.listByVpcId(router.getVpcId());
         List<StaticRouteProfile> staticRouteProfiles = new ArrayList<StaticRouteProfile>(routes.size());
         Map<Long, VpcGateway> gatewayMap = new HashMap<Long, VpcGateway>();
@@ -879,9 +868,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
             createStaticRouteCommands(staticRouteProfiles, router, cmds);
         }
         
-        //6) REISSUE VPN CONNECTION
+        //5) REISSUE VPN CONNECTION
         
-        //7) REPROGRAM GUEST NETWORK
+        //6) REPROGRAM GUEST NETWORK
         boolean reprogramGuestNtwks = true;
         if (profile.getParameter(Param.ReProgramGuestNetworks) != null 
                 && (Boolean) profile.getParameter(Param.ReProgramGuestNetworks) == false) {
@@ -931,7 +920,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         boolean result = true;
         try {
             Network network = _networkMgr.getNetwork(gateway.getNetworkId());
-            NicProfile requested = createPrivateNicProfile(gateway);
+            NicProfile requested = createPrivateNicProfileForGateway(gateway);
             
             NicProfile guestNic = _itMgr.addVmToNetwork(router, network, requested);
             
@@ -1177,19 +1166,26 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO, NicProfile>>(4);
         networks = super.createRouterNetworks(owner, isRedundant, plan, null, publicNetwork);
         
-        //allocate nic for private gateway if needed
+        //1) allocate nic for private gateway if needed
         VpcGateway privateGateway = _vpcMgr.getPrivateGatewayForVpc(vpcId);
         if (privateGateway != null) {
-            NicProfile privateNic = createPrivateNicProfile(privateGateway);
+            NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway);
             Network privateNetwork = _networkMgr.getNetwork(privateGateway.getNetworkId());
             networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) privateNetwork, privateNic));
         }
         
+        //2) allocate nic for guest gateway if needed
+        List<? extends Network> guestNetworks = _vpcMgr.getVpcNetworks(vpcId);
+        for (Network guestNetwork : guestNetworks) {
+            NicProfile guestNic = createGuestNicProfileForVpcRouter(guestNetwork);
+            networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) guestNetwork, guestNic));
+        }
+        
         return networks;
     }
 
     @DB
-    protected NicProfile createPrivateNicProfile(VpcGateway privateGateway) {
+    protected NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway) {
         Network network = _networkMgr.getNetwork(privateGateway.getNetworkId());
         PrivateIpVO ipVO = _privateIpDao.allocateIpAddress(network.getDataCenterId(), network.getId(), privateGateway.getIp4Address());
         
@@ -1210,4 +1206,16 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
         return privateNic;
     }
    
+    protected NicProfile createGuestNicProfileForVpcRouter(Network guestNetwork) {
+        NicProfile guestNic = new NicProfile();
+        guestNic.setIp4Address(guestNetwork.getGateway());
+        guestNic.setBroadcastUri(guestNetwork.getBroadcastUri());
+        guestNic.setBroadcastType(guestNetwork.getBroadcastDomainType());
+        guestNic.setIsolationUri(guestNetwork.getBroadcastUri());
+        guestNic.setMode(guestNetwork.getMode());
+        String gatewayCidr = guestNetwork.getCidr();
+        guestNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr));
+        
+        return guestNic;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2134b43/server/src/com/cloud/network/vpc/VpcManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java
index 7957858..cc6d5e3 100644
--- a/server/src/com/cloud/network/vpc/VpcManager.java
+++ b/server/src/com/cloud/network/vpc/VpcManager.java
@@ -94,13 +94,6 @@ public interface VpcManager extends VpcService{
      */
     List<DomainRouterVO> getVpcRouters(long vpcId);
 
-
-    /**
-     * @param zoneId
-     * @return
-     */
-    boolean vpcProviderEnabledInZone(long zoneId);
-
     /**
      * @param vpcId
      * @return

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2134b43/server/src/com/cloud/vm/dao/DomainRouterDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/DomainRouterDao.java b/server/src/com/cloud/vm/dao/DomainRouterDao.java
index ce6bacc..01e3258 100755
--- a/server/src/com/cloud/vm/dao/DomainRouterDao.java
+++ b/server/src/com/cloud/vm/dao/DomainRouterDao.java
@@ -19,6 +19,7 @@ package com.cloud.vm.dao;
 import java.util.List;
 
 import com.cloud.network.Network;
+import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.utils.db.GenericDao;
 import com.cloud.vm.DomainRouterVO;
@@ -120,19 +121,12 @@ public interface DomainRouterDao extends GenericDao<DomainRouterVO, Long> {
      * @param routerId
      * @param guestNetwork
      */
-    void addRouterToGuestNetwork(DomainRouterVO router, Network guestNetwork);
+    void addRouterToGuestNetwork(VirtualRouter router, Network guestNetwork);
 
     /**
      * @param routerId
      * @param guestNetworkId
      */
-    void removeRouterFromNetwork(long routerId, long guestNetworkId);
-
-    /**
-     * @param routerId
-     * @param guestNetworkId
-     * @return
-     */
-    boolean isRouterPartOfGuestNetwork(long routerId, long guestNetworkId);
+    void removeRouterFromGuestNetwork(long routerId, long guestNetworkId);
     
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/c2134b43/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
index 259dbf5..f4cdb31 100755
--- a/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
+++ b/server/src/com/cloud/vm/dao/DomainRouterDaoImpl.java
@@ -25,6 +25,7 @@ import com.cloud.host.dao.HostDaoImpl;
 import com.cloud.network.Network;
 import com.cloud.network.RouterNetworkDaoImpl;
 import com.cloud.network.RouterNetworkVO;
+import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.router.VirtualRouter.Role;
 import com.cloud.offering.NetworkOffering;
 import com.cloud.user.UserStatisticsVO;
@@ -269,12 +270,7 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im
         if (guestNetworks != null && !guestNetworks.isEmpty()) {
             // 2) add router to the network
             for (Network guestNetwork : guestNetworks) {
-                if (!isRouterPartOfGuestNetwork(router.getId(), guestNetwork.getId())) {
-                    //add only when network is not private network
-                    if (!(guestNetwork.getName() != NetworkOffering.SystemPrivateGatewayNetworkOffering)) {
-                        addRouterToGuestNetwork(router, guestNetwork);
-                    }
-                }
+                addRouterToGuestNetwork(router, guestNetwork);  
             }
         }
        
@@ -284,27 +280,32 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im
     
     @Override
     @DB
-    public void addRouterToGuestNetwork(DomainRouterVO router, Network guestNetwork) {
-        Transaction txn = Transaction.currentTxn();
-        txn.start();
-        //1) add router to network
-        RouterNetworkVO routerNtwkMap = new RouterNetworkVO(router.getId(), guestNetwork.getId(), guestNetwork.getGuestType());
-        _routerNetworkDao.persist(routerNtwkMap);
-        //2) create user stats entry for the network
-        UserStatisticsVO stats = _userStatsDao.findBy(router.getAccountId(), router.getDataCenterIdToDeployIn(), 
-                guestNetwork.getId(), null, router.getId(), router.getType().toString());
-        if (stats == null) {
-            stats = new UserStatisticsVO(router.getAccountId(), router.getDataCenterIdToDeployIn(), null, router.getId(),
-                    router.getType().toString(), guestNetwork.getId());
-            _userStatsDao.persist(stats);
-        }
-        txn.commit();
+    public void addRouterToGuestNetwork(VirtualRouter router, Network guestNetwork) {
+        if (_routerNetworkDao.findByRouterAndNetwork(router.getId(), guestNetwork.getId()) == null && 
+                guestNetwork.getName() != NetworkOffering.SystemPrivateGatewayNetworkOffering) {
+            Transaction txn = Transaction.currentTxn();
+            txn.start();
+            //1) add router to network
+            RouterNetworkVO routerNtwkMap = new RouterNetworkVO(router.getId(), guestNetwork.getId(), guestNetwork.getGuestType());
+            _routerNetworkDao.persist(routerNtwkMap);
+            //2) create user stats entry for the network
+            UserStatisticsVO stats = _userStatsDao.findBy(router.getAccountId(), router.getDataCenterIdToDeployIn(), 
+                    guestNetwork.getId(), null, router.getId(), router.getType().toString());
+            if (stats == null) {
+                stats = new UserStatisticsVO(router.getAccountId(), router.getDataCenterIdToDeployIn(), null, router.getId(),
+                        router.getType().toString(), guestNetwork.getId());
+                _userStatsDao.persist(stats);
+            }
+            txn.commit();
+        }  
     }
     
     @Override
-    public void removeRouterFromNetwork(long routerId, long guestNetworkId) {
+    public void removeRouterFromGuestNetwork(long routerId, long guestNetworkId) {
         RouterNetworkVO routerNtwkMap = _routerNetworkDao.findByRouterAndNetwork(routerId, guestNetworkId);
-        _routerNetworkDao.remove(routerNtwkMap.getId());
+        if (routerNtwkMap != null) {
+            _routerNetworkDao.remove(routerNtwkMap.getId());
+        }
     }
     
     @Override
@@ -319,11 +320,5 @@ public class DomainRouterDaoImpl extends GenericDaoBase<DomainRouterVO, Long> im
         sc.setParameters("role", Role.VIRTUAL_ROUTER);
         return listBy(sc);
     }
-    
-    @Override
-    public boolean isRouterPartOfGuestNetwork(long routerId, long guestNetworkId) {
-        RouterNetworkVO routerNtwkMap = _routerNetworkDao.findByRouterAndNetwork(routerId, guestNetworkId);
-        return routerNtwkMap != null;
-    }
 
 }