diff --git a/api/src/main/java/com/cloud/configuration/Resource.java b/api/src/main/java/com/cloud/configuration/Resource.java index fefeeb15ef5..32db2fcafea 100644 --- a/api/src/main/java/com/cloud/configuration/Resource.java +++ b/api/src/main/java/com/cloud/configuration/Resource.java @@ -22,29 +22,27 @@ public interface Resource { String UNLIMITED = "Unlimited"; enum ResourceType { // Primary and Secondary storage are allocated_storage and not the physical storage. - user_vm("user_vm", 0, ResourceOwnerType.Account, ResourceOwnerType.Domain), - public_ip("public_ip", 1, ResourceOwnerType.Account, ResourceOwnerType.Domain), - volume("volume", 2, ResourceOwnerType.Account, ResourceOwnerType.Domain), - snapshot("snapshot", 3, ResourceOwnerType.Account, ResourceOwnerType.Domain), - template("template", 4, ResourceOwnerType.Account, ResourceOwnerType.Domain), - project("project", 5, ResourceOwnerType.Account, ResourceOwnerType.Domain), - network("network", 6, ResourceOwnerType.Account, ResourceOwnerType.Domain), - vpc("vpc", 7, ResourceOwnerType.Account, ResourceOwnerType.Domain), - cpu("cpu", 8, ResourceOwnerType.Account, ResourceOwnerType.Domain), - memory("memory", 9, ResourceOwnerType.Account, ResourceOwnerType.Domain), - primary_storage("primary_storage", 10, ResourceOwnerType.Account, ResourceOwnerType.Domain), - secondary_storage("secondary_storage", 11, ResourceOwnerType.Account, ResourceOwnerType.Domain); + user_vm("user_vm", 0), + public_ip("public_ip", 1), + volume("volume", 2), + snapshot("snapshot", 3), + template("template", 4), + project("project", 5), + network("network", 6), + vpc("vpc", 7), + cpu("cpu", 8), + memory("memory", 9), + primary_storage("primary_storage", 10), + secondary_storage("secondary_storage", 11); private String name; - private ResourceOwnerType[] supportedOwners; private int ordinal; public static final long bytesToKiB = 1024; public static final long bytesToMiB = bytesToKiB * 1024; public static final long bytesToGiB = bytesToMiB * 1024; - ResourceType(String name, int ordinal, ResourceOwnerType... supportedOwners) { + ResourceType(String name, int ordinal) { this.name = name; - this.supportedOwners = supportedOwners; this.ordinal = ordinal; } @@ -52,25 +50,6 @@ public interface Resource { return name; } - public ResourceOwnerType[] getSupportedOwners() { - return supportedOwners; - } - - public boolean supportsOwner(ResourceOwnerType ownerType) { - boolean success = false; - if (supportedOwners != null) { - int length = supportedOwners.length; - for (int i = 0; i < length; i++) { - if (supportedOwners[i].getName().equalsIgnoreCase(ownerType.getName())) { - success = true; - break; - } - } - } - - return success; - } - public int getOrdinal() { return ordinal; } diff --git a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java index f14cef9d92c..ca6f13d2d64 100644 --- a/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/configuration/dao/ResourceCountDaoImpl.java @@ -36,7 +36,6 @@ import com.cloud.configuration.ResourceCountVO; import com.cloud.configuration.ResourceLimit; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.exception.UnsupportedServiceException; import com.cloud.user.AccountVO; import com.cloud.user.dao.AccountDao; import com.cloud.utils.db.DB; @@ -171,9 +170,6 @@ public class ResourceCountDaoImpl extends GenericDaoBase ResourceType[] resourceTypes = Resource.ResourceType.values(); for (ResourceType resourceType : resourceTypes) { - if (!resourceType.supportsOwner(ownerType)) { - continue; - } ResourceCountVO resourceCountVO = new ResourceCountVO(resourceType, 0, ownerId, ownerType); persist(resourceCountVO); } @@ -217,17 +213,6 @@ public class ResourceCountDaoImpl extends GenericDaoBase } } - @Override - public ResourceCountVO persist(ResourceCountVO resourceCountVO) { - ResourceOwnerType ownerType = resourceCountVO.getResourceOwnerType(); - ResourceType resourceType = resourceCountVO.getType(); - if (!resourceType.supportsOwner(ownerType)) { - throw new UnsupportedServiceException("Resource type " + resourceType + " is not supported for owner of type " + ownerType.getName()); - } - - return super.persist(resourceCountVO); - } - @Override public long removeEntriesByOwner(long ownerId, ResourceOwnerType ownerType) { SearchCriteria sc = TypeSearch.create(); diff --git a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java index 37c135d3462..903b851f918 100644 --- a/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java +++ b/server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java @@ -701,7 +701,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim if (isAccount) { if (accountLimitStr.size() < resourceTypes.length) { for (ResourceType rt : resourceTypes) { - if (!accountLimitStr.contains(rt.toString()) && rt.supportsOwner(ResourceOwnerType.Account)) { + if (!accountLimitStr.contains(rt.toString())) { limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForAccount(_accountMgr.getAccount(accountId), rt), accountId, ResourceOwnerType.Account)); } } @@ -710,7 +710,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim } else { if (domainLimitStr.size() < resourceTypes.length) { for (ResourceType rt : resourceTypes) { - if (!domainLimitStr.contains(rt.toString()) && rt.supportsOwner(ResourceOwnerType.Domain)) { + if (!domainLimitStr.contains(rt.toString())) { limits.add(new ResourceLimitVO(rt, findCorrectResourceLimitForDomain(_domainDao.findById(domainId), rt), domainId, ResourceOwnerType.Domain)); } } @@ -855,16 +855,12 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim for (ResourceType type : resourceTypes) { if (accountId != null) { - if (type.supportsOwner(ResourceOwnerType.Account)) { - count = recalculateAccountResourceCount(accountId, type); - counts.add(new ResourceCountVO(type, count, accountId, ResourceOwnerType.Account)); - } + count = recalculateAccountResourceCount(accountId, type); + counts.add(new ResourceCountVO(type, count, accountId, ResourceOwnerType.Account)); } else { - if (type.supportsOwner(ResourceOwnerType.Domain)) { - count = recalculateDomainResourceCount(domainId, type); - counts.add(new ResourceCountVO(type, count, domainId, ResourceOwnerType.Domain)); - } + count = recalculateDomainResourceCount(domainId, type); + counts.add(new ResourceCountVO(type, count, domainId, ResourceOwnerType.Domain)); } } @@ -921,25 +917,20 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim List domainChildren = _domainDao.findImmediateChildrenForParent(domainId); // for each child domain update the resource count - if (type.supportsOwner(ResourceOwnerType.Domain)) { - // calculate project count here - if (type == ResourceType.project) { - newResourceCount += _projectDao.countProjectsForDomain(domainId); - } - - for (DomainVO childDomain : domainChildren) { - long childDomainResourceCount = recalculateDomainResourceCount(childDomain.getId(), type); - newResourceCount += childDomainResourceCount; // add the child domain count to parent domain count - } + // calculate project count here + if (type == ResourceType.project) { + newResourceCount += _projectDao.countProjectsForDomain(domainId); } - if (type.supportsOwner(ResourceOwnerType.Account)) { - List accounts = _accountDao.findActiveAccountsForDomain(domainId); - for (AccountVO account : accounts) { - long accountResourceCount = recalculateAccountResourceCount(account.getId(), type); - newResourceCount += accountResourceCount; // add account's resource count to parent domain count - } + for (DomainVO childDomain : domainChildren) { + long childDomainResourceCount = recalculateDomainResourceCount(childDomain.getId(), type); + newResourceCount += childDomainResourceCount; // add the child domain count to parent domain count + } + List accounts = _accountDao.findActiveAccountsForDomain(domainId); + for (AccountVO account : accounts) { + long accountResourceCount = recalculateAccountResourceCount(account.getId(), type); + newResourceCount += accountResourceCount; // add account's resource count to parent domain count } _resourceCountDao.setResourceCount(domainId, ResourceOwnerType.Domain, type, newResourceCount); @@ -1201,18 +1192,14 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim } for (ResourceType type : ResourceType.values()) { - if (type.supportsOwner(ResourceOwnerType.Domain)) { - recalculateDomainResourceCountInContext(Domain.ROOT_DOMAIN, type); - for (Domain domain : domains) { - recalculateDomainResourceCount(domain.getId(), type); - } + recalculateDomainResourceCountInContext(Domain.ROOT_DOMAIN, type); + for (Domain domain : domains) { + recalculateDomainResourceCount(domain.getId(), type); } - if (type.supportsOwner(ResourceOwnerType.Account)) { - // run through the accounts in the root domain - for (AccountVO account : accounts) { - recalculateAccountResourceCountInContext(account.getId(), type); - } + // run through the accounts in the root domain + for (AccountVO account : accounts) { + recalculateAccountResourceCountInContext(account.getId(), type); } } } diff --git a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java index 3f9447812a7..cb6f9961b64 100644 --- a/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/main/java/com/cloud/server/ConfigurationServerImpl.java @@ -1315,22 +1315,9 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio List domainResourceCount = _resourceCountDao.listResourceCountByOwnerType(ResourceOwnerType.Domain); List accountResourceCount = _resourceCountDao.listResourceCountByOwnerType(ResourceOwnerType.Account); - final List accountSupportedResourceTypes = new ArrayList(); - final List domainSupportedResourceTypes = new ArrayList(); + final int expectedCount = resourceTypes.length; - for (ResourceType resourceType : resourceTypes) { - if (resourceType.supportsOwner(ResourceOwnerType.Account)) { - accountSupportedResourceTypes.add(resourceType); - } - if (resourceType.supportsOwner(ResourceOwnerType.Domain)) { - domainSupportedResourceTypes.add(resourceType); - } - } - - final int accountExpectedCount = accountSupportedResourceTypes.size(); - final int domainExpectedCount = domainSupportedResourceTypes.size(); - - if ((domainResourceCount.size() < domainExpectedCount * domains.size())) { + if ((domainResourceCount.size() < expectedCount * domains.size())) { s_logger.debug("resource_count table has records missing for some domains...going to insert them"); for (final DomainVO domain : domains) { // Lock domain @@ -1344,8 +1331,8 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio domainCountStr.add(domainCount.getType().toString()); } - if (domainCountStr.size() < domainExpectedCount) { - for (ResourceType resourceType : domainSupportedResourceTypes) { + if (domainCountStr.size() < expectedCount) { + for (ResourceType resourceType : resourceTypes) { if (!domainCountStr.contains(resourceType.toString())) { ResourceCountVO resourceCountVO = new ResourceCountVO(resourceType, 0, domain.getId(), ResourceOwnerType.Domain); s_logger.debug("Inserting resource count of type " + resourceType + " for domain id=" + domain.getId()); @@ -1359,7 +1346,7 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio } } - if ((accountResourceCount.size() < accountExpectedCount * accounts.size())) { + if ((accountResourceCount.size() < expectedCount * accounts.size())) { s_logger.debug("resource_count table has records missing for some accounts...going to insert them"); for (final AccountVO account : accounts) { // lock account @@ -1373,8 +1360,8 @@ public class ConfigurationServerImpl extends ManagerBase implements Configuratio accountCountStr.add(accountCount.getType().toString()); } - if (accountCountStr.size() < accountExpectedCount) { - for (ResourceType resourceType : accountSupportedResourceTypes) { + if (accountCountStr.size() < expectedCount) { + for (ResourceType resourceType : resourceTypes) { if (!accountCountStr.contains(resourceType.toString())) { ResourceCountVO resourceCountVO = new ResourceCountVO(resourceType, 0, account.getId(), ResourceOwnerType.Account); s_logger.debug("Inserting resource count of type " + resourceType + " for account id=" + account.getId());