CLOUDSTACK-5281:

Resource limit shouldnt be counted for resources with display flag = 0. Correcting this for the networks at the moment.
This commit is contained in:
Nitin Mehta 2013-12-20 16:58:43 -08:00
parent f083f91b0b
commit 6b62a04eaf
4 changed files with 19 additions and 5 deletions

View File

@ -215,4 +215,6 @@ public interface NetworkOrchestrationService {
DhcpServiceProvider getDhcpServiceProvider(Network network);
void removeDhcpServiceInSubnet(Nic nic);
boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType);
}

View File

@ -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;

View File

@ -195,6 +195,7 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> 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<NetworkAccountVO> join4 = _accountsDao.createSearchBuilder();
join4.and("account", join4.entity().getAccountId(), Op.EQ);
@ -549,6 +550,7 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements N
public long countNetworksUserCanCreate(long ownerId) {
SearchCriteria<Long> 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);

View File

@ -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);
}