Allon Mureinik has uploaded a new change for review.

Change subject: engine: Allow higher storage formats
......................................................................

engine: Allow higher storage formats

Do not fail attaching a domain if the storage format is too high
(As was present before change-id
I47fb8b14e5c97b601c8fc0cc296a4ec42a48227a).

Also add a distinction between block and file domain for V2.

Change-Id: Iaf7eb690f343b1cf8007a9d8b30a3ce22a6a57dc
Related-To: https://bugzilla.redhat.com/show_bug.cgi?id=950023
Signed-off-by: Allon Mureinik <amure...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtil.java
M 
backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtilTest.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
5 files changed, 54 insertions(+), 22 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/19193/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java
index cb0c649..eab61be 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStoragePoolWithStoragesCommand.java
@@ -155,8 +155,9 @@
                         final StorageDomainStatic staticDomain = 
storageDomain.getStorageStaticData();
                         boolean staticDomainChanged = false;
                         StorageFormatType requiredFormatType =
-                                
VersionStorageFormatUtil.getFormatForVersion(getStoragePool().getcompatibility_version());
-                        if (staticDomain.getStorageFormat() != 
requiredFormatType) {
+                                VersionStorageFormatUtil.getFormatForVersion
+                                        
(getStoragePool().getcompatibility_version(), 
getStoragePool().getStorageType());
+                        if 
(staticDomain.getStorageFormat().compareTo(requiredFormatType) < 0) {
                             if (!staticDomainChanged) {
                                 
getCompensationContext().snapshotEntity(staticDomain);
                             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
index f7e0147..144f451 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
@@ -97,12 +97,8 @@
             return;
         }
 
-        final StorageFormatType targetFormat = 
VersionStorageFormatUtil.getFormatForVersion(spVersion);
         StorageType spType = storagePool.getStorageType();
-        if (targetFormat == StorageFormatType.V2 && !spType.isBlockDomain()) {
-            // There is no format V2 for domains that aren't ISCSI/FCP
-            return;
-        }
+        final StorageFormatType targetFormat = 
VersionStorageFormatUtil.getFormatForVersion(spVersion, spType);
 
         storagePool.setStoragePoolFormatType(targetFormat);
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtil.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtil.java
index 7fb844b..fb37cbe 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtil.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtil.java
@@ -4,23 +4,52 @@
 import java.util.Map;
 
 import org.ovirt.engine.core.common.businessentities.StorageFormatType;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.compat.Version;
 
 /**
  * A utility function to match between {@link Version}s and {@link 
StorageFormatType}s
  */
 public class VersionStorageFormatUtil {
-    private static final Map<Version, StorageFormatType> versionToFormat = new 
HashMap<Version, StorageFormatType>() {
-        {
-            put(Version.v2_2, StorageFormatType.V1);
-            put(Version.v3_0, StorageFormatType.V2); // Only relevant for 
block domains
-            put(Version.v3_1, StorageFormatType.V3);
-            put(Version.v3_2, StorageFormatType.V3);
-            put(Version.v3_3, StorageFormatType.V3);
-        }
-    };
+    private interface StorageFormatTypeMapper {
+        StorageFormatType forStorage(StorageType t);
+    }
 
-    public static StorageFormatType getFormatForVersion(Version v) {
-        return versionToFormat.get(v);
+    private static class ConstantStorageFormatTypeMapper implements 
StorageFormatTypeMapper {
+        private StorageFormatType formatType;
+
+        ConstantStorageFormatTypeMapper(StorageFormatType formatType) {
+            this.formatType = formatType;
+        }
+
+        @Override
+        public StorageFormatType forStorage(StorageType t) {
+            return formatType;
+        }
+    }
+
+    private static class V2FormatTypeMapper implements StorageFormatTypeMapper 
{
+        @Override
+        public StorageFormatType forStorage(StorageType t) {
+            if (t.isBlockDomain()) {
+                return StorageFormatType.V2;
+            }
+            return StorageFormatType.V1;
+        }
+    }
+
+    private static final Map<Version, StorageFormatTypeMapper> versionToFormat 
=
+            new HashMap<Version, StorageFormatTypeMapper>() {
+                {
+                    put(Version.v2_2, new 
ConstantStorageFormatTypeMapper(StorageFormatType.V1));
+                    put(Version.v3_0, new V2FormatTypeMapper());
+                    put(Version.v3_1, new 
ConstantStorageFormatTypeMapper(StorageFormatType.V3));
+                    put(Version.v3_2, new 
ConstantStorageFormatTypeMapper(StorageFormatType.V3));
+                    put(Version.v3_3, new 
ConstantStorageFormatTypeMapper(StorageFormatType.V3));
+                }
+            };
+
+    public static StorageFormatType getFormatForVersion(Version v, StorageType 
type) {
+        return versionToFormat.get(v).forStorage(type);
     }
 }
diff --git 
a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtilTest.java
 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtilTest.java
index c8096fa..89efe35 100644
--- 
a/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtilTest.java
+++ 
b/backend/manager/modules/common/src/test/java/org/ovirt/engine/core/common/utils/VersionStorageFormatUtilTest.java
@@ -6,6 +6,7 @@
 import org.junit.experimental.theories.Theories;
 import org.junit.experimental.theories.Theory;
 import org.junit.runner.RunWith;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.compat.Version;
 
 /**
@@ -17,8 +18,12 @@
     @DataPoints
     public static final Version[] versions = Version.ALL.toArray(new 
Version[Version.ALL.size()]);
 
+    @DataPoints
+    public static final StorageType[] types = StorageType.values();
+
     @Theory
-    public void versionHasMatchingFormat(Version v) {
-        assertNotNull("Missing format for version " + v, 
VersionStorageFormatUtil.getFormatForVersion(v));
+    public void versionHasMatchingFormat(Version v, StorageType t) {
+        assertNotNull(String.format("Missing format for version %s in type 
%s", v, t),
+                VersionStorageFormatUtil.getFormatForVersion(v, t));
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
index 196ad88..88ce75e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/DataCenterListModel.java
@@ -616,8 +616,9 @@
                     .changeDataCenterCompatibilityVersionTitle());
             
confirmModel.setHashName("change_data_center_compatibility_version"); 
//$NON-NLS-1$
 
-            StorageFormatType newFormat = 
VersionStorageFormatUtil.getFormatForVersion((Version) 
model.getVersion().getSelectedItem());
-            StorageFormatType oldFormat = 
VersionStorageFormatUtil.getFormatForVersion(((StoragePool) 
getSelectedItem()).getcompatibility_version());
+            StoragePool sp = (StoragePool) getSelectedItem();
+            StorageFormatType newFormat = 
VersionStorageFormatUtil.getFormatForVersion((Version) 
model.getVersion().getSelectedItem(), sp.getStorageType());
+            StorageFormatType oldFormat = 
VersionStorageFormatUtil.getFormatForVersion(sp.getcompatibility_version(), 
sp.getStorageType());
             if (newFormat == oldFormat) {
                 confirmModel.setMessage(ConstantsManager.getInstance()
                         .getConstants()


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

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

Reply via email to