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