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

Reply via email to