CLOUDSTACK-2441: Fix deleting private gateways while deleting vpc in case multiple private gateways
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c94c71b4 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c94c71b4 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c94c71b4 Branch: refs/heads/planner_reserve Commit: c94c71b4ce25bc12a2505547a8fdd79fa574fae3 Parents: 7d38042 Author: Jayapal <[email protected]> Authored: Tue May 14 16:10:38 2013 +0530 Committer: Kishan Kavala <[email protected]> Committed: Tue May 14 16:10:38 2013 +0530 ---------------------------------------------------------------------- .../com/cloud/network/vpc/dao/VpcGatewayDao.java | 5 ++ .../cloud/network/vpc/dao/VpcGatewayDaoImpl.java | 9 ++++ server/src/com/cloud/network/vpc/VpcManager.java | 2 + .../src/com/cloud/network/vpc/VpcManagerImpl.java | 37 +++++++++++---- server/test/com/cloud/vpc/MockVpcManagerImpl.java | 5 ++ 5 files changed, 49 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c94c71b4/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java b/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java index 8cb5c59..24d9deb 100644 --- a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java +++ b/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDao.java @@ -16,13 +16,18 @@ // under the License. package com.cloud.network.vpc.dao; +import com.cloud.network.vpc.VpcGateway; import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.utils.db.GenericDao; +import java.util.List; + public interface VpcGatewayDao extends GenericDao<VpcGatewayVO, Long>{ VpcGatewayVO getPrivateGatewayForVpc(long vpcId); VpcGatewayVO getVpnGatewayForVpc(long vpcId); Long getNetworkAclIdForPrivateIp(long vpcId, long networkId, String ipaddr); + + List<VpcGatewayVO> listByVpcIdAndType(long vpcId, VpcGateway.Type type); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c94c71b4/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java b/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java index b4d403e..6a2f8bd 100644 --- a/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java +++ b/engine/schema/src/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java @@ -27,6 +27,8 @@ import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import java.util.List; + @Component @Local(value = VpcGatewayDao.class) @DB(txn = false) @@ -76,5 +78,12 @@ public class VpcGatewayDaoImpl extends GenericDaoBase<VpcGatewayVO, Long> implem } } + @Override + public List<VpcGatewayVO> listByVpcIdAndType(long vpcId, VpcGateway.Type type) { + SearchCriteria<VpcGatewayVO> sc = AllFieldsSearch.create(); + sc.setParameters("vpcId", vpcId); + sc.setParameters("type", type); + return listBy(sc); + } } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c94c71b4/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 f3b4bbc..e8db8d3 100644 --- a/server/src/com/cloud/network/vpc/VpcManager.java +++ b/server/src/com/cloud/network/vpc/VpcManager.java @@ -165,4 +165,6 @@ public interface VpcManager extends VpcService{ * @param networkOwner TODO */ void validateNtwkOffForNtwkInVpc(Long networkId, long newNtwkOffId, String newCidr, String newNetworkDomain, Vpc vpc, String gateway, Account networkOwner); + + List<PrivateGateway> getVpcPrivateGateways(long id); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c94c71b4/server/src/com/cloud/network/vpc/VpcManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index fb3d41e..f01d81b 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -1236,14 +1236,18 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } //4) Delete private gateway - PrivateGateway gateway = getVpcPrivateGateway(vpcId); - if (gateway != null) { - s_logger.debug("Deleting private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); - if (!deleteVpcPrivateGateway(gateway.getId())) { - success = false; - s_logger.debug("Failed to delete private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); - } else { - s_logger.debug("Deleted private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); + List<PrivateGateway> gateways = getVpcPrivateGateways(vpcId); + if (gateways != null) { + for (PrivateGateway gateway: gateways) { + if (gateway != null) { + s_logger.debug("Deleting private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); + if (!deleteVpcPrivateGateway(gateway.getId())) { + success = false; + s_logger.debug("Failed to delete private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); + } else { + s_logger.debug("Deleted private gateway " + gateway + " as a part of vpc " + vpcId + " resources cleanup"); + } + } } } @@ -1293,7 +1297,22 @@ public class VpcManagerImpl extends ManagerBase implements VpcManager, VpcProvis } } - + + @Override + public List<PrivateGateway> getVpcPrivateGateways(long id) { + List<VpcGatewayVO> gateways = _vpcGatewayDao.listByVpcIdAndType(id, VpcGateway.Type.Private); + + if (gateways != null) { + List<PrivateGateway> pvtGateway = new ArrayList(); + for (VpcGatewayVO gateway: gateways) { + pvtGateway.add(getPrivateGatewayProfile(gateway)); + } + return pvtGateway; + } else { + return null; + } + } + @Override public PrivateGateway getVpcPrivateGateway(long id) { VpcGateway gateway = _vpcGatewayDao.findById(id); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c94c71b4/server/test/com/cloud/vpc/MockVpcManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 1e2cd5f..9812750 100644 --- a/server/test/com/cloud/vpc/MockVpcManagerImpl.java +++ b/server/test/com/cloud/vpc/MockVpcManagerImpl.java @@ -378,4 +378,9 @@ public class MockVpcManagerImpl extends ManagerBase implements VpcManager { } + @Override + public List<PrivateGateway> getVpcPrivateGateways(long id) { + return null; + } + }
