From 6b62a04eaf1196ebcce5e81c29c9e0f59dd4f858 Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Fri, 20 Dec 2013 16:58:43 -0800 Subject: [PATCH] CLOUDSTACK-5281: Resource limit shouldnt be counted for resources with display flag = 0. Correcting this for the networks at the moment. --- .../service/NetworkOrchestrationService.java | 2 ++ .../engine/orchestration/NetworkOrchestrator.java | 9 +++++---- .../src/com/cloud/network/dao/NetworkDaoImpl.java | 2 ++ server/src/com/cloud/network/NetworkServiceImpl.java | 11 ++++++++++- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java index fc196e24568..8ed50cd508d 100755 --- a/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java +++ b/engine/api/src/org/apache/cloudstack/engine/orchestration/service/NetworkOrchestrationService.java @@ -215,4 +215,6 @@ public interface NetworkOrchestrationService { DhcpServiceProvider getDhcpServiceProvider(Network network); void removeDhcpServiceInSubnet(Nic nic); + + boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType); } diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 1505d4166d2..b3c4854d7cb 100755 --- a/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -1650,7 +1650,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra final boolean updateResourceCount = resourceCountNeedsUpdate(ntwkOff, aclType); //check resource limits if (updateResourceCount) { - _resourceLimitMgr.checkResourceLimit(owner, ResourceType.network); + _resourceLimitMgr.checkResourceLimit(owner, ResourceType.network, isDisplayNetworkEnabled); } // Validate network offering @@ -1928,7 +1928,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra } if (updateResourceCount) { - _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network); + _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network, isDisplayNetworkEnabled); } return network; @@ -2217,7 +2217,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra NetworkOffering ntwkOff = _entityMgr.findById(NetworkOffering.class, networkFinal.getNetworkOfferingId()); boolean updateResourceCount = resourceCountNeedsUpdate(ntwkOff, networkFinal.getAclType()); if (updateResourceCount) { - _resourceLimitMgr.decrementResourceCount(networkFinal.getAccountId(), ResourceType.network); + _resourceLimitMgr.decrementResourceCount(networkFinal.getAccountId(), ResourceType.network, networkFinal.getDisplayNetwork()); } } } @@ -2232,7 +2232,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra return success; } - private boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType) { + @Override + public boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType) { //Update resource count only for Isolated account specific non-system networks boolean updateResourceCount = (ntwkOff.getGuestType() == GuestType.Isolated && !ntwkOff.isSystemOnly() && aclType == ACLType.Account); return updateResourceCount; diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java b/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java index 13fb64e4e9f..0c556c843d9 100644 --- a/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java +++ b/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java @@ -195,6 +195,7 @@ public class NetworkDaoImpl extends GenericDaoBase implements N NetworksRegularUserCanCreateSearch = createSearchBuilder(Long.class); NetworksRegularUserCanCreateSearch.and("aclType", NetworksRegularUserCanCreateSearch.entity().getAclType(), Op.EQ); + NetworksRegularUserCanCreateSearch.and("displayNetwork", NetworksRegularUserCanCreateSearch.entity().getDisplayNetwork(), Op.EQ); NetworksRegularUserCanCreateSearch.select(null, Func.COUNT, NetworksRegularUserCanCreateSearch.entity().getId()); SearchBuilder join4 = _accountsDao.createSearchBuilder(); join4.and("account", join4.entity().getAccountId(), Op.EQ); @@ -549,6 +550,7 @@ public class NetworkDaoImpl extends GenericDaoBase implements N public long countNetworksUserCanCreate(long ownerId) { SearchCriteria sc = NetworksRegularUserCanCreateSearch.create(); sc.setParameters("aclType", ACLType.Account); + sc.setParameters("displayNetwork", 1); sc.setJoinParameters("accounts", "account", ownerId); sc.setJoinParameters("ntwkOff", "specifyVlan", false); return customSearch(sc, null).get(0); diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 0e3aae9f538..39f3ff353d2 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -41,6 +41,7 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.configuration.Resource; import org.apache.log4j.Logger; import org.apache.cloudstack.acl.ControlledEntity.ACLType; @@ -1998,10 +1999,18 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService { network.setDisplayText(displayText); } - if (displayNetwork != null) { + // display flag is not null and has changed + if (displayNetwork != null && displayNetwork != network.getDisplayNetwork()) { if (!_accountMgr.isRootAdmin(callerAccount.getType())) { throw new PermissionDeniedException("Only admin allowed to update displaynetwork parameter"); } + + // Update resource count if it needs to be updated + NetworkOffering networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if(_networkMgr.resourceCountNeedsUpdate(networkOffering,network.getAclType())){ + _resourceLimitMgr.changeResourceCount(network.getAccountId(), Resource.ResourceType.network, displayNetwork); + } + network.setDisplayNetwork(displayNetwork); }