Shahar Havivi has uploaded a new change for review. Change subject: core, restapi: Missing domain field on VM\Template object ......................................................................
core, restapi: Missing domain field on VM\Template object BE is not returning VmInit for the collection of VM and Templates (since it use the search query). Added a GetVmsInitQuery to set the VmInit for Templates and VMs collections. Bug-Url: https://bugzilla.redhat.com/1069201 Change-Id: Icf43cb1a0d25d89ef68f21bc47b82c2cd6fdf19d Signed-off-by: Shahar Havivi <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsInitQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdsQueryParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java M packaging/dbscripts/vms_sp.sql 13 files changed, 174 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/25181/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsInitQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsInitQuery.java new file mode 100644 index 0000000..aff9b1c --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsInitQuery.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.IdsQueryParameters; + +/** + * Query set VmInit to VMs *** OR *** Templates + */ +public class GetVmsInitQuery<P extends IdsQueryParameters> extends QueriesCommandBase<P> { + public GetVmsInitQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + if (getParameters().getIds() != null) { + getQueryReturnValue().setReturnValue(VmHandler.getVmInitByIds(getParameters().getIds())); + } + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index 85d19d8..d44769d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -331,6 +331,11 @@ db.remove(vm.getId()); } + public static List<VmInit> getVmInitByIds(List<Guid> ids) { + VmInitDAO db = DbFacade.getInstance().getVmInitDao(); + return db.getVmInitByIds(ids); + } + /** * Filters the vm image disks/disk devices according to the given parameters * note: all the given parameters are relevant for image disks, luns will be filtered. diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java index 2757432..d5c6b38 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Entities.java @@ -143,4 +143,13 @@ return baseEntities; } + + @SuppressWarnings("unchecked") + public static <E extends BusinessEntity<I>, I extends Serializable> List<I> getIds(List<E> entities) { + List<I> ids = new ArrayList<I>(entities.size()); + for (E entity : entities) { + ids.add(entity.getId()); + } + return ids; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdsQueryParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdsQueryParameters.java new file mode 100644 index 0000000..00131d5 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/IdsQueryParameters.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.core.common.queries; + +import java.util.List; + +import org.ovirt.engine.core.compat.Guid; + +public class IdsQueryParameters extends VdcQueryParametersBase { + private static final long serialVersionUID = 575294540991590541L; + + private List<Guid> ids; + + public IdsQueryParameters() { + } + + public List<Guid> getIds() { + return ids; + } + public void setId(List<Guid> vms) { + this.ids = vms; + } +} 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 da459ca..b24e31b 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 @@ -22,6 +22,7 @@ GetVmsByVnicProfileId, GetTemplatesByVnicProfileId, GetVirtioScsiControllers(VdcQueryAuthType.User), + GetVmsInit, // Vds queries GetVdsByVdsId, diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAO.java index b456d56..e3dfca1 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAO.java @@ -1,8 +1,11 @@ package org.ovirt.engine.core.dao; +import java.util.List; + import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.compat.Guid; public interface VmInitDAO extends GenericDao<VmInit, Guid> { + List<VmInit> getVmInitByIds(List<Guid> ids); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java index 8633bf6..e0af569 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmInitDAODbFacadeImpl.java @@ -5,6 +5,7 @@ import java.util.List; import org.apache.commons.lang.NotImplementedException; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; @@ -42,6 +43,13 @@ getCallsHandler().executeModification("DeleteVmInit", getIdParamterSource(id)); } + @Override + public List<VmInit> getVmInitByIds(List<Guid> ids) { + return getCallsHandler().executeReadList("GetVmInitByids", + VMInitRowMapper.instance, + getCustomMapSqlParameterSource().addValue("vm_init_ids", StringUtils.join(ids, ','))); + } + private MapSqlParameterSource getIdParamterSource(Guid id) { return getCustomMapSqlParameterSource() .addValue("vm_id", id); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java index 2dd9677..2106fdd 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.ws.rs.core.Response; @@ -20,14 +21,18 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmTemplateParametersBase; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmByVmNameForDataCenterParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; +import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; 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; @@ -136,6 +141,19 @@ } protected Templates mapCollection(List<VmTemplate> entities) { + // Fill VmInit for entities - the search query no join the VmInit to Templates + IdsQueryParameters params = new IdsQueryParameters(); + List<Guid> ids = Entities.getIds(entities); + params.setId(ids); + VdcQueryReturnValue queryReturnValue = runQuery(VdcQueryType.GetVmsInit, params); + if (queryReturnValue.getSucceeded() && queryReturnValue.getReturnValue() != null) { + List<VmInit> vmInits = queryReturnValue.getReturnValue(); + Map<Guid, VmInit> initMap = Entities.businessEntitiesById(vmInits); + for (VmTemplate template : entities) { + template.setVmInit(initMap.get(template.getId())); + } + } + Templates collection = new Templates(); for (VmTemplate entity : entities) { collection.getTemplates().add(addLinks(populate(map(entity), entity))); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index aa36aa0..af6c6f6 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -43,8 +43,10 @@ import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmManagementParametersBase; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; @@ -53,6 +55,7 @@ import org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters; import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; +import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; @@ -451,6 +454,19 @@ } protected VMs mapCollection(List<org.ovirt.engine.core.common.businessentities.VM> entities, boolean isFiltered) { + // Fill VmInit for entities - the search query no join the VmInit to Vm + IdsQueryParameters params = new IdsQueryParameters(); + List<Guid> ids = Entities.getIds(entities); + params.setId(ids); + VdcQueryReturnValue queryReturnValue = runQuery(VdcQueryType.GetVmsInit, params); + if (queryReturnValue.getSucceeded() && queryReturnValue.getReturnValue() != null) { + List<VmInit> vmInits = queryReturnValue.getReturnValue(); + Map<Guid, VmInit> initMap = Entities.businessEntitiesById(vmInits); + for (org.ovirt.engine.core.common.businessentities.VM vm : entities) { + vm.setVmInit(initMap.get(vm.getId())); + } + } + VMs collection = new VMs(); for (org.ovirt.engine.core.common.businessentities.VM entity : entities) { VM vm = map(entity); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java index d4e930b..0404cc0 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResourceTest.java @@ -23,10 +23,12 @@ import org.ovirt.engine.core.common.businessentities.AsyncTaskStatus; import org.ovirt.engine.core.common.businessentities.AsyncTaskStatusEnum; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmByVmNameForDataCenterParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; +import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; @@ -613,4 +615,32 @@ new ArrayList<>()); } } + + @Override + protected void setUpQueryExpectations(String query, Object failure) throws Exception { + // If the query to retrieve the virtual templates succeeds, then we will run another query to add the + // initialization information: + if (failure == null) { + setUpEntityQueryExpectations( + VdcQueryType.GetVmsInit, + IdsQueryParameters.class, + new String[]{}, + new Object[]{}, + setUpVmInit() + ); + } + + // Add the default expectations: + super.setUpQueryExpectations(query, failure); + } + + private List<VmInit> setUpVmInit() { + List<VmInit> vmInits = new ArrayList<>(NAMES.length); + for (int i = 0; i < NAMES.length; i++) { + VmInit vmInit = control.createMock(VmInit.class); + vmInits.add(vmInit); + } + return vmInits; + } + } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java index c5087a1..855fd1e 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java @@ -47,6 +47,7 @@ import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmInit; import org.ovirt.engine.core.common.businessentities.VmPayload; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmStatistics; @@ -55,6 +56,7 @@ import org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters; import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; +import org.ovirt.engine.core.common.queries.IdsQueryParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.VmDeviceType; @@ -1439,4 +1441,31 @@ "configuration"); } } + + @Override + protected void setUpQueryExpectations(String query, Object failure) throws Exception { + // If the query to retrieve the virtual machines succeeds, then we will run another query to add the + // initialization information: + if (failure == null) { + setUpEntityQueryExpectations( + VdcQueryType.GetVmsInit, + IdsQueryParameters.class, + new String[]{}, + new Object[]{}, + setUpVmInit() + ); + } + + // Add the default expectations: + super.setUpQueryExpectations(query, failure); + } + + private List<VmInit> setUpVmInit() { + List<VmInit> vminits = new ArrayList<>(NAMES.length); + for (int i = 0; i < NAMES.length; i++) { + VmInit vmInit = control.createMock(VmInit.class); + vminits.add(vmInit); + } + return vminits; + } } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java index 1092148..fa93bc0 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java @@ -26,6 +26,7 @@ import org.ovirt.engine.api.model.CustomProperty; import org.ovirt.engine.api.model.Display; import org.ovirt.engine.api.model.DisplayType; +import org.ovirt.engine.api.model.Domain; import org.ovirt.engine.api.model.File; import org.ovirt.engine.api.model.Files; import org.ovirt.engine.api.model.GuestInfo; @@ -506,6 +507,11 @@ if (entity.getVmInit() != null) { model.setInitialization(map(entity.getVmInit(), null)); + if (entity.getVmInit().getDomain() != null) { + Domain domain = new Domain(); + domain.setName(entity.getVmInit().getDomain()); + model.setDomain(domain); + } } return model; } diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql index 81fb41c..960b79d 100644 --- a/packaging/dbscripts/vms_sp.sql +++ b/packaging/dbscripts/vms_sp.sql @@ -1170,6 +1170,15 @@ END; $procedure$ LANGUAGE plpgsql; +Create or replace FUNCTION GetVmInitByids(v_vm_init_ids TEXT) RETURNS SETOF vm_init STABLE + AS $procedure$ +BEGIN +RETURN QUERY SELECT * + FROM vm_init + WHERE vm_init.vm_id IN (SELECT * from fnSplitterUuid(v_vm_init_ids)); +END; $procedure$ +LANGUAGE plpgsql; + Create or replace FUNCTION UpdateVmInit( v_vm_id UUID, -- To view, visit http://gerrit.ovirt.org/25181 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Icf43cb1a0d25d89ef68f21bc47b82c2cd6fdf19d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Shahar Havivi <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
