Michael Kublin has uploaded a new change for review. Change subject: engine: Replacing search for vms by query ......................................................................
engine: Replacing search for vms by query The following patch is replace a search for vms which are belongs to some cluster, by query from DB. The query is much more efficient than search , and easily for understanding. The patch contains: 1. Introducing new query 2. Replace all searches by new query 3. Removed class HighAvailableVmsDirector (The following class also uses a search query, but the class is not used anywhere, that's why I remove it instead of replacing search query) Change-Id: I12cee2c66aed35ed357f2ee739232d95fe9fa0c1 Signed-off-by: Michael Kublin <[email protected]> --- M backend/manager/dbscripts/vms_sp.sql D backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HighAvailableVmsDirector.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveBondCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceVdsBaseCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBaseTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java 12 files changed, 74 insertions(+), 157 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/11426/1 diff --git a/backend/manager/dbscripts/vms_sp.sql b/backend/manager/dbscripts/vms_sp.sql index feb12b1..aad2594 100644 --- a/backend/manager/dbscripts/vms_sp.sql +++ b/backend/manager/dbscripts/vms_sp.sql @@ -1081,5 +1081,15 @@ LANGUAGE plpgsql; +Create or replace FUNCTION GetVmsByVdsGroupId(v_vdsGroupId UUID) RETURNS SETOF vms + AS $procedure$ +BEGIN + RETURN QUERY SELECT vms.* + FROM vms + WHERE vds_group_id = v_vdsGroupId; +END; $procedure$ +LANGUAGE plpgsql; + + diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HighAvailableVmsDirector.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HighAvailableVmsDirector.java deleted file mode 100644 index afa0453..0000000 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HighAvailableVmsDirector.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.ovirt.engine.core.bll; - -import java.util.ArrayList; -import java.util.Collections; - -import org.ovirt.engine.core.common.action.RunVmParams; -import org.ovirt.engine.core.common.action.VdcActionType; -import org.ovirt.engine.core.common.businessentities.IVdcQueryable; -import org.ovirt.engine.core.common.businessentities.VDS; -import org.ovirt.engine.core.common.businessentities.VM; -import org.ovirt.engine.core.common.businessentities.VmsComparer; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.queries.VdcQueryType; -import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.core.dal.dbbroker.DbFacade; - -public final class HighAvailableVmsDirector { - public static void TryRunHighAvailableVmsOnVmDown(Guid vmId) { - VM vm = DbFacade.getInstance().getVmDao().get(vmId); - TryRunHighAvailableVm(vm.getVdsGroupName()); - } - - public static void TryRunHighAvailableVdsUp(Guid vdsId) { - VDS vds = DbFacade.getInstance().getVdsDao().get(vdsId); - TryRunHighAvailableVm(vds.getvds_group_name()); - } - - private static void TryRunHighAvailableVm(String vdsGroupName) { - String searchStatement = String.format("Vms: status=down and cluster =%1$s", vdsGroupName); - SearchParameters p = new SearchParameters(searchStatement, SearchType.VM); - p.setMaxCount(Integer.MAX_VALUE); - ArrayList<IVdcQueryable> vmsFromDb = (ArrayList<IVdcQueryable>) Backend.getInstance() - .runInternalQuery(VdcQueryType.Search, p).getReturnValue(); - if (vmsFromDb != null && vmsFromDb.size() != 0) { - ArrayList<VM> highlyAvailableVms = new ArrayList<VM>(); - for (IVdcQueryable vm : vmsFromDb) { - VM currVm = (VM) ((vm instanceof VM) ? vm : null); - if (currVm != null && currVm.isAutoStartup() && currVm.getExitStatus().getValue() != 0) { - highlyAvailableVms.add(currVm); - } - } - Collections.sort(highlyAvailableVms, Collections.reverseOrder(new VmsComparer())); - for (VM vm : highlyAvailableVms) { - if (!Backend.getInstance().runInternalAction(VdcActionType.RunVm, new RunVmParams(vm.getVmtGuid())) - .getSucceeded()) { - break; - } - - } - } - } -} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java index bba3ac5..ecc1d95 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java @@ -24,9 +24,6 @@ import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.validation.group.UpdateEntity; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; @@ -204,14 +201,7 @@ } } if (result) { - SearchParameters searchParams = new SearchParameters("vms: cluster = " - + oldGroup.getname(), SearchType.VM); - searchParams.setMaxCount(Integer.MAX_VALUE); - - @SuppressWarnings("unchecked") - List<VM> vmList = - (List<VM>) getBackend().runInternalQuery(VdcQueryType.Search, searchParams) - .getReturnValue(); + List<VM> vmList = getVmDAO().getAllForVdsGroup(oldGroup.getId()); boolean notDownVms = false; boolean suspendedVms = false; for (VM vm : vmList) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java index fbaf137..0a7e4cf 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java @@ -4,24 +4,17 @@ import java.util.List; import org.apache.commons.lang.StringUtils; -import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.bll.VdsGroupCommandBase; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AttachNetworkToVdsGroupParameter; -import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.queries.SearchReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField; @@ -74,23 +67,12 @@ } // check if network in use by vm - String query = "Vms: cluster = " + getVdsGroup().getname(); - SearchParameters searchParams = new SearchParameters(query, SearchType.VM); - searchParams.setMaxCount(Integer.MAX_VALUE); - VdcQueryReturnValue tempVar = Backend.getInstance().runInternalQuery(VdcQueryType.Search, - searchParams); - SearchReturnValue ret = (SearchReturnValue) ((tempVar instanceof SearchReturnValue) ? tempVar - : null); - if (ret != null && ret.getSucceeded()) { - @SuppressWarnings("unchecked") - List<IVdcQueryable> vmList = (List<IVdcQueryable>) ret.getReturnValue(); - for (IVdcQueryable vm_helper : vmList) { - VM vm = (VM) vm_helper; - List<VmNetworkInterface> interfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); - if (networkUsedByAnInterface(interfaces)) { - addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); - return false; - } + List<VM> vmList = getVmDAO().getAllForVdsGroup(getVdsGroup().getId()); + for (VM vm : vmList) { + List<VmNetworkInterface> interfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); + if (networkUsedByAnInterface(interfaces)) { + addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); + return false; } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveBondCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveBondCommand.java index ee75efb..0a3aae2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveBondCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveBondCommand.java @@ -7,7 +7,6 @@ import org.ovirt.engine.core.bll.Backend; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.RemoveBondParameters; -import org.ovirt.engine.core.common.businessentities.IVdcQueryable; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.VM; @@ -16,11 +15,6 @@ import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; import org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.queries.SearchReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.vdscommands.NetworkVdsmVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; @@ -140,32 +134,22 @@ } // check if network in use by vm - String query = "Vms: cluster = " + vds.getvds_group_name(); - SearchParameters searchParams = new SearchParameters(query, SearchType.VM); - - searchParams.setMaxCount(Integer.MAX_VALUE); - VdcQueryReturnValue tempVar = Backend.getInstance().runInternalQuery(VdcQueryType.Search, searchParams); - SearchReturnValue ret = (SearchReturnValue) ((tempVar instanceof SearchReturnValue) ? tempVar : null); - if (ret != null && ret.getSucceeded()) { - @SuppressWarnings("unchecked") - Iterable<IVdcQueryable> vmList = (Iterable<IVdcQueryable>) ret.getReturnValue(); - for (IVdcQueryable vm_helper : vmList) { - VM vm = (VM) vm_helper; - if (vm.getStatus() != VMStatus.Down) { - List<VmNetworkInterface> vmInterfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); - VmNetworkInterface iface = LinqUtils.firstOrNull(vmInterfaces, new Predicate<VmNetworkInterface>() { - @Override - public boolean eval(VmNetworkInterface i) { - if (i.getNetworkName() != null) { - return i.getNetworkName().equals(bond.getNetworkName()); - } - return false; + List<VM> vmList = getVmDAO().getAllForVdsGroup(vds.getvds_group_id()); + for (VM vm : vmList) { + if (vm.getStatus() != VMStatus.Down) { + List<VmNetworkInterface> vmInterfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); + VmNetworkInterface iface = LinqUtils.firstOrNull(vmInterfaces, new Predicate<VmNetworkInterface>() { + @Override + public boolean eval(VmNetworkInterface i) { + if (i.getNetworkName() != null) { + return i.getNetworkName().equals(bond.getNetworkName()); } - }); - if (iface != null) { - addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); return false; } + }); + if (iface != null) { + addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); + return false; } } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceVdsBaseCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceVdsBaseCommandTest.java index 98bead7..83c76fb 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceVdsBaseCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/FenceVdsBaseCommandTest.java @@ -44,7 +44,7 @@ command = new StopVdsCommand<FenceVdsActionParameters>(createParameters()) { // These methods are protected in AuditLoggableBase, and thus not accessible for spying. @Override - protected VmDAO getVmDAO() { + public VmDAO getVmDAO() { return vmDAO; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java index 403d2a5..057d8e9 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java @@ -4,14 +4,11 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -19,10 +16,8 @@ import org.junit.ClassRule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.ovirt.engine.core.bll.interfaces.BackendInternal; import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDS; @@ -33,17 +28,13 @@ import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.config.ConfigValues; -import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; -import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; -import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dao.StoragePoolDAO; import org.ovirt.engine.core.dao.VdsDAO; import org.ovirt.engine.core.dao.VdsGroupDAO; +import org.ovirt.engine.core.dao.VmDAO; import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; import org.ovirt.engine.core.utils.MockConfigRule; @@ -63,11 +54,11 @@ @Mock private VdsDAO vdsDAO; @Mock - private BackendInternal backendInternal; - @Mock private StoragePoolDAO storagePoolDAO; @Mock private GlusterVolumeDao glusterVolumeDao; + @Mock + private VmDAO vmDao; private UpdateVdsGroupCommand<VdsGroupOperationParameters> cmd; @@ -152,7 +143,7 @@ storagePoolIsLocalFS(); cpuExists(); cpuManufacturersMatch(); - allQueriesEmpty(); + allQueriesForVms(); storagePoolAlreadyHasCluster(); canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_CANNOT_ADD_MORE_THEN_ONE_HOST_TO_LOCAL_STORAGE); } @@ -164,7 +155,7 @@ storagePoolIsLocalFS(); cpuExists(); cpuManufacturersMatch(); - allQueriesEmpty(); + allQueriesForVms(); canDoActionFailedWithReason(VdcBllMessages.DEFAULT_CLUSTER_CANNOT_BE_ON_LOCALFS); } @@ -175,7 +166,7 @@ storagePoolIsLocalFS(); cpuExists(); cpuManufacturersMatch(); - allQueriesEmpty(); + allQueriesForVms(); canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_SELECTION_ALGORITHM_MUST_BE_SET_TO_NONE_ON_LOCAL_STORAGE); } @@ -185,7 +176,7 @@ when(vdsGroupDAO.get(any(Guid.class))).thenReturn(createVdsGroupWithNoCpuName()); when(vdsGroupDAO.getByName(anyString())).thenReturn(createVdsGroupWithNoCpuName()); when(glusterVolumeDao.getByClusterId(any(Guid.class))).thenReturn(new ArrayList<GlusterVolumeEntity>()); - allQueriesEmpty(); + allQueriesForVms(); assertTrue(cmd.canDoAction()); } @@ -195,7 +186,7 @@ when(vdsGroupDAO.get(any(Guid.class))).thenReturn(createVdsGroupWithNoCpuName()); when(vdsGroupDAO.getByName(anyString())).thenReturn(createVdsGroupWithNoCpuName()); cpuExists(); - allQueriesEmpty(); + allQueriesForVms(); canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_AT_LEAST_ONE_SERVICE_MUST_BE_ENABLED); } @@ -206,7 +197,7 @@ when(vdsGroupDAO.getByName(anyString())).thenReturn(createVdsGroupWithNoCpuName()); mcr.mockConfigValue(ConfigValues.AllowClusterWithVirtGlusterEnabled, Boolean.FALSE); cpuExists(); - allQueriesEmpty(); + allQueriesForVms(); canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_ENABLING_BOTH_VIRT_AND_GLUSTER_SERVICES_NOT_ALLOWED); } @@ -230,7 +221,7 @@ when(vdsGroupDAO.getByName(anyString())).thenReturn(createVdsGroupWithNoCpuName()); cpuExists(); cpuFlagsNotMissing(); - allQueriesEmpty(); + allQueriesForVms(); clusterHasGlusterVolumes(); canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_CANNOT_DISABLE_GLUSTER_WHEN_CLUSTER_CONTAINS_VOLUMES); @@ -288,12 +279,11 @@ doReturn(0).when(cmd).compareCpuLevels(any(VDSGroup.class)); - doReturn(backendInternal).when(cmd).getBackend(); - doReturn(vdsGroupDAO).when(cmd).getVdsGroupDAO(); doReturn(vdsDAO).when(cmd).getVdsDAO(); doReturn(storagePoolDAO).when(cmd).getStoragePoolDAO(); doReturn(glusterVolumeDao).when(cmd).getGlusterVolumeDao(); + doReturn(vmDao).when(cmd).getVmDAO(); when(vdsGroupDAO.get(any(Guid.class))).thenReturn(createDefaultVdsGroup()); when(vdsGroupDAO.getByName(anyString())).thenReturn(createDefaultVdsGroup()); @@ -402,11 +392,8 @@ when(vdsDAO.getAllForVdsGroup(any(Guid.class))).thenReturn(vdsList); } - private void allQueriesEmpty() { - VdcQueryReturnValue returnValue = mock(VdcQueryReturnValue.class); - when(backendInternal.runInternalQuery(any(VdcQueryType.class), any(SearchParameters.class))) - .thenReturn(returnValue); - when(returnValue.getReturnValue()).thenReturn(Collections.emptyList()); + private void allQueriesForVms() { + when(vmDao.getAllForVdsGroup(any(Guid.class))).thenReturn(new ArrayList<VM>()); } private void vdsGroupHasVds() { @@ -436,17 +423,7 @@ List<VM> vmList = new ArrayList<VM>(); vmList.add(vm); - VdcQueryReturnValue returnValue = mock(VdcQueryReturnValue.class); - when(backendInternal.runInternalQuery(any(VdcQueryType.class), argThat( - new ArgumentMatcher<VdcQueryParametersBase>() { - @Override - public boolean matches(final Object o) { - SearchParameters param = (SearchParameters) o; - return param.getSearchTypeValue().equals(SearchType.VM); - } - }))) - .thenReturn(returnValue); - when(returnValue.getReturnValue()).thenReturn(vmList); + when(vmDao.getAllForVdsGroup(any(Guid.class))).thenReturn(vmList); } private void cpuFlagsMissing() { diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java index 8014b61..fc91289 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java @@ -534,7 +534,7 @@ return getDbFacade().getVmTemplateDao(); } - protected VmDAO getVmDAO() { + public VmDAO getVmDAO() { return getDbFacade().getVmDao(); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java index 1674a61..7dfc508 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java @@ -211,4 +211,11 @@ * @return the list of VMs */ List<VM> getAllForNetwork(Guid networkId); + + /** + * Retrieves all VMS that are belongs to provided vds group + * @param vdsGroupId + * @return + */ + List<VM> getAllForVdsGroup(Guid vdsGroupId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java index 49ffba1..0206452 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java @@ -249,6 +249,14 @@ .addValue("network_id", id)); } + @Override + public List<VM> getAllForVdsGroup(Guid vdsGroupId) { + return getCallsHandler().executeReadList("GetVmsByVdsGroupId", + VMRowMapper.instance, + getCustomMapSqlParameterSource() + .addValue("vdsGroupId", vdsGroupId)); + } + static final class VMRowMapper implements ParameterizedRowMapper<VM> { public static final VMRowMapper instance = new VMRowMapper(); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBaseTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBaseTest.java index c5a73ee..b0b9d59 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBaseTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBaseTest.java @@ -1067,7 +1067,7 @@ } @Override - protected VmDAO getVmDAO() { + public VmDAO getVmDAO() { final VmDAO v = mock(VmDAO.class); when(v.get(GUID)).thenReturn(new VM()); when(v.get(GUID3)).thenThrow(new RuntimeException()); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java index 02803ad..6febb1a 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java @@ -314,6 +314,18 @@ } /** + * Ensure that all VMS which are belongs to VdsGroup return correct + */ + @Test + public void testGetAllForVdsGroup() { + List<VM> result = dao.getAllForVdsGroup(VDS_GROUP_ID); + + assertNotNull(result); + assertFalse(result.isEmpty()); + } + + + /** * Ensures the VMs related to the specified template are returned. */ @Test -- To view, visit http://gerrit.ovirt.org/11426 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I12cee2c66aed35ed357f2ee739232d95fe9fa0c1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Michael Kublin <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
