Liron Ar has uploaded a new change for review.

Change subject: core: persist updated vm/template ovf config
......................................................................

core: persist updated vm/template ovf config

When a vm/template ovf configuration is generated succesfully, persist
the updated configuration to the db.

Change-Id: Ic891429a2a7d055fbd1927e878ae7e0f8b7c9fd9
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/OvfDataUpdaterTest.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDaoTest.java
A packaging/dbscripts/upgrade/03_04_0250_add_ovf_data_column.sql
M packaging/dbscripts/vms_sp.sql
7 files changed, 99 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/63/23563/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
index f4b71be..74afb5d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfDataUpdater.java
@@ -52,6 +52,7 @@
 
     private List<Guid> proccessedIdsInfo;
     private List<Long> proccessedOvfGenerationsInfo;
+    private List<String> proccessedOvfConfigurationsInfo;
 
     private OvfManager ovfManager;
 
@@ -166,7 +167,8 @@
             int sizeToUpdate = Math.min(MAX_ITEMS_PER_SQL_STATEMENT, 
proccessedIdsInfo.size() - i);
             List<Guid> guidsForUpdate = proccessedIdsInfo.subList(i, i + 
sizeToUpdate);
             List<Long> ovfGenerationsForUpdate = 
proccessedOvfGenerationsInfo.subList(i, i + sizeToUpdate);
-            
getVmAndTemplatesGenerationsDao().updateOvfGenerations(guidsForUpdate, 
ovfGenerationsForUpdate);
+            List<String> ovfConfigurationsInfo = 
proccessedOvfConfigurationsInfo.subList(i, i + sizeToUpdate);
+            
getVmAndTemplatesGenerationsDao().updateOvfGenerations(guidsForUpdate, 
ovfGenerationsForUpdate, ovfConfigurationsInfo);
             i += sizeToUpdate;
             initProcessedInfoLists();
         }
@@ -189,7 +191,7 @@
                     Long currentDbGeneration = 
getVmStaticDao().getDbGeneration(template.getId());
                     // currentDbGeneration can be null in case that the 
template was deleted during the run of OvfDataUpdater.
                     if (currentDbGeneration != null && 
template.getDbGeneration() == currentDbGeneration) {
-                        buildMetadataDictionaryForTemplate(template, 
vmsAndTemplateMetadata);
+                        
proccessedOvfConfigurationsInfo.add(buildMetadataDictionaryForTemplate(template,
 vmsAndTemplateMetadata));
                         proccessedIdsInfo.add(template.getId());
                         
proccessedOvfGenerationsInfo.add(template.getDbGeneration());
                     }
@@ -243,7 +245,7 @@
                     Long currentDbGeneration = 
getVmStaticDao().getDbGeneration(vm.getId());
                     // currentDbGeneration can be null in case that the vm was 
deleted during the run of OvfDataUpdater.
                     if (currentDbGeneration != null && 
vm.getStaticData().getDbGeneration() == currentDbGeneration) {
-                        buildMetadataDictionaryForVm(vm, 
vmsAndTemplateMetadata);
+                        
proccessedOvfConfigurationsInfo.add(buildMetadataDictionaryForVm(vm, 
vmsAndTemplateMetadata));
                         proccessedIdsInfo.add(vm.getId());
                         
proccessedOvfGenerationsInfo.add(vm.getStaticData().getDbGeneration());
                     }
@@ -272,7 +274,7 @@
     /**
      * Adds the given template metadata to the given map
      */
-    protected void buildMetadataDictionaryForTemplate(VmTemplate template,
+    protected String buildMetadataDictionaryForTemplate(VmTemplate template,
             Map<Guid, KeyValuePairCompat<String, List<Guid>>> metaDictionary) {
         List<DiskImage> allTemplateImages = template.getDiskList();
         String templateMeta = generateVmTemplateMetadata(template, 
allTemplateImages);
@@ -283,6 +285,7 @@
                         return diskImage.getId();
                     }
                 })));
+        return templateMeta;
     }
 
     /**
@@ -324,7 +327,7 @@
     /**
      * Adds the given vm metadata to the given map
      */
-    protected void buildMetadataDictionaryForVm(VM vm, Map<Guid, 
KeyValuePairCompat<String, List<Guid>>> metaDictionary) {
+    protected String buildMetadataDictionaryForVm(VM vm, Map<Guid, 
KeyValuePairCompat<String, List<Guid>>> metaDictionary) {
         ArrayList<DiskImage> AllVmImages = new ArrayList<DiskImage>();
         List<DiskImage> filteredDisks = 
ImagesHandler.filterImageDisks(vm.getDiskList(), false, true, true);
 
@@ -342,6 +345,7 @@
                                 return a.getId();
                             }
                         })));
+        return vmMeta;
     }
 
     protected VmDAO getVmDao() {
@@ -370,6 +374,7 @@
     private void initProcessedInfoLists() {
         proccessedIdsInfo = new LinkedList<Guid>();
         proccessedOvfGenerationsInfo = new LinkedList<Long>();
+        proccessedOvfConfigurationsInfo = new LinkedList<>();
     }
 
     /**
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/OvfDataUpdaterTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/OvfDataUpdaterTest.java
index 062f93a..955133d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/OvfDataUpdaterTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/OvfDataUpdaterTest.java
@@ -245,7 +245,7 @@
                 return null;
             }
 
-        }).when(vmAndTemplatesGenerationsDAO).updateOvfGenerations(anyList(), 
anyList());
+        }).when(vmAndTemplatesGenerationsDAO).updateOvfGenerations(anyList(), 
anyList(), anyList());
     }
 
     private List<StoragePool> buildStoragePoolsList() {
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDAO.java
index eb10f07..5e2e3a6 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDAO.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
 
 public interface VmAndTemplatesGenerationsDAO extends DAO {
@@ -9,13 +10,15 @@
     /**
      * Updates the vms/templates ovf update version to the given value
      *
+     *
      * @param ids
      *            - vm/template ids
      * @param values
      *            - new ovf generations
+     * @param ovfData
      * @return
      */
-    public void updateOvfGenerations(List<Guid> ids, List<Long> values);
+    public void updateOvfGenerations(List<Guid> ids, List<Long> values, 
List<String> ovfData);
 
     /**
      * Get the current ovf generation of the vm/template with the given guid.
@@ -41,6 +44,11 @@
     public List<Guid> getVmTemplatesIdsForOvfUpdate(Guid storagePoolId);
 
     /**
+     * Get ovf data for the given ids
+     */
+    public List<Pair<Guid, String>> loadOvfDataForIds(List<Guid> ids);
+
+    /**
      * Get ids for ovf deletion from storage
      *
      * @param storagePoolId
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDbFacadeImpl.java
index fe2e207..1b60c9d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDbFacadeImpl.java
@@ -1,16 +1,22 @@
 package org.ovirt.engine.core.dao;
 
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.List;
 
 import org.apache.commons.lang.StringUtils;
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
+import org.springframework.jdbc.core.RowMapper;
 
 public class VmAndTemplatesGenerationsDbFacadeImpl extends BaseDAODbFacade 
implements VmAndTemplatesGenerationsDAO {
     @Override
-    public void updateOvfGenerations(List<Guid> ids, List<Long> values) {
+    public void updateOvfGenerations(List<Guid> ids, List<Long> values, 
List<String> ovfData) {
         getCallsHandler().executeModification("UpdateOvfGenerations", 
getCustomMapSqlParameterSource()
                 .addValue("vms_ids", StringUtils.join(ids, ','))
-                .addValue("vms_db_generations", StringUtils.join(values, 
',')));
+                .addValue("vms_db_generations", StringUtils.join(values, ','))
+                .addValue("ovf_data", StringUtils.join(ovfData, "ENDOVF"))
+                .addValue("ovf_data_seperator", "ENDOVF"));
     }
 
     @Override
@@ -46,4 +52,16 @@
                 createGuidMapper(),
                 getCustomMapSqlParameterSource().addValue("storage_pool_id", 
storagePoolId));
     }
+
+    @Override
+    public List<Pair<Guid, String>> loadOvfDataForIds(List<Guid> ids) {
+        return getCallsHandler().executeReadList("LoadOvfDataForIds",
+                new RowMapper<Pair<Guid, String>>() {
+                    @Override
+                    public Pair<Guid, String> mapRow(ResultSet resultSet, int 
i) throws SQLException {
+                        return new Pair<>(getGuid(resultSet, "vm_guid"), 
resultSet.getString("ovf_data"));
+                    }
+                },
+                getCustomMapSqlParameterSource().addValue("ids", 
StringUtils.join(ids, ',')));
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDaoTest.java
index 469a1ba..26dc5d3 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmAndTemplatesGenerationsDaoTest.java
@@ -5,6 +5,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
@@ -39,7 +40,8 @@
         List<Long> ovfVersions = new LinkedList<Long>();
         ovfVersions.add(updatedOvfForVm50);
         ovfVersions.add(updatedOvfForVm51);
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vmsGuids, 
ovfVersions);
+        List<String> ovfData = Arrays.asList("a", "b");
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vmsGuids, 
ovfVersions, ovfData);
 
         long dbRecievedOvfVer = 
vmAndTemplatesGenerationsDAO.getOvfGeneration(FixturesTool.VM_RHEL5_POOL_50);
         assertEquals("ovf generations weren't updated properly", 
updatedOvfForVm50, dbRecievedOvfVer);
@@ -72,7 +74,7 @@
 
     @Test
     public void testGetVmTemplatesIdsForOvfUpdateOneTemplate() {
-        
vmAndTemplatesGenerationsDAO.updateOvfGenerations(Collections.singletonList(FixturesTool.VM_TEMPLATE_RHEL5),
 Collections.singletonList(Long.valueOf(0)));
+        
vmAndTemplatesGenerationsDAO.updateOvfGenerations(Collections.singletonList(FixturesTool.VM_TEMPLATE_RHEL5),
 Collections.singletonList(Long.valueOf(0)), Arrays.asList("a"));
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmTemplatesIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("one template should need ovf update", 1, guids.size());
@@ -89,7 +91,11 @@
         values.add(0L);
         values.add(0L);
 
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(templates, values);
+        List<String> ovfData = new LinkedList<>();
+        ovfData.add("a");
+        ovfData.add("b");
+
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(templates, values, 
ovfData);
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmTemplatesIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("two templates should need ovf update", 2, guids.size());
@@ -112,7 +118,14 @@
         values.add(0L);
         values.add(0L);
         values.add(0L);
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(templates, values);
+
+        List<String> ovfData = new LinkedList<>();
+        ovfData.add("a");
+        ovfData.add("b");
+        ovfData.add("c");
+        ovfData.add("d");
+
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(templates, values, 
ovfData);
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmTemplatesIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("two templates should need ovf update", 2, guids.size());
@@ -134,7 +147,7 @@
 
     @Test
     public void testGetVmssIdsForOvfUpdateOneVm() {
-        
vmAndTemplatesGenerationsDAO.updateOvfGenerations(Collections.singletonList(FixturesTool.VM_RHEL5_POOL_50),
 Collections.singletonList(Long.valueOf(0)));
+        
vmAndTemplatesGenerationsDAO.updateOvfGenerations(Collections.singletonList(FixturesTool.VM_RHEL5_POOL_50),
 Collections.singletonList(Long.valueOf(0)), Arrays.asList("a"));
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmsIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("one vm should need ovf update", 1, guids.size());
@@ -151,7 +164,11 @@
         values.add(0L);
         values.add(0L);
 
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vms, values);
+        List<String> ovfData = new LinkedList<>();
+        ovfData.add("a");
+        ovfData.add("b");
+
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vms, values, 
ovfData);
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmsIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("two vms should need ovf update", 2, guids.size());
@@ -174,7 +191,14 @@
         values.add(0L);
         values.add(0L);
         values.add(0L);
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vms, values);
+
+        List<String> ovfData = new LinkedList<>();
+        ovfData.add("a");
+        ovfData.add("b");
+        ovfData.add("c");
+        ovfData.add("d");
+
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(vms, values, 
ovfData);
 
         List<Guid> guids = 
vmAndTemplatesGenerationsDAO.getVmsIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
         assertEquals("two vms should need ovf update in pool:" 
+FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER , 2, guids.size());
@@ -204,7 +228,14 @@
         values.add(0L);
         values.add(0L);
         values.add(0L);
-        vmAndTemplatesGenerationsDAO.updateOvfGenerations(toUpdate, values);
+
+        List<String> ovfData = new LinkedList<>();
+        ovfData.add("a");
+        ovfData.add("b");
+        ovfData.add("c");
+        ovfData.add("d");
+
+        vmAndTemplatesGenerationsDAO.updateOvfGenerations(toUpdate, values, 
ovfData);
 
         List<Guid> guids =
                 
vmAndTemplatesGenerationsDAO.getVmTemplatesIdsForOvfUpdate(FixturesTool.STORAGE_POOL_RHEL6_ISCSI_OTHER);
diff --git a/packaging/dbscripts/upgrade/03_04_0250_add_ovf_data_column.sql 
b/packaging/dbscripts/upgrade/03_04_0250_add_ovf_data_column.sql
new file mode 100644
index 0000000..589800f
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_04_0250_add_ovf_data_column.sql
@@ -0,0 +1 @@
+SELECT fn_db_add_column('vm_ovf_generations', 'ovf_data', 'text');
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 741ab41..defc171 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -1,28 +1,33 @@
 ----------------------------------------------------------------
 -- [vm_ovf_generations] Table
 
-Create or replace FUNCTION UpdateOvfGenerations(v_vms_ids VARCHAR(5000), 
v_vms_db_generations VARCHAR(5000))
+Create or replace FUNCTION UpdateOvfGenerations(v_vms_ids VARCHAR(5000), 
v_vms_db_generations VARCHAR(5000), v_ovf_data TEXT, v_ovf_data_seperator 
VARCHAR(10))
     RETURNS VOID
     AS $procedure$
 DECLARE
 curs_vmids CURSOR FOR SELECT * FROM fnSplitterUuid(v_vms_ids);
 curs_newovfgen CURSOR FOR SELECT * FROM fnSplitter(v_vms_db_generations);
+curs_newovfdata CURSOR FOR SELECT * FROM fnSplitterWithSeperator(v_ovf_data, 
v_ovf_data_seperator);
 id UUID;
 new_ovf_gen BIGINT;
+new_ovf_config TEXT;
 BEGIN
  OPEN curs_vmids;
  OPEN curs_newovfgen;
+ OPEN curs_newovfdata;
 LOOP
     FETCH curs_vmids INTO id;
     FETCH curs_newovfgen INTO new_ovf_gen;
+    FETCH curs_newovfdata INTO new_ovf_config;
     IF NOT FOUND THEN
      EXIT;
     END IF;
     UPDATE vm_ovf_generations
-    SET ovf_generation = new_ovf_gen WHERE vm_guid = id;
+    SET ovf_generation = new_ovf_gen, ovf_data = new_ovf_config WHERE vm_guid 
= id;
 END LOOP;
 CLOSE curs_vmids;
 CLOSE curs_newovfgen;
+CLOSE curs_newovfdata;
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -30,6 +35,18 @@
 
 
 
+Create or replace FUNCTION LoadOvfDataForIds(v_ids VARCHAR(5000)) RETURNS 
SETOF vm_ovf_generations STABLE
+   AS $procedure$
+BEGIN
+RETURN QUERY SELECT *
+   FROM vm_ovf_generations ovf
+   WHERE ovf.vm_guid IN (SELECT * FROM fnSplitterUuid(v_ids));
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+
 
 Create or replace FUNCTION GetIdsForOvfDeletion(v_storage_pool_id UUID) 
RETURNS SETOF UUID STABLE
    AS $procedure$


-- 
To view, visit http://gerrit.ovirt.org/23563
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic891429a2a7d055fbd1927e878ae7e0f8b7c9fd9
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Liron Ar <lara...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to