Liron Aravot has uploaded a new change for review.

Change subject: core: Upload only the DC diskless VMs/Templates to OVF stores
......................................................................

core: Upload only the DC diskless VMs/Templates to OVF stores

Since change Iaeecc6c4 OVF data of diskless VMs/Templates is uploaded to
all the DC domain.
The problem with that change is that the loaded VMs/Templates aren't
only for that data center - which is fixed in this change.

Change-Id: Ic51689cdf0479548c8c4be1267d478fcb8f89de0
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/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/VmDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M packaging/dbscripts/vms_sp.sql
8 files changed, 118 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/36098/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 ffb7fff..f9fed74 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
@@ -221,7 +221,7 @@
                         false,
                         false);
 
-        
vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(false));
+        
vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(getParameters().getStoragePoolId(),
 false));
 
         byte[] bytes = buildOvfInfoFileByteArray(vmAndTemplatesIds);
 
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 8dbab0d..d06383d 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
@@ -95,9 +95,13 @@
 
     /**
      * Retrieves all the ids of the vms and templates that have no attached 
disks matching the provided criteria.
-     * @param shareableDisks  check for attached shareable disks
+     *
+     * @param storagePoolId
+     *            the storage pool id of the vms/templates
+     * @param shareableDisks
+     *            check for attached shareable disks
      */
