From c7a926722533396918b77616e79356adb8b84e87 Mon Sep 17 00:00:00 2001 From: alena Date: Mon, 13 Dec 2010 10:46:15 -0800 Subject: [PATCH] Delete network as a part of account cleanup --- api/src/com/cloud/api/commands/DeleteNetworkCmd.java | 2 +- api/src/com/cloud/network/NetworkService.java | 2 +- server/src/com/cloud/network/NetworkManagerImpl.java | 4 ++-- server/src/com/cloud/network/dao/NetworkDao.java | 1 + server/src/com/cloud/network/dao/NetworkDaoImpl.java | 7 +++++++ server/src/com/cloud/user/AccountManagerImpl.java | 12 ++++++++++++ 6 files changed, 24 insertions(+), 4 deletions(-) diff --git a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java index 1d51c8ad167..755f9ffd1f8 100644 --- a/api/src/com/cloud/api/commands/DeleteNetworkCmd.java +++ b/api/src/com/cloud/api/commands/DeleteNetworkCmd.java @@ -60,7 +60,7 @@ public class DeleteNetworkCmd extends BaseCmd{ @Override public void execute(){ - boolean result = _networkService.deleteNetwork(this); + boolean result = _networkService.deleteNetwork(id); if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index c89686499fa..de04505bd1f 100644 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -85,6 +85,6 @@ public interface NetworkService { Network createNetwork(CreateNetworkCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; List searchForNetworks(ListNetworksCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; - boolean deleteNetwork(DeleteNetworkCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + boolean deleteNetwork(long networkId) throws InvalidParameterValueException, PermissionDeniedException; } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index cef7b221ea9..decb09cb5ac 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -1896,8 +1896,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override @DB - public boolean deleteNetwork(DeleteNetworkCmd cmd) throws InvalidParameterValueException, PermissionDeniedException{ - Long networkId = cmd.getId(); + public boolean deleteNetwork(long networkId) throws InvalidParameterValueException, PermissionDeniedException{ Long userId = UserContext.current().getUserId(); Account account = UserContext.current().getAccount(); @@ -1941,6 +1940,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag //remove all the vlans associated with the network Transaction txn = Transaction.currentTxn(); try { + txn.start(); //remove corresponding vlans List vlans = _vlanDao.listVlansByNetworkId(networkId); for (VlanVO vlan : vlans) { diff --git a/server/src/com/cloud/network/dao/NetworkDao.java b/server/src/com/cloud/network/dao/NetworkDao.java index 63c07360835..d4596841c03 100644 --- a/server/src/com/cloud/network/dao/NetworkDao.java +++ b/server/src/com/cloud/network/dao/NetworkDao.java @@ -27,6 +27,7 @@ import com.cloud.utils.db.SearchBuilder; public interface NetworkDao extends GenericDao { List listBy(long accountId); + List listByOwner(long ownerId); List listBy(long accountId, long offeringId, long dataCenterId); List listBy(long accountId, long dataCenterId, GuestIpType type); NetworkVO persist(NetworkVO network, boolean gc); diff --git a/server/src/com/cloud/network/dao/NetworkDaoImpl.java b/server/src/com/cloud/network/dao/NetworkDaoImpl.java index afce8133008..aa455af6523 100644 --- a/server/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/server/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -236,4 +236,11 @@ public class NetworkDaoImpl extends GenericDaoBase implements N public void clearCheckForGc(long networkId) { _opDao.clearCheckForGc(networkId); } + + @Override + public List listByOwner(long ownerId) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("account", ownerId); + return listBy(sc); + } } diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 82492981aef..4c8b332c9e7 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -63,7 +63,9 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; import com.cloud.network.IPAddressVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkVO; import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.NetworkDao; import com.cloud.network.router.DomainRouterManager; import com.cloud.network.security.NetworkGroupManager; import com.cloud.server.Criteria; @@ -112,6 +114,7 @@ public class AccountManagerImpl implements AccountManager, AccountService { @Inject private DomainRouterDao _routerDao; @Inject private VMTemplateDao _templateDao; @Inject private PodVlanMapDao _podVlanMapDao; + @Inject private NetworkDao _networkDao; @Inject private NetworkGroupManager _networkGroupMgr; @@ -890,6 +893,7 @@ public class AccountManagerImpl implements AccountManager, AccountService { decrementResourceCount(accountId, ResourceType.public_ip); } } + } else { accountCleanupNeeded = true; } @@ -905,6 +909,14 @@ public class AccountManagerImpl implements AccountManager, AccountService { allVlansDeleted = false; } } + + //delete networks + s_logger.debug("Deleting networks for account " + account.getId()); + List networks = _networkDao.listByOwner(accountId); + for (NetworkVO network : networks) { + _networkMgr.deleteNetwork(network.getId()); + s_logger.debug("Network " + network.getId() + " successfully deleted."); + } if (!allVlansDeleted) { accountCleanupNeeded = true;