Updated Branches:
refs/heads/vpc 327b4833c -> d93c5d053
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/vpc
Commit: d93c5d053136d44a38dc8f1a04185e998bb86cc7
Parents: 327b483
Author: Alena Prokharchyk <[email protected]>
Authored: Fri Aug 10 16:04:18 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
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");