Allon Mureinik has uploaded a new change for review. Change subject: core: Calculate storage format when adding an SD ......................................................................
core: Calculate storage format when adding an SD Removed the default V1 format from StorageDomainStatic's constructor so it can be calculated when adding a domain without specifying the format via REST. The logic goes as follows: - If the format is specified (as is the case in all the edit scenarios as well as when adding a new domain via the GUI), leave it alone - If it's a data domain, set the format to the format required by the pool's version. - If it's not a data domain, use V1 (i.e., preserve the old behavior). Change-Id: If469bb655e9a65e2d0afcee164655fa0bdfa5d99 Bug-Url: https://bugzilla.redhat.com/1120712 Signed-off-by: Allon Mureinik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddNFSStorageDomainCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java 3 files changed, 40 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/30960/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java index d7f0b2c..463712c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddStorageDomainCommand.java @@ -23,6 +23,7 @@ import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.errors.VdcFault; import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.common.utils.VersionStorageFormatUtil; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.vdscommands.CreateStorageDomainVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.GetStorageDomainStatsVDSCommandParameters; @@ -150,6 +151,8 @@ if (getStorageDomain().getStorageDomainType() == StorageDomainType.Master) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_ILLEGAL); } + + ensureStorageFormatInitialized(); if (!isStorageFormatSupportedByStoragePool() || !isStorageFormatCompatibleWithDomain()) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST); getReturnValue().getCanDoActionMessages().add( @@ -159,6 +162,19 @@ return canAddDomain(); } + private void ensureStorageFormatInitialized() { + StorageDomain sd = getStorageDomain(); + if (sd.getStorageFormat() == null) { + if (sd.getStorageDomainType().isDataDomain()) { + sd.setStorageFormat(VersionStorageFormatUtil.getPreferredForVersion( + getTargetStoragePool().getcompatibility_version(), sd.getStorageType()) + ); + } else { + sd.setStorageFormat(StorageFormatType.V1); + } + } + } + private boolean isStorageFormatSupportedByStoragePool() { StorageFormatType storageFormat = getStorageDomain().getStorageFormat(); StoragePool targetStoragePool = getTargetStoragePool(); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddNFSStorageDomainCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddNFSStorageDomainCommandTest.java index 1348a33..1e26408 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddNFSStorageDomainCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/storage/AddNFSStorageDomainCommandTest.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll.storage; +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -111,6 +112,29 @@ } @Test + public void canDoActionSucceedsInitFormatDataDomain() { + sd.setStorageFormat(null); + CanDoActionTestUtils.runAndAssertCanDoActionSuccess(cmd); + assertEquals("Format not initialized correctly", StorageFormatType.V3, sd.getStorageFormat()); + } + + @Test + public void canDoActionSucceedsInitFormatIsoDomain() { + sd.setStorageFormat(null); + sd.setStorageDomainType(StorageDomainType.ISO); + CanDoActionTestUtils.runAndAssertCanDoActionSuccess(cmd); + assertEquals("Format not initialized correctly", StorageFormatType.V1, sd.getStorageFormat()); + } + + @Test + public void canDoActionSucceedsInitFormatExportDomain() { + sd.setStorageFormat(null); + sd.setStorageDomainType(StorageDomainType.ImportExport); + CanDoActionTestUtils.runAndAssertCanDoActionSuccess(cmd); + assertEquals("Format not initialized correctly", StorageFormatType.V1, sd.getStorageFormat()); + } + + @Test public void canDoActionFailsNameExists() { when(sdsDao.getByName(sd.getName())).thenReturn(new StorageDomainStatic()); CanDoActionTestUtils.runAndAssertCanDoActionFailure diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java index 6ea385d..6c019b9 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java @@ -53,7 +53,6 @@ id = Guid.Empty; storageType = StorageDomainType.Master; storagePoolType = StorageType.UNKNOWN; - storageFormat = StorageFormatType.V1; autoRecoverable = true; name = ""; } -- To view, visit http://gerrit.ovirt.org/30960 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If469bb655e9a65e2d0afcee164655fa0bdfa5d99 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Allon Mureinik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
