From 9c92f4537e3179613a521a80d9f8ad677bec7f34 Mon Sep 17 00:00:00 2001 From: Deepak Garg Date: Tue, 28 Aug 2012 14:52:06 +0530 Subject: [PATCH] CS-16168 Cleaning up AutoScale resources when the account is deleted Reviewed-by: vijay.venkatachalam@citrix.com --- .../cloud/network/as/AutoScaleManager.java | 2 ++ .../network/as/AutoScaleManagerImpl.java | 20 +++++++++++++++++-- .../network/as/dao/AutoScalePolicyDao.java | 2 ++ .../as/dao/AutoScalePolicyDaoImpl.java | 10 ++++++++++ .../network/as/dao/AutoScaleVmProfileDao.java | 2 ++ .../as/dao/AutoScaleVmProfileDaoImpl.java | 12 ++++++++++- .../cloud/network/as/dao/ConditionDao.java | 2 ++ .../network/as/dao/ConditionDaoImpl.java | 9 +++++++++ .../lb/LoadBalancingRulesManagerImpl.java | 2 +- .../com/cloud/user/AccountManagerImpl.java | 13 +++++++++++- 10 files changed, 69 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/network/as/AutoScaleManager.java b/server/src/com/cloud/network/as/AutoScaleManager.java index fbfdc085665..8041e05f99a 100644 --- a/server/src/com/cloud/network/as/AutoScaleManager.java +++ b/server/src/com/cloud/network/as/AutoScaleManager.java @@ -13,4 +13,6 @@ package com.cloud.network.as; public interface AutoScaleManager extends AutoScaleService { + + void cleanUpAutoScaleResources(Long accountId); } diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index 980b06de653..1fa432d1007 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -91,8 +91,8 @@ import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.db.Transaction; import com.cloud.utils.net.NetUtils; -@Local(value = { AutoScaleService.class }) -public class AutoScaleManagerImpl implements AutoScaleService, Manager { +@Local(value = { AutoScaleService.class, AutoScaleManager.class }) +public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleService, Manager { private static final Logger s_logger = Logger.getLogger(AutoScaleManagerImpl.class); String _name; @@ -1142,4 +1142,20 @@ public class AutoScaleManagerImpl implements AutoScaleService, Manager { return success; } + public void cleanUpAutoScaleResources(Long accountId) { + // cleans Autoscale VmProfiles, AutoScale Policies and Conditions belonging to an account + int count = 0; + count = _autoScaleVmProfileDao.removeByAccountId(accountId); + if (count > 0) { + s_logger.debug("Deleted " + count + " AutoScale Vm Profile for account Id: " + accountId); + } + count = _autoScalePolicyDao.removeByAccountId(accountId); + if (count > 0) { + s_logger.debug("Deleted " + count + " AutoScale Policies for account Id: " + accountId); + } + count = _conditionDao.removeByAccountId(accountId); + if (count > 0) { + s_logger.debug("Deleted " + count + " Conditions for account Id: " + accountId); + } + } } diff --git a/server/src/com/cloud/network/as/dao/AutoScalePolicyDao.java b/server/src/com/cloud/network/as/dao/AutoScalePolicyDao.java index 646fa364a7e..fae7bddbd3c 100644 --- a/server/src/com/cloud/network/as/dao/AutoScalePolicyDao.java +++ b/server/src/com/cloud/network/as/dao/AutoScalePolicyDao.java @@ -12,8 +12,10 @@ // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.network.as.dao; + import com.cloud.network.as.AutoScalePolicyVO; import com.cloud.utils.db.GenericDao; public interface AutoScalePolicyDao extends GenericDao { + int removeByAccountId(long accountId); } diff --git a/server/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java b/server/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java index 868398dc35e..f46fd87ee1d 100644 --- a/server/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java +++ b/server/src/com/cloud/network/as/dao/AutoScalePolicyDaoImpl.java @@ -12,11 +12,21 @@ // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.network.as.dao; + import javax.ejb.Local; import com.cloud.network.as.AutoScalePolicyVO; import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchCriteria; @Local(value = { AutoScalePolicyDao.class }) public class AutoScalePolicyDaoImpl extends GenericDaoBase implements AutoScalePolicyDao { + + public int removeByAccountId(long accountId) { + SearchCriteria sc = createSearchCriteria(); + + sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId); + + return remove(sc); + } } diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java index c45e71ec4fd..1227e0c0f24 100644 --- a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDao.java @@ -16,4 +16,6 @@ import com.cloud.network.as.AutoScaleVmProfileVO; import com.cloud.utils.db.GenericDao; public interface AutoScaleVmProfileDao extends GenericDao { + + int removeByAccountId(long accountId); } diff --git a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java index 38d0f6d44d0..bd243022132 100644 --- a/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java +++ b/server/src/com/cloud/network/as/dao/AutoScaleVmProfileDaoImpl.java @@ -12,11 +12,21 @@ // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.network.as.dao; + import javax.ejb.Local; import com.cloud.network.as.AutoScaleVmProfileVO; import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.SearchCriteria; @Local(value = { AutoScaleVmProfileDao.class }) -public class AutoScaleVmProfileDaoImpl extends GenericDaoBase implements AutoScaleVmProfileDao { +public class AutoScaleVmProfileDaoImpl extends GenericDaoBase implements AutoScaleVmProfileDao { + + @Override + public int removeByAccountId(long accountId) { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId); + + return remove(sc); + } } diff --git a/server/src/com/cloud/network/as/dao/ConditionDao.java b/server/src/com/cloud/network/as/dao/ConditionDao.java index 1ff4d208b89..2ab6077cf40 100644 --- a/server/src/com/cloud/network/as/dao/ConditionDao.java +++ b/server/src/com/cloud/network/as/dao/ConditionDao.java @@ -24,4 +24,6 @@ public interface ConditionDao extends GenericDao { ConditionVO findByCounterId(long ctrId); + int removeByAccountId(long accountId); + } \ No newline at end of file diff --git a/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java index 338fe19d767..caf8e60a26e 100644 --- a/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java +++ b/server/src/com/cloud/network/as/dao/ConditionDaoImpl.java @@ -17,6 +17,7 @@ package com.cloud.network.as.dao; + import javax.ejb.Local; import com.cloud.network.as.ConditionVO; @@ -43,4 +44,12 @@ public class ConditionDaoImpl extends GenericDaoBase implemen sc.setParameters("counterId", ctrId); return findOneBy(sc); } + + public int removeByAccountId(long accountId) { + SearchCriteria sc = createSearchCriteria(); + + sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId); + + return remove(sc); + } } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 3d7ee4c4ed5..d59a37e58d9 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -268,7 +268,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } AutoScaleVmProfile autoScaleVmProfile = _autoScaleVmProfileDao.findById(vmGroup.getProfileId()); Long autoscaleUserId = autoScaleVmProfile.getAutoScaleUserId(); - User user = _userDao.findById(autoscaleUserId); + User user = _userDao.findByIdIncludingRemoved(autoscaleUserId); String apiKey = user.getApiKey(); String secretKey = user.getSecretKey(); String csUrl = _configDao.getValue(Config.EndpointeUrl.key()); diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 7f5d5828f2e..6521bdf013d 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -73,6 +73,7 @@ import com.cloud.network.RemoteAccessVpnVO; import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Site2SiteVpnConnectionVO; import com.cloud.network.VpnUserVO; +import com.cloud.network.as.AutoScaleManager; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.RemoteAccessVpnDao; @@ -211,6 +212,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag @Inject private IPAddressDao _ipAddressDao; @Inject + private AutoScaleManager _autoscaleMgr; + @Inject private VpcManager _vpcMgr; @Inject private DomainRouterDao _routerDao; @@ -613,12 +616,20 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag for (IpAddress ip : ipsToRelease) { s_logger.debug("Releasing ip " + ip + " as a part of account id=" + accountId + " cleanup"); if (!_networkMgr.disassociatePublicIpAddress(ip.getId(), callerUserId, caller)) { - s_logger.warn("Failed to release ip address " + ip + " as a part of account id=" + accountId + " clenaup"); + s_logger.warn("Failed to release ip address " + ip + " as a part of account id=" + accountId + " cleanup"); accountCleanupNeeded = true; } } } + // Delete autoscale resources if any + try { + _autoscaleMgr.cleanUpAutoScaleResources(accountId); + } catch (CloudRuntimeException ex) { + s_logger.warn("Failed to cleanup AutoScale resources as a part of account id=" + accountId + " cleanup due to exception:", ex); + accountCleanupNeeded = true; + } + // Delete Site 2 Site VPN customer gateway s_logger.debug("Deleting site-to-site VPN customer gateways for account " + accountId); if (!_vpnMgr.deleteCustomerGatewayByAccount(accountId)) {