From c94c71b4ce25bc12a2505547a8fdd79fa574fae3 Mon Sep 17 00:00:00 2001 From: Jayapal Date: Tue, 14 May 2013 16:10:38 +0530 Subject: [PATCH] CLOUDSTACK-2441: Fix deleting private gateways while deleting vpc in case multiple private gateways --- .../cloud/network/vpc/dao/VpcGatewayDao.java | 5 +++ .../network/vpc/dao/VpcGatewayDaoImpl.java | 9 +++++ .../src/com/cloud/network/vpc/VpcManager.java | 2 + .../com/cloud/network/vpc/VpcManagerImpl.java | 37 ++++++++++++++----- .../com/cloud/vpc/MockVpcManagerImpl.java | 5 +++ 5 files changed, 49 insertions(+), 9 deletions(-) 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 8cb5c591e02..24d9deb511c 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 getPrivateGatewayForVpc(long vpcId); VpcGatewayVO getVpnGatewayForVpc(long vpcId); Long getNetworkAclIdForPrivateIp(long vpcId, long networkId, String ipaddr); + + List listByVpcIdAndType(long vpcId, VpcGateway.Type type); } 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 b4d403ec12b..6a2f8bd4459 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 implem } } + @Override + public List listByVpcIdAndType(long vpcId, VpcGateway.Type type) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("vpcId", vpcId); + sc.setParameters("type", type); + return listBy(sc); + } } diff --git a/server/src/com/cloud/network/vpc/VpcManager.java b/server/src/com/cloud/network/vpc/VpcManager.java index f3b4bbcf4f7..e8db8d3fd5c 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 getVpcPrivateGateways(long id); } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index fb3d41ee5e6..f01d81be392 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 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 getVpcPrivateGateways(long id) { + List gateways = _vpcGatewayDao.listByVpcIdAndType(id, VpcGateway.Type.Private); + + if (gateways != null) { + List 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); diff --git a/server/test/com/cloud/vpc/MockVpcManagerImpl.java b/server/test/com/cloud/vpc/MockVpcManagerImpl.java index 1e2cd5f9eb1..9812750e479 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 getVpcPrivateGateways(long id) { + return null; + } + }