mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
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:
parent
f083f91b0b
commit
6b62a04eaf
@ -215,4 +215,6 @@ public interface NetworkOrchestrationService {
|
||||
DhcpServiceProvider getDhcpServiceProvider(Network network);
|
||||
|
||||
void removeDhcpServiceInSubnet(Nic nic);
|
||||
|
||||
boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user