-    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean 
shareableDisks);
+    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid 
storagePoolId, boolean shareableDisks);
 
     /**
      * update vm_static.cpu_profile_id for cluster
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 c4677ca..bd27aa1 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
@@ -58,8 +58,9 @@
     }
 
 
-    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean 
shareableDisks) {
+    public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid 
storagePoolId, boolean shareableDisks) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("storage_pool_id", storagePoolId)
                 .addValue("shareable", shareableDisks);
         return 
getCallsHandler().executeReadList("GetVmsAndTemplatesIdsWithoutAttachedImageDisks",
                 createGuidMapper(), parameterSource);
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
index f5f08dc..5f1aa1f 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
@@ -22,7 +22,7 @@
 import org.ovirt.engine.core.compat.Guid;
 
 public class VmDAOTest extends BaseDAOTestCase {
-    private static final int VM_COUNT = 7;
+    private static final int VM_COUNT = 8;
     private VmDAO dao;
     private VM existingVm;
     private VmStatic newVmStatic;
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java
index 0fa46cc..4860c6a 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java
@@ -19,8 +19,6 @@
     private static final int DYNAMIC_RUNNING_COUNT = 3;
     private VmDynamicDAO dao;
     private VmDynamic existingVm;
-    private Guid existingStaticGuidVm =  new 
Guid("77296e00-0cad-4e5a-9299-008a7b6f4357");
-    private VmDynamic newVmDynamic;
 
     @Override
     public void setUp() throws Exception {
@@ -28,8 +26,6 @@
         dao = dbFacade.getVmDynamicDao();
         existingVm = dao.get(new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355"));
         existingVm.setStatus(VMStatus.Up);
-
-        newVmDynamic = new VmDynamic();
     }
 
     /**
@@ -76,12 +72,12 @@
 
     @Test
     public void testSave() {
-        newVmDynamic.setId(existingStaticGuidVm);
-        dao.save(newVmDynamic);
-        VmDynamic vmdynamic = dao.get(newVmDynamic.getId());
+        dao.remove(existingVm.getId());
+        dao.save(existingVm);
+        VmDynamic vmdynamic = dao.get(existingVm.getId());
 
         assertNotNull(vmdynamic);
-        assertEquals(vmdynamic, newVmDynamic);
+        assertEquals(vmdynamic, existingVm);
     }
 
     /**
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 e105a62..5dda644 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
@@ -10,6 +10,8 @@
 import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.commons.lang.NotImplementedException;
@@ -25,6 +27,8 @@
 import org.ovirt.engine.core.common.utils.ObjectUtils;
 import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author yzaslavs
@@ -35,7 +39,7 @@
     private static final Guid VDS_STATIC_ID = new 
Guid("afce7a39-8e8c-4819-ba9c-796d316592e6");
     private static final Guid VDS_GROUP_ID = new 
Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1");
     private static final Guid QUOTA_ID = new 
Guid("88296e00-0cad-4e5a-9291-008a7b7f4399");
-
+    protected Logger log = LoggerFactory.getLogger(getClass());
     private static final String STATIC_VM_NAME = "rhel5-pool-50";
     private static final int NUM_OF_VM_STATIC_IN_FIXTURES = 3;
 
@@ -208,19 +212,51 @@
         assertEquals("vm permissions changed during remove although shouldnt 
have.", numberOfPermissionsBeforeRemove, 
permissionsDao.getAllForEntity(EXISTING_VM_ID).size());
     }
 
+    private void checkDisks(Guid id, boolean hasDisks) {
+        assertEquals(hasDisks, 
!dbFacade.getDiskDao().getAllForVm(id).isEmpty());
+    }
+
+    private void checkVmsDcAndDisks(List<Guid> vmIds, Guid storagePoolId, 
boolean hasDisks) {
+        for (Guid vmId : vmIds) {
+            assertEquals(storagePoolId, 
dbFacade.getVmDao().get(vmId).getStoragePoolId());
+            checkDisks(vmId, hasDisks);
+        }
+    }
+
+    private void checkTemplatesDcAndDisks(List<Guid> templateIds, Guid 
storagePoolId, boolean hasDisks) {
+        for (Guid templateId : templateIds) {
+            assertEquals(storagePoolId, 
dbFacade.getVmTemplateDao().get(templateId).getStoragePoolId());
+            checkDisks(templateId, hasDisks);
+        }
+    }
 
     @Test
     public void getVmAndTemplatesIdsWithoutAttachedImageDisks() {
+        List<Guid> disklessVms = 
Arrays.asList(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, 
FixturesTool.VM_RHEL5_POOL_51);
+        List<Guid> disklessTemplates = 
Arrays.asList(FixturesTool.VM_TEMPLATE_RHEL5_2);
+        List<Guid> diskVms = Arrays.asList(FixturesTool.VM_RHEL5_POOL_57);
+        List<Guid> diskTemplates = 
Arrays.asList(FixturesTool.VM_TEMPLATE_RHEL5);
+
+        Guid dataCenterId = FixturesTool.DATA_CENTER;
+
+        checkTemplatesDcAndDisks(disklessTemplates, dataCenterId, false);
+        checkVmsDcAndDisks(disklessVms, dataCenterId, false);
+        checkTemplatesDcAndDisks(diskTemplates, dataCenterId, true);
+        checkVmsDcAndDisks(diskVms, dataCenterId, true);
+
         // attaching shareable and snapshots disk to a diskless vm
-        addVmDevice(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, 
FixturesTool.IMAGE_GROUP_ID_2, null);
-        addVmDevice(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, 
FixturesTool.DISK_ID, FixturesTool.EXISTING_SNAPSHOT_ID);
+        addVmDevice(disklessVms.get(0), FixturesTool.IMAGE_GROUP_ID_2, null);
+        addVmDevice(disklessVms.get(0), FixturesTool.DISK_ID, 
FixturesTool.EXISTING_SNAPSHOT_ID);
 
         List<Guid> ids =
-                dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(false);
-        assertTrue(ids.contains(FixturesTool.VM_RHEL5_POOL_51));
-        assertTrue(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5_2));
-        assertTrue(ids.contains(FixturesTool.VM_WITH_NO_ATTACHED_DISKS));
-        assertFalse(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5));
+                
dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(dataCenterId, false);
+
+        assertTrue(ids.containsAll(disklessVms));
+        assertTrue(ids.containsAll(disklessTemplates));
+        assertTrue(Collections.disjoint(ids, diskVms));
+        assertTrue(Collections.disjoint(ids, diskTemplates));
+
+        
assertTrue(dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid.newGuid(), 
false).isEmpty());
     }
 
     private void addVmDevice(Guid vmId, Guid diskId, Guid snapshotId) {
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index a113f54..b914703 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -3526,6 +3526,47 @@
             <value>1</value>
         </row>
         <row>
+            <value>77296e00-0cad-4e5a-9299-008a7b6f4357</value>
+            <value>0</value>
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <null />
+            <null /> <!-- console_user_id -->
+            <null />
+            <null />
+            <null />
+            <value>afce7a39-8e8c-4819-ba9c-796d316592e6</value>
+            <value></value>
+            <value>5900</value>
+            <value>1</value>
+            <value>0</value>
+            <value>0</value>
+            <value>0</value>
+            <value>1</value>
+            <value>-1</value>
+            <value>0</value>
+            <null />
+            <value></value>
+            <null />
+            <value>42058975-3d5e-484a-80c1-01c31207f578</value>
+            <value>0</value>
+            <value>0</value>
+            <value>0</value>
+            <null />
+            <null/>
+            <null/>
+            <null/>
+            <null/>
+            <value>-1</value>
+            <value>1</value>
+        </row>
+        <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4355</value>
             <value>5</value>
             <null />
@@ -3786,6 +3827,20 @@
             <null />
         </row>
         <row>
+            <value>77296e00-0cad-4e5a-9299-008a7b6f4357</value>
+            <value>17</value>
+            <value>0</value>
+            <value>267308</value>
+            <value>0</value>
+            <value>0</value>
+            <value>17</value>
+            <value>60</value>
+            <null />
+            <value>1,2,3</value>
+            <value>1,2,3</value>
+            <value>1,2,3</value>
+        </row>
+        <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4355</value>
             <value>17</value>
             <value>0</value>
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 163df69..50182a6 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -586,7 +586,7 @@
 
 
 
-Create or replace FUNCTION 
GetVmsAndTemplatesIdsWithoutAttachedImageDisks(v_shareable BOOLEAN)
+Create or replace FUNCTION 
GetVmsAndTemplatesIdsWithoutAttachedImageDisks(v_storage_pool_id UUID, 
v_shareable BOOLEAN)
 RETURNS SETOF UUID STABLE
    AS $procedure$
 BEGIN
@@ -597,7 +597,10 @@
                                INNER JOIN base_disks i
                                ON i.disk_id = vd.device_id
                                AND vd.snapshot_id IS NULL
-                               WHERE i.shareable = v_shareable);
+                               WHERE i.shareable = v_shareable)
+      AND vs.vds_group_id IN (SELECT vg.vds_group_id
+                              FROM vds_groups vg, storage_pool sp
+                              WHERE vg.storage_pool_id = v_storage_pool_id);
 END; $procedure$
 LANGUAGE plpgsql;
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic51689cdf0479548c8c4be1267d478fcb8f89de0
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
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