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