CS-16168:AutoScale- Deletion of Account doesn't delete the AutoScale LB rule

This commit is contained in:
Deepak Garg 2012-09-12 21:46:04 +05:30 committed by Vijay Venkatachalam
parent 58db4d0d88
commit d2155890cc
10 changed files with 62 additions and 4 deletions

View File

@ -17,4 +17,6 @@
package com.cloud.network.as;
public interface AutoScaleManager extends AutoScaleService {
void cleanUpAutoScaleResources(Long accountId);
}

View File

@ -94,8 +94,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<Type> implements AutoScaleService, Manager {
@Local(value = { AutoScaleService.class, AutoScaleManager.class })
public class AutoScaleManagerImpl<Type> implements AutoScaleManager, AutoScaleService, Manager {
private static final Logger s_logger = Logger.getLogger(AutoScaleManagerImpl.class);
String _name;
@ -1129,4 +1129,20 @@ public class AutoScaleManagerImpl<Type> 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);
}
}
}

View File

@ -20,4 +20,5 @@ import com.cloud.network.as.AutoScalePolicyVO;
import com.cloud.utils.db.GenericDao;
public interface AutoScalePolicyDao extends GenericDao<AutoScalePolicyVO, Long> {
int removeByAccountId(long accountId);
}

View File

@ -20,7 +20,16 @@ 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<AutoScalePolicyVO, Long> implements AutoScalePolicyDao {
public int removeByAccountId(long accountId) {
SearchCriteria<AutoScalePolicyVO> sc = createSearchCriteria();
sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId);
return remove(sc);
}
}

View File

@ -20,4 +20,6 @@ import com.cloud.network.as.AutoScaleVmProfileVO;
import com.cloud.utils.db.GenericDao;
public interface AutoScaleVmProfileDao extends GenericDao<AutoScaleVmProfileVO, Long> {
int removeByAccountId(long accountId);
}

View File

@ -20,7 +20,16 @@ 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<AutoScaleVmProfileVO, Long> implements AutoScaleVmProfileDao {
@Override
public int removeByAccountId(long accountId) {
SearchCriteria<AutoScaleVmProfileVO> sc = createSearchCriteria();
sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId);
return remove(sc);
}
}

View File

@ -24,4 +24,5 @@ public interface ConditionDao extends GenericDao<ConditionVO, Long> {
ConditionVO findByCounterId(long ctrId);
int removeByAccountId(long accountId);
}

View File

@ -38,9 +38,16 @@ public class ConditionDaoImpl extends GenericDaoBase<ConditionVO, Long> implemen
@Override
public ConditionVO findByCounterId(long ctrId) {
// TODO - may consider indexing counterId field in db-schema
SearchCriteria<ConditionVO> sc = AllFieldsSearch.create();
sc.setParameters("counterId", ctrId);
return findOneBy(sc);
}
public int removeByAccountId(long accountId) {
SearchCriteria<ConditionVO> sc = createSearchCriteria();
sc.addAnd("accountId", SearchCriteria.Op.EQ, accountId);
return remove(sc);
}
}

View File

@ -259,7 +259,7 @@ public class LoadBalancingRulesManagerImpl<Type> 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());

View File

@ -75,6 +75,7 @@ import com.cloud.network.NetworkManager;
import com.cloud.network.NetworkVO;
import com.cloud.network.RemoteAccessVpnVO;
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;
@ -214,6 +215,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
private DomainRouterDao _routerDao;
@Inject
Site2SiteVpnManager _vpnMgr;
@Inject
private AutoScaleManager _autoscaleMgr;
private Adapters<UserAuthenticator> _userAuthenticators;
@ -653,6 +656,14 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag
s_logger.warn("Fail to delete site-to-site VPN customer gateways for account " + accountId);
}
// 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 account specific Virtual vlans (belong to system Public Network) - only when networks are cleaned
// up successfully
if (networksDeleted) {