From d4ed20b0d34d8d294d8a9a7458bb68baa93283b7 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Tue, 9 Jul 2013 17:17:31 +0530 Subject: [PATCH] CLOUDSTACK-2429: Multiple private gateways are allowed within a VPC. Check for conflicting routes in all gateways when adding a new static route --- .../src/com/cloud/network/vpc/dao/StaticRouteDao.java | 2 +- .../src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java | 6 +++--- server/src/com/cloud/network/vpc/VpcManagerImpl.java | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java b/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java index a8fbc0990a8..041e8b89b99 100644 --- a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java +++ b/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDao.java @@ -26,7 +26,7 @@ public interface StaticRouteDao extends GenericDao{ boolean setStateToAdd(StaticRouteVO rule); - List listByGatewayIdAndNotRevoked(long gatewayId); + List listByVpcIdAndNotRevoked(long vpcId); List listByVpcId(long vpcId); diff --git a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java b/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java index fac35a91a53..518237d96b3 100644 --- a/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java +++ b/engine/schema/src/com/cloud/network/vpc/dao/StaticRouteDaoImpl.java @@ -58,7 +58,7 @@ public class StaticRouteDaoImpl extends GenericDaoBase impl AllFieldsSearch.done(); NotRevokedSearch = createSearchBuilder(); - NotRevokedSearch.and("gatewayId", NotRevokedSearch.entity().getVpcGatewayId(), Op.EQ); + NotRevokedSearch.and("vpcId", NotRevokedSearch.entity().getVpcId(), Op.EQ); NotRevokedSearch.and("state", NotRevokedSearch.entity().getState(), Op.NEQ); NotRevokedSearch.done(); @@ -82,9 +82,9 @@ public class StaticRouteDaoImpl extends GenericDaoBase impl @Override - public List listByGatewayIdAndNotRevoked(long gatewayId) { + public List listByVpcIdAndNotRevoked(long vpcId) { SearchCriteria sc = NotRevokedSearch.create(); - sc.setParameters("gatewayId", gatewayId); + sc.setParameters("vpcId", vpcId); sc.setParameters("state", StaticRoute.State.Revoke); return listBy(sc); } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index b2cb333fd96..2555ef61217 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -1858,7 +1858,9 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } protected void detectRoutesConflict(StaticRoute newRoute) throws NetworkRuleConflictException { - List routes = _staticRouteDao.listByGatewayIdAndNotRevoked(newRoute.getVpcGatewayId()); + //Multiple private gateways can exist within Vpc. Check for conflicts for all static routes in Vpc + //and not just the gateway + List routes = _staticRouteDao.listByVpcIdAndNotRevoked(newRoute.getVpcId()); assert (routes.size() >= 1) : "For static routes, we now always first persist the route and then check for " + "network conflicts so we should at least have one rule at this point.";