Liran Zelkha has uploaded a new change for review.

Change subject: core: Allow decreasing a cluster compatability version
......................................................................

core: Allow decreasing a cluster compatability version

Under some circumstences a cluster can decrease a compatability version.
This patch supports this.

Change-Id: I2a8f52c63a82871e4ac1847f0414c82095f43075
Bug-Url: https://bugzilla.redhat.com/1076555
Signed-off-by: lzel...@redhat.com <lzel...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommandTest.java
3 files changed, 61 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/26940/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
index 587245a..20d1251 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
@@ -173,13 +173,22 @@
             
addCanDoActionMessage(VersionSupport.getUnsupportedVersionMessage());
             result = false;
         }
-        // decreasing of compatibility version is not allowed
+
+        if (result) {
+            allForVdsGroup = getVdsDAO().getAllForVdsGroup(oldGroup.getId());
+        }
+        
+        // decreasing of compatibility version is only allowed when no hosts 
exists, and not beneath the DC version
         if (result && 
getVdsGroup().getcompatibility_version().compareTo(oldGroup.getcompatibility_version())
 < 0) {
-            result = false;
-            getReturnValue()
-                    .getCanDoActionMessages()
-                    
.add(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION
-                            .toString());
+            if ((allForVdsGroup != null && allForVdsGroup.size() > 0)
+                    || (oldGroup.getStoragePoolId() != null && 
getVdsGroup().getcompatibility_version()
+                            
.compareTo(getStoragePoolDAO().get(oldGroup.getStoragePoolId()).getcompatibility_version())
 < 0)) {
+                result = false;
+                getReturnValue()
+                        .getCanDoActionMessages()
+                        
.add(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION
+                                .toString());
+            }
         }
         if (result && oldGroup.getStoragePoolId() != null
                 && 
!oldGroup.getStoragePoolId().equals(getVdsGroup().getStoragePoolId())) {
@@ -188,7 +197,6 @@
         }
         // If both original Cpu and new Cpu are null, don't check Cpu validity
         if (result) {
-            allForVdsGroup = getVdsDAO().getAllForVdsGroup(oldGroup.getId());
             allVdssInMaintenance = areAllVdssInMaintenance(allForVdsGroup);
         }
         // Validate the cpu only if the cluster supports Virt
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
index d061f82..10555c3 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
@@ -19,6 +19,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.common.action.VdsGroupOperationParameters;
 import org.ovirt.engine.core.common.businessentities.ArchitectureType;
@@ -129,7 +130,7 @@
         createCommandWithDefaultVdsGroup();
         cpuExists();
         cpuManufacturersDontMatch();
-        vdsGroupHasVds();
+        clusterHasVds();
         
canDoActionFailedWithReason(VdcBllMessages.VDS_GROUP_CANNOT_UPDATE_CPU_ILLEGAL);
     }
 
@@ -142,8 +143,31 @@
     }
 
     @Test
-    public void versionDecrease() {
+    public void versionDecreaseWithHost() {
         createCommandWithOlderVersion();
+        cpuExists();
+        cpuManufacturersMatch();
+        VdsExist();
+        
canDoActionFailedWithReason(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION);
+    }
+
+    @Test
+    public void versionDecreaseNoHostsOrNetwork() {
+        createCommandWithOlderVersion();
+        cpuExists();
+        cpuManufacturersMatch();
+        StoragePoolDAO storagePoolDAO2 = Mockito.mock(StoragePoolDAO.class);
+        
when(storagePoolDAO2.get(any(Guid.class))).thenReturn(createStoragePoolLocalFS());
+        doReturn(storagePoolDAO2).when(cmd).getStoragePoolDAO();
+        assertTrue(cmd.canDoAction());
+    }
+
+    @Test
+    public void versionDecreaseLowerVersionThanDC() {
+        createCommandWithOlderVersion();
+        StoragePoolDAO storagePoolDAO2 = Mockito.mock(StoragePoolDAO.class);
+        
when(storagePoolDAO2.get(any(Guid.class))).thenReturn(createStoragePoolLocalFSOldVersion());
+        doReturn(storagePoolDAO2).when(cmd).getStoragePoolDAO();
         cpuExists();
         cpuManufacturersMatch();
         
canDoActionFailedWithReason(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION);
@@ -239,7 +263,7 @@
     }
 
     @Test
-    public void vdsGroupWithVirtGlusterNotSupported() {
+    public void vdspysGroupWithVirtGlusterNotSupported() {
         createCommandWithGlusterEnabled();
         
when(vdsGroupDAO.get(any(Guid.class))).thenReturn(createVdsGroupWithNoCpuName());
         
when(vdsGroupDAO.getByName(anyString())).thenReturn(createVdsGroupWithNoCpuName());
@@ -398,6 +422,7 @@
     private static VDSGroup createVdsGroupWithOlderVersion() {
         VDSGroup group = createNewVdsGroup();
         group.setcompatibility_version(VERSION_1_0);
+        group.setStoragePoolId(STORAGE_POOL_ID);
         return group;
     }
 
@@ -421,6 +446,13 @@
         return group;
     }
 
+    private static StoragePool createStoragePoolLocalFSOldVersion() {
+        StoragePool pool = new StoragePool();
+        pool.setIsLocal(true);
+        pool.setcompatibility_version(VERSION_1_2);
+        return pool;
+    }
+
     private static StoragePool createStoragePoolLocalFS() {
         StoragePool pool = new StoragePool();
         pool.setIsLocal(true);
@@ -442,7 +474,7 @@
         
when(vdsGroupDAO.getAllForStoragePool(any(Guid.class))).thenReturn(groupList);
     }
 
-    private void VdsExistWithHigherVersion() {
+    private void VdsExist() {
         VDS vds = new VDS();
         vds.setStatus(VDSStatus.Up);
         List<VDS> vdsList = new ArrayList<VDS>();
@@ -450,14 +482,17 @@
         when(vdsDAO.getAllForVdsGroup(any(Guid.class))).thenReturn(vdsList);
     }
 
-    private void allQueriesForVms() {
-        
when(vmDao.getAllForVdsGroup(any(Guid.class))).thenReturn(Collections.<VM> 
emptyList());
+    private void VdsExistWithHigherVersion() {
+        VDS vds = new VDS();
+        vds.setStatus(VDSStatus.Up);
+        vds.setVdsGroupCompatibilityVersion(VERSION_1_2);
+        List<VDS> vdsList = new ArrayList<VDS>();
+        vdsList.add(vds);
+        when(vdsDAO.getAllForVdsGroup(any(Guid.class))).thenReturn(vdsList);
     }
 
-    private void vdsGroupHasVds() {
-        List<VDS> vdsList = new ArrayList<VDS>();
-        vdsList.add(new VDS());
-        when(vdsDAO.getAllForVdsGroup(any(Guid.class))).thenReturn(vdsList);
+    private void allQueriesForVms() {
+        
when(vmDao.getAllForVdsGroup(any(Guid.class))).thenReturn(Collections.<VM> 
emptyList());
     }
 
     private void clusterHasVds() {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommandTest.java
index 3c9d873..be1d476 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommandTest.java
@@ -3,8 +3,8 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;


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

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

Reply via email to