ofri masad has uploaded a new change for review. Change subject: engine: Fix storage quota distribution bug ......................................................................
engine: Fix storage quota distribution bug In user portal the storage quota distribution was not presented because the vm list passed to the QuotaManager had no disks. The personal consumption calculation was moved from QuotaManager to the frontend (the ResourcesModel), where the vm list and disk list are already feched from DB. Change-Id: I9190fa6768af035384299e64f6d1b15891dd5514 Signed-off-by: Ofri Masad <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetQuotasConsumptionForCurrentUserQueryParameters.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/resources/ResourcesModel.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedResourceView.java 5 files changed, 67 insertions(+), 86 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/10370/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java index 9e71966..54ac830 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetQuotasConsumptionForCurrentUserQuery.java @@ -2,23 +2,20 @@ import org.ovirt.engine.core.bll.quota.QuotaManager; import org.ovirt.engine.core.common.businessentities.Quota; -import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.queries.GetQuotasConsumptionForCurrentUserQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.utils.GuidUtils; import java.util.ArrayList; import java.util.List; -public class GetQuotasConsumptionForCurrentUserQuery<P extends GetQuotasConsumptionForCurrentUserQueryParameters> extends QueriesCommandBase<P> { +public class GetQuotasConsumptionForCurrentUserQuery<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> { public GetQuotasConsumptionForCurrentUserQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { - List<VM> vms = getDbFacade().getVmDao().getAllForUser(getUser().getUserId()); - List<Guid> ids = new ArrayList<Guid>(); ids.add(getUser().getUserId()); ids.addAll(GuidUtils.getGuidListFromString(getUser().getGroupIds())); @@ -26,8 +23,8 @@ for (Guid id : ids) { quotaList.addAll(getDbFacade() .getQuotaDao() - .getQuotaByAdElementId(id, getParameters().getStoragePoolId())); + .getQuotaByAdElementId(id, null)); } - getQueryReturnValue().setReturnValue(QuotaManager.getInstance().generatePerUserUsageReport(quotaList, vms)); + getQueryReturnValue().setReturnValue(QuotaManager.getInstance().generatePerUserUsageReport(quotaList)); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java index e88e306..6061088 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/quota/QuotaManager.java @@ -8,14 +8,12 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; import org.ovirt.engine.core.common.AuditLogType; -import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.QuotaStorage; import org.ovirt.engine.core.common.businessentities.QuotaUsagePerUser; import org.ovirt.engine.core.common.businessentities.QuotaVdsGroup; import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; @@ -630,9 +628,9 @@ if(param.getQuotaGuid() == null || Guid.Empty.equals(param.getQuotaGuid())) { parameters.getCanDoActionMessages().add(VdcBllMessages.ACTION_TYPE_FAILED_QUOTA_IS_NOT_VALID.toString()); auditLogPair.setFirst(param.getParameterType() == QuotaConsumptionParameter.ParameterType.STORAGE ? - AuditLogType.MISSING_QUOTA_STORAGE_PARAMETERS_PERMISSIVE_MODE: + AuditLogType.MISSING_QUOTA_STORAGE_PARAMETERS_PERMISSIVE_MODE : AuditLogType.MISSING_QUOTA_CLUSTER_PARAMETERS_PERMISSIVE_MODE); - log.errorFormat("No Quota id passed from command: {0}",parameters.getAuditLogable().getClass().getName()); + log.errorFormat("No Quota id passed from command: {0}", parameters.getAuditLogable().getClass().getName()); corruptedParameters.add(param); return false; } @@ -644,7 +642,7 @@ parameters.getAuditLogable() .getVmName())); auditLogPair.setFirst(param.getParameterType() == QuotaConsumptionParameter.ParameterType.STORAGE ? - AuditLogType.MISSING_QUOTA_STORAGE_PARAMETERS_PERMISSIVE_MODE: + AuditLogType.MISSING_QUOTA_STORAGE_PARAMETERS_PERMISSIVE_MODE : AuditLogType.MISSING_QUOTA_CLUSTER_PARAMETERS_PERMISSIVE_MODE); log.errorFormat("The quota id {0} is not found in backend and DB.", param.getQuotaGuid().toString()); corruptedParameters.add(param); @@ -848,13 +846,12 @@ /** * Return a list of QuotaUsagePerUser representing the status of all the quotas available for a specific user * + * * @param quotaIdsList * - quotas available for user - * @param vms - * - vm available for user * @return - list of QuotaUsagePerUser */ - public List<QuotaUsagePerUser> generatePerUserUsageReport(List<Quota> quotaIdsList, List<VM> vms) { + public Map<Guid, QuotaUsagePerUser> generatePerUserUsageReport(List<Quota> quotaIdsList) { Map<Guid, QuotaUsagePerUser> quotaPerUserUsageEntityMap = new HashMap<Guid, QuotaUsagePerUser>(); List<Quota> needToCache = new ArrayList<Quota>(); @@ -903,42 +900,8 @@ } } } - countPersonalUsage(vms, quotaPerUserUsageEntityMap); - return new ArrayList<QuotaUsagePerUser>(quotaPerUserUsageEntityMap.values()); - } - - private void countPersonalUsage(List<VM> vms, Map<Guid, QuotaUsagePerUser> quotaPerUserUsageEntityMap) { - if (vms != null) { - for (VM vm : vms) { - // if vm is running and have a quota - if (vm.getStatus() != VMStatus.Down - && vm.getStatus() != VMStatus.Suspended - && vm.getStatus() != VMStatus.ImageIllegal - && vm.getStatus() != VMStatus.ImageLocked - && vm.getStatus() != VMStatus.PoweringDown - && vm.getQuotaId() != null) { - QuotaUsagePerUser quotaUsagePerUser = quotaPerUserUsageEntityMap.get(vm.getQuotaId()); - // add the vm cpu and mem to the user quota consumption - if (quotaUsagePerUser != null) { - quotaUsagePerUser.setMemoryUsageForUser(quotaUsagePerUser.getMemoryUsageForUser() - + vm.getMemSizeMb()); - quotaUsagePerUser.setVcpuUsageForUser(quotaUsagePerUser.getVcpuUsageForUser() - + vm.getCpuPerSocket() * vm.getNumOfSockets()); - } - } - // for each image of each disk of the vm - if it has a quota - for (DiskImage image : vm.getDiskList()) { - QuotaUsagePerUser quotaUsagePerUser = quotaPerUserUsageEntityMap.get(image.getQuotaId()); - double imageSize = image.getImage().isActive() ? image.getSizeInGigabytes() : image.getActualSize(); - // add the disk size to the user storage consumption - if (quotaUsagePerUser != null) { - quotaUsagePerUser.setStorageUsageForUser(quotaUsagePerUser.getStorageUsageForUser() - + imageSize); - } - } - } - } + return quotaPerUserUsageEntityMap; } private QuotaUsagePerUser addQuotaEntry(Quota quota) { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetQuotasConsumptionForCurrentUserQueryParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetQuotasConsumptionForCurrentUserQueryParameters.java deleted file mode 100644 index 164f3e1..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetQuotasConsumptionForCurrentUserQueryParameters.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.ovirt.engine.core.common.queries; - -import org.ovirt.engine.core.compat.Guid; - -public class GetQuotasConsumptionForCurrentUserQueryParameters extends VdcQueryParametersBase { - - /** - * Auto generated serial id. - */ - private static final long serialVersionUID = 4072642442090555682L; - private Guid storagePoolId; - - public Guid getStoragePoolId() { - return storagePoolId; - } - - public void setStoragePoolId(Guid storagePoolId) { - this.storagePoolId = storagePoolId; - } -} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/resources/ResourcesModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/resources/ResourcesModel.java index 0d90d6f..c8c1222 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/resources/ResourcesModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/resources/ResourcesModel.java @@ -3,13 +3,18 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Map; +import java.util.HashMap; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.QuotaUsagePerUser; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.queries.GetUserVmsByUserIdAndGroupsParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; -import org.ovirt.engine.core.common.queries.GetQuotasConsumptionForCurrentUserQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; @@ -217,7 +222,7 @@ public void OnSuccess(Object model, Object ReturnValue) { ResourcesModel resourcesModel = (ResourcesModel) model; - ArrayList<VM> list = + final ArrayList<VM> list = (ArrayList<VM>) ((VdcQueryReturnValue) ReturnValue).getReturnValue(); // TODO: Insert dummy data regarding disks and snapshots. for (VM vm : list) @@ -302,21 +307,57 @@ Collections.sort(list, COMPARATOR); resourcesModel.setItems(list); + // async Query for quota + AsyncQuery _asyncQueryForQuota = new AsyncQuery(); + _asyncQueryForQuota.setModel(this); + VdcQueryParametersBase parameters = + new VdcQueryParametersBase(); + parameters.setRefresh(getIsQueryFirstTime()); + Frontend.RunQuery(VdcQueryType.GetQuotasConsumptionForCurrentUser, parameters, new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object ReturnValue) { + Map<Guid, QuotaUsagePerUser> quotaPerUserUsageEntityMap = + (HashMap<Guid, QuotaUsagePerUser>) ((VdcQueryReturnValue) ReturnValue).getReturnValue(); + + //calculate personal consumption + for (VM vm : list) { + // if vm is running and have a quota + if (vm.getStatus() != VMStatus.Down + && vm.getStatus() != VMStatus.Suspended + && vm.getStatus() != VMStatus.ImageIllegal + && vm.getStatus() != VMStatus.ImageLocked + && vm.getStatus() != VMStatus.PoweringDown + && vm.getQuotaId() != null) { + QuotaUsagePerUser quotaUsagePerUser = + quotaPerUserUsageEntityMap.get(vm.getQuotaId()); + // add the vm cpu and mem to the user quota consumption + if (quotaUsagePerUser != null) { + quotaUsagePerUser.setMemoryUsageForUser(quotaUsagePerUser.getMemoryUsageForUser() + + vm.getMemSizeMb()); + quotaUsagePerUser.setVcpuUsageForUser(quotaUsagePerUser.getVcpuUsageForUser() + + vm.getCpuPerSocket() * vm.getNumOfSockets()); + } + } + // for each image of each disk of the vm - if it has a quota + for (DiskImage image : vm.getDiskList()) { + QuotaUsagePerUser quotaUsagePerUser = + quotaPerUserUsageEntityMap.get(image.getQuotaId()); + double imageSize = + image.getImage().isActive() ? image.getSizeInGigabytes() + : image.getActualSize(); + // add the disk size to the user storage consumption + if (quotaUsagePerUser != null) { + quotaUsagePerUser.setStorageUsageForUser(quotaUsagePerUser.getStorageUsageForUser() + + imageSize); + } + } + } + getUsedQuotaPercentage().setEntity(new ArrayList<QuotaUsagePerUser>(quotaPerUserUsageEntityMap.values())); + } + })); } }; - - // async Query for quota - AsyncQuery _asyncQueryForQuota = new AsyncQuery(); - _asyncQueryForQuota.setModel(this); - GetQuotasConsumptionForCurrentUserQueryParameters parameters = new GetQuotasConsumptionForCurrentUserQueryParameters(); - parameters.setRefresh(getIsQueryFirstTime()); - Frontend.RunQuery(VdcQueryType.GetQuotasConsumptionForCurrentUser, parameters, new AsyncQuery(this, new INewAsyncCallback() { - @Override - public void OnSuccess(Object model, Object ReturnValue) - { - getUsedQuotaPercentage().setEntity(((VdcQueryReturnValue) ReturnValue).getReturnValue()); - } - })); // Items property will contain list of VMs. GetUserVmsByUserIdAndGroupsParameters getUserVmsByUserIdAndGroupsParameters = diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedResourceView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedResourceView.java index e2d21d5..2c6acd8 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedResourceView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedResourceView.java @@ -348,7 +348,7 @@ "0" : //$NON-NLS-1$ diskSizeRenderer.render(quotaPerUserUsageEntity.getFreeStorage()); storageQuotaProgressBar.setTitle(constants.freeStorage() + freeStorage); - if (quotaPerUserUsageEntity.getMemoryTotalUsage() == 0) { + if (quotaPerUserUsageEntity.getStorageTotalUsage() == 0) { storageQuotaProgressBar.setZeroValue(); } } -- To view, visit http://gerrit.ovirt.org/10370 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9190fa6768af035384299e64f6d1b15891dd5514 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: ofri masad <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
