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/08/12 22:20:33 UTC

[7/50] [abbrv] git commit: VPC: CS-15950 - throw networkConflictException when try to create network rule for the ip address that is already in use for another service

VPC: CS-15950 - throw networkConflictException when try to create network rule for the ip address that is already in use for another service

Conflicts:

	server/src/com/cloud/network/NetworkManagerImpl.java
	server/src/com/cloud/network/rules/RulesManagerImpl.java


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

Branch: refs/heads/master
Commit: d93c5d053136d44a38dc8f1a04185e998bb86cc7
Parents: 327b483
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Fri Aug 10 16:04:18 2012 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Fri Aug 10 16:37:33 2012 -0700

----------------------------------------------------------------------
 .../src/com/cloud/network/NetworkManagerImpl.java  |   13 +++++++++----
 .../com/cloud/network/rules/RulesManagerImpl.java  |    2 --
 2 files changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d93c5d05/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index d1c3191..d382e92 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -846,7 +846,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
         return true;
     }
 
-    public boolean canIpUsedForService(PublicIp publicIp, Service service) {
+    public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) {
         List<PublicIp> ipList = new ArrayList<PublicIp>();
         ipList.add(publicIp);
         Map<PublicIp, Set<Service>> ipToServices = getIpToServices(ipList, false, true);
@@ -854,9 +854,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
         if (services == null || services.isEmpty()) {
             return true;
         }
+        
+        if (networkId == null) {
+            networkId = publicIp.getAssociatedWithNetworkId();
+        }
+        
         // We only support one provider for one service now
-        Map<Service, Set<Provider>> serviceToProviders = getServiceProvidersMap(publicIp.getAssociatedWithNetworkId());
-        Set<Provider> oldProviders = serviceToProviders.get((Service) services.toArray()[0]);
+        Map<Service, Set<Provider>> serviceToProviders = getServiceProvidersMap(networkId);
+        Set<Provider> oldProviders = serviceToProviders.get(services.toArray()[0]);
         Provider oldProvider = (Provider) oldProviders.toArray()[0];
         // Since IP already has service to bind with, the oldProvider can't be null
         Set<Provider> newProviders = serviceToProviders.get(service);
@@ -6890,7 +6895,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
             return true;
         }
         PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress()));
-        if (!canIpUsedForService(publicIp, service)) {
+        if (!canIpUsedForService(publicIp, service, networkId)) {
             return false;
         }
         if (!offering.isConserveMode()) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d93c5d05/server/src/com/cloud/network/rules/RulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java
index 479e349..73cc6bb 100755
--- a/server/src/com/cloud/network/rules/RulesManagerImpl.java
+++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java
@@ -190,8 +190,6 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager {
             boolean assignToVpcNtwk =  network.getVpcId() != null 
                     && ipAddress.getVpcId() != null && ipAddress.getVpcId().longValue() == network.getVpcId();
             if (assignToVpcNtwk) {
-                //set networkId just for verification purposes
-                ipAddress.setAssociatedWithNetworkId(networkId);
                 _networkMgr.checkIpForService(ipAddress, Service.PortForwarding, networkId);
 
                 s_logger.debug("The ip is not associated with the VPC network id="+ networkId + ", so assigning");