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

Reply via email to