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