Liron Aravot has uploaded a new change for review.

Change subject: core: OVFs that aren't stored on any domain should be stored on 
all
......................................................................

core: OVFs that aren't stored on any domain should be stored on all

When the VM/Template has no non shareable image disks, its OVF file won't be
stored on any domain. This patches changes this behavior by storing
those OVFs on all the domains.

Change-Id: Iaeecc6c4526800656315842384d83830fdf0b72b
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1138134
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
M packaging/dbscripts/storages_sp.sql
M packaging/dbscripts/vms_sp.sql
8 files changed, 59 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/34292/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
index 5e369d3..f1b8651 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java
@@ -200,6 +200,8 @@
                         false,
                         false);
 
+        
vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(false,
 false));
+
         byte[] bytes = buildOvfInfoFileByteArray(vmAndTemplatesIds);
 
         Pair<StorageDomainOvfInfo, DiskImage> lastOvfStoreForUpdate = 
domainOvfStoresInfoForUpdate.getLast();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java
index 4770c88..d22ca69 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java
@@ -47,6 +47,7 @@
     private HashSet<Guid> proccessedDomains;
     private List<Guid> removedOvfIdsInfo;
     private OvfUpdateProcessHelper ovfUpdateProcessHelper;
+    private List<Guid> activeDataDomainsIds;
 
     public ProcessOvfUpdateForStoragePoolCommand(T parameters) {
         this(parameters, null);
@@ -56,6 +57,7 @@
         super(parameters, commandContext);
         setStoragePoolId(parameters.getStoragePoolId());
         ovfUpdateProcessHelper = new OvfUpdateProcessHelper();
+        activeDataDomainsIds = new LinkedList<>();
     }
 
     protected OvfUpdateProcessHelper getOvfUpdateProcessHelper() {
@@ -123,6 +125,7 @@
                 continue;
             }
 
+            activeDataDomainsIds.add(domain.getId());
             Integer ovfStoresCountForDomain = Config.<Integer> 
getValue(ConfigValues.StorageDomainOvfStoreCount);
             List<StorageDomainOvfInfo> storageDomainOvfInfos = 
getStorageDomainOvfInfoDAO().getAllForDomain(domain.getId());
 
@@ -339,6 +342,11 @@
     }
 
     protected void proccessDisksDomains(List<DiskImage> disks) {
+        if (disks.isEmpty()) {
+            proccessedDomains.addAll(activeDataDomainsIds);
+            return;
+        }
+
         for (DiskImage disk : disks) {
             proccessedDomains.addAll(disk.getStorageIds());
         }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java
index b2726ed..77e8c12 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java
@@ -94,6 +94,13 @@
     public void remove(Guid id, boolean removePermissions);
 
     /**
+     * Retrieves all ids of vms and templates that have no attached disks 
matching the provided criteria.
+     * @param shareableDisks  check for attached shareable disks
+     * @param snapshotDisks   check for attached snapshotdisks
+     */
+    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean 
shareableDisks, boolean snapshotDisks);
+
+    /**
      * update vm_static.cpu_profile_id for cluster
      *
      * @param clusterId
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
index 4011b2f..32aa57f 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java
@@ -64,6 +64,15 @@
                         .addValue("remove_permissions", removePermissions));
     }
 
+
+    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean 
shareableDisks, boolean snapshotDisks) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("active", !snapshotDisks)
+                .addValue("shareable", shareableDisks);
+        return 
getCallsHandler().executeReadList("GetVmAndTemplatesIdsWithoutAttachedImageDisks",
+                createGuidMapper(), parameterSource);
+    }
+
     @Override
     protected MapSqlParameterSource createIdParameterMapper(Guid id) {
         return getCustomMapSqlParameterSource().addValue("vm_guid", id);
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
index 981372d..20c195f 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
@@ -253,6 +253,10 @@
      */
     protected static final Guid VM_TEMPLATE_RHEL6_2 = new 
Guid("1b85420c-b84c-4f29-997e-0eb674b40b82");
 
+    protected static final Guid VM_TEMPLATE_WITHOUT_DISKS = new 
Guid("1b85420c-b84c-4f29-997e-0eb674b40b80");
+
+    protected static final Guid VM_WITHOUT_DISKS = new 
Guid("77296e00-0cad-4e5a-9299-008a7b6f4356");
+
     /**
      * Predefined template version for testing with the following properties :
      * <ul>
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
index 933119d..1537499 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
@@ -204,6 +204,16 @@
         assertEquals("vm permissions changed during remove although shouldnt 
have.", numberOfPermissionsBeforeRemove, 
permissionsDao.getAllForEntity(EXISTING_VM_ID).size());
     }
 
+
+    @Test
+    public void getVmAndTemplatesIdsWithoutAttachedImageDisks() {
+        List<Guid> ids =
+                dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(false, 
false);
+        assertTrue(ids.contains(FixturesTool.VM_WITHOUT_DISKS));
+        assertTrue(ids.contains(FixturesTool.VM_TEMPLATE_WITHOUT_DISKS));
+        assertFalse(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5));
+    }
+
     @Test
     public void testGetAllNamesPinnedToHostReturnsNothingForRandomHost() 
throws Exception {
         assertTrue(dao.getAllNamesPinnedToHost(Guid.newGuid()).isEmpty());
diff --git a/packaging/dbscripts/storages_sp.sql 
b/packaging/dbscripts/storages_sp.sql
index 8ce7d4d..e9a79a4 100644
--- a/packaging/dbscripts/storages_sp.sql
+++ b/packaging/dbscripts/storages_sp.sql
@@ -279,6 +279,7 @@
 
 
 
+
 Create or replace FUNCTION Getstorage_poolsByVdsId(v_vdsId UUID)
 RETURNS SETOF storage_pool STABLE
    AS $procedure$
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 9892e54..c11247d 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -593,6 +593,24 @@
 
 
 
+Create or replace FUNCTION 
GetVmAndTemplatesIdsWithoutAttachedImageDisks(v_shareable BOOLEAN, v_active 
BOOLEAN)
+RETURNS SETOF UUID STABLE
+   AS $procedure$
+BEGIN
+      RETURN QUERY SELECT vs.vm_guid
+      FROM vm_static vs
+      WHERE vs.vm_guid NOT IN (SELECT DISTINCT vd.vm_id
+                               FROM vm_device vd INNER JOIN 
images_storage_domain_view i
+                               ON i.image_group_id = vd.device_id
+                               WHERE i.active = v_active AND i.shareable = 
v_shareable);
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+
+
+
 Create or replace FUNCTION UpdateVmStatic(v_description VARCHAR(4000) ,
  v_free_text_comment text,
  v_mem_size_mb INTEGER,


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

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

Reply via email to