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

Reply via email to