Alissa Bonas has uploaded a new change for review. Change subject: core: removed limitation of get topSizeVms query ......................................................................
core: removed limitation of get topSizeVms query Use a new query to display vms(with disks and snapshots) in Storage main tab-VMs sub tab. Removed the previously used query GetTopSizeVmsFromStorageDomain. Also, clean unused usages of the old query in REST and UI and added test for the new query. Change-Id: Ia44f746a9321282fa99c7a11de92e720e3e0c610 Signed-off-by: Alissa Bonas <[email protected]> --- M backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql D backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTopSizeVmsFromStorageDomainQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplatesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResourceTest.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageVmListModel.java 10 files changed, 156 insertions(+), 81 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/14558/1 diff --git a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql index 61a8b46..a8ac641 100644 --- a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -324,7 +324,6 @@ select fn_db_add_config_value('NonVmNetworkSupported','true','3.3'); select fn_db_add_config_value('NumberOfFailedRunsOnVds','3','general'); select fn_db_add_config_value('NumberOfUSBSlots','4','general'); -select fn_db_add_config_value('NumberOfVmsForTopSizeVms','10','general'); select fn_db_add_config_value('NumberVmRefreshesBeforeSave','5','general'); select fn_db_add_config_value('SupportBridgesReportByVDSM','false','3.0'); select fn_db_add_config_value('SupportBridgesReportByVDSM','false','3.1'); @@ -744,6 +743,7 @@ select fn_db_delete_config_value('LiveStorageMigrationEnabled','3.1'); select fn_db_delete_config_value('LiveStorageMigrationEnabled','3.2'); select fn_db_delete_config_value('DiskConfigurationList','general'); +select fn_db_delete_config_value('NumberOfVmsForTopSizeVms','general'); ------------------------------------------------------------------------------------ -- Split config section -- The purpose of this section is to treat config option that was once diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTopSizeVmsFromStorageDomainQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTopSizeVmsFromStorageDomainQuery.java deleted file mode 100644 index a662f79..0000000 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTopSizeVmsFromStorageDomainQuery.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ovirt.engine.core.bll; - -import java.util.Collections; -import java.util.List; - -import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.businessentities.comparators.DiskImageByDiskAliasComparator; -import org.ovirt.engine.core.common.businessentities.comparators.VmsComparerByDiskSize; -import org.ovirt.engine.core.common.config.Config; -import org.ovirt.engine.core.common.config.ConfigValues; -import org.ovirt.engine.core.common.queries.StorageDomainQueryTopSizeVmsParameters; -import org.ovirt.engine.core.dal.dbbroker.DbFacade; - -public class GetTopSizeVmsFromStorageDomainQuery<P extends StorageDomainQueryTopSizeVmsParameters> -extends QueriesCommandBase<P> { - public GetTopSizeVmsFromStorageDomainQuery(P parameters) { - super(parameters); - } - - @Override - protected void executeQueryCommand() { - List<VM> vms = DbFacade.getInstance().getVmDao().getAllForStorageDomain( - getParameters().getStorageDomainId()); - for (VM vm : vms) { - VmHandler.updateDisksFromDb(vm); - Collections.sort(vm.getDiskList(), new DiskImageByDiskAliasComparator()); - ImagesHandler.fillImagesBySnapshots(vm); - } - Collections.sort(vms, Collections.reverseOrder(new VmsComparerByDiskSize())); - - /* - * BZ#700327 requires that we return a maximum entries according to the following logic: - * According to given parameter we are asked to - * (-1): means return all available entries. - * 0: means use whatever we have defined in the DB (vdc_options) - * otherwise: use the limitation we got in the parameter. - */ - - int maxEntriesToReturn = getParameters().getMaxVmsToReturn(); - switch (maxEntriesToReturn) { - case -1: - maxEntriesToReturn = vms.size(); - break; - case 0: - maxEntriesToReturn = Math.min(vms.size(), Config.<Integer> GetValue(ConfigValues.NumberOfVmsForTopSizeVms)); - break; - default: - maxEntriesToReturn = Math.min(vms.size(), maxEntriesToReturn); - break; - } - - getQueryReturnValue().setReturnValue(vms.subList(0, maxEntriesToReturn)); - } -} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQuery.java new file mode 100644 index 0000000..b759d64 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQuery.java @@ -0,0 +1,73 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.bll.Backend; +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.comparators.VmsComparerByDiskSize; +import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; + +public class GetVmsByStorageDomainQuery<P extends StorageDomainQueryParametersBase> + extends QueriesCommandBase<P> { + public GetVmsByStorageDomainQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + Guid domainId = getParameters().getStorageDomainId(); + List<DiskImage> disksOfDomain = new ArrayList(); + + List<VM> vms = getAllVMsForStorageDomain(domainId); + + // get all disks and snapshots + VdcQueryReturnValue queryReturnValue = getAllDisksByStorageDomain(domainId); + if (queryReturnValue.getSucceeded()) { + disksOfDomain = (List<DiskImage>) queryReturnValue.getReturnValue(); + } + + Map<String, VM> vmNameToVMMap = new HashMap(); + + for (VM vm : vms) { + vmNameToVMMap.put(vm.getName(), vm); + } + + for (DiskImage disk : disksOfDomain) { + List<String> vmNames = disk.getVmNames(); + if (vmNames == null) { + continue; + } + for (String vmName : vmNames) { + VM vm = vmNameToVMMap.get(vmName); + if (vm != null) { + vm.getDiskMap().put(disk.getId(), disk); + vm.getDiskList().add(disk); + } + } + + } + + Collections.sort(vms, Collections.reverseOrder(new VmsComparerByDiskSize())); + + getQueryReturnValue().setReturnValue(vms); + } + + protected VdcQueryReturnValue getAllDisksByStorageDomain(Guid domainId) { + return Backend.getInstance().RunQuery(VdcQueryType.GetAllDisksByStorageDomainId, + new StorageDomainQueryParametersBase(domainId)); + } + + protected List<VM> getAllVMsForStorageDomain(Guid domainId) { + return getDbFacade().getVmDao().getAllForStorageDomain(domainId); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQueryTest.java new file mode 100644 index 0000000..64669b2 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/GetVmsByStorageDomainQueryTest.java @@ -0,0 +1,77 @@ +package org.ovirt.engine.core.bll.storage; + +import static junit.framework.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.ovirt.engine.core.bll.AbstractQueryTest; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VmDAO; + +public class GetVmsByStorageDomainQueryTest extends AbstractQueryTest<StorageDomainQueryParametersBase, GetVmsByStorageDomainQuery<StorageDomainQueryParametersBase>> { + VmDAO vmDao = mock(VmDAO.class); + Guid domainId = Guid.NewGuid(); + GetVmsByStorageDomainQuery<StorageDomainQueryParametersBase> query; + + @Before + public void setUp() throws Exception { + super.setUp(); + params = getQueryParameters(); + when(getDbFacadeMockInstance().getVmDao()).thenReturn(vmDao); + when(params.getStorageDomainId()).thenReturn(domainId); + query = getQuery(); + } + + @Test + @SuppressWarnings("unchecked") + public void testExecuteQueryCommandNoDisks() { + List<VM> vmsOfDomain = new ArrayList(); + VM vm1 = mock(VM.class); + VM vm2 = mock(VM.class); + vmsOfDomain.add(vm1); + vmsOfDomain.add(vm2); + + when(vmDao.getAllForStorageDomain(domainId)).thenReturn(vmsOfDomain); + + VdcQueryReturnValue returnValue = new VdcQueryReturnValue(); + returnValue.setSucceeded(true); + List<DiskImage> diskImages = new ArrayList<>(); + returnValue.setReturnValue(diskImages); + + doReturn(returnValue).when(query).getAllDisksByStorageDomain(domainId); + query.executeQueryCommand(); + + List<VM> vms = (List<VM>) query.getQueryReturnValue().getReturnValue(); + assertEquals(2,vms.size()); + } + + @Test + @SuppressWarnings("unchecked") + public void testExecuteQueryCommandNoVms() { + List<VM> vmsOfDomain = new ArrayList(); + + when(vmDao.getAllForStorageDomain(domainId)).thenReturn(vmsOfDomain); + + VdcQueryReturnValue returnValue = new VdcQueryReturnValue(); + returnValue.setSucceeded(true); + List<DiskImage> diskImages = new ArrayList<>(); + returnValue.setReturnValue(diskImages); + + doReturn(returnValue).when(query).getAllDisksByStorageDomain(domainId); + query.executeQueryCommand(); + + List<VM> vms = (List<VM>) query.getQueryReturnValue().getReturnValue(); + assertEquals(0,vms.size()); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 609a89a..3a17076 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -9,7 +9,7 @@ GetVmByVmNameForDataCenter(VdcQueryAuthType.User), GetAllVms(VdcQueryAuthType.User), GetVmsRunningOnOrMigratingToVds, - GetTopSizeVmsFromStorageDomain, + GetVmsByStorageDomain, GetVmCustomProperties(VdcQueryAuthType.User), GetVmConfigurationBySnapshot(VdcQueryAuthType.User), GetVmsByDiskGuid, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java index d733f7d..7ee022d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentsResource.java @@ -103,6 +103,5 @@ return collection; } - protected abstract Collection<Q> getEntitiesFromDataDomain(); protected abstract Collection<Q> getEntitiesFromExportDomain(); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplatesResource.java index 34e296a..ae59c67 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplatesResource.java @@ -15,7 +15,6 @@ import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.queries.DiskImageList; import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters; -import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; @@ -38,12 +37,6 @@ protected Template addParents(Template template) { template.setStorageDomain(getStorageDomainModel()); return template; - } - - @Override - protected Collection<VmTemplate> getEntitiesFromDataDomain() { - return getBackendCollection(VdcQueryType.GetVmTemplatesFromStorageDomain, - new StorageDomainQueryParametersBase(storageDomainId)); } @SuppressWarnings("unchecked") diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResource.java index 4cf1c60..bbce689 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResource.java @@ -11,7 +11,6 @@ import org.ovirt.engine.core.common.action.RemoveVmFromImportExportParamenters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters; -import org.ovirt.engine.core.common.queries.StorageDomainQueryTopSizeVmsParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; @@ -34,12 +33,6 @@ protected VM addParents(VM vm) { vm.setStorageDomain(getStorageDomainModel()); return vm; - } - - @Override - protected Collection<org.ovirt.engine.core.common.businessentities.VM> getEntitiesFromDataDomain() { - return getBackendCollection(VdcQueryType.GetTopSizeVmsFromStorageDomain, - new StorageDomainQueryTopSizeVmsParameters(storageDomainId, -1)); } @Override diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResourceTest.java index d298fa4..bed1cbc 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmsResourceTest.java @@ -107,12 +107,6 @@ switch (domainType) { case Data: - setUpEntityQueryExpectations(VdcQueryType.GetTopSizeVmsFromStorageDomain, - StorageDomainQueryTopSizeVmsParameters.class, - new String[] { "StorageDomainId", "MaxVmsToReturn" }, - new Object[] { STORAGE_DOMAIN_ID, -1 }, - setUpVms(), - failure); break; case ImportExport: setUpEntityQueryExpectations(VdcQueryType.GetVmsFromExportDomain, diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageVmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageVmListModel.java index 03c8d30..2158ba3 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageVmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageVmListModel.java @@ -2,7 +2,7 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.StorageDomain; -import org.ovirt.engine.core.common.queries.StorageDomainQueryTopSizeVmsParameters; +import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.ui.frontend.AsyncQuery; @@ -86,10 +86,10 @@ } }; - StorageDomainQueryTopSizeVmsParameters tempVar = - new StorageDomainQueryTopSizeVmsParameters(getEntity().getId(), 0); + StorageDomainQueryParametersBase tempVar = + new StorageDomainQueryParametersBase(getEntity().getId()); tempVar.setRefresh(getIsQueryFirstTime()); - Frontend.RunQuery(VdcQueryType.GetTopSizeVmsFromStorageDomain, tempVar, _asyncQuery); + Frontend.RunQuery(VdcQueryType.GetVmsByStorageDomain, tempVar, _asyncQuery); } @Override -- To view, visit http://gerrit.ovirt.org/14558 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia44f746a9321282fa99c7a11de92e720e3e0c610 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alissa Bonas <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
