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.
  Note: Creating a domain by a host not attached to a pool is currently
  NOT supported. This patch does not change that behavior, nor does it
  handle this situation.
- 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/common/src/main/java/org/ovirt/engine/core/common/businessentities/StorageDomainStatic.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
4 files changed, 23 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/31348/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 4669d92..0c9fdf1 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
@@ -24,6 +24,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;
@@ -158,17 +159,34 @@
             returnValue = false;
         }
 
+        ensureStorageFormatInitialized();
         boolean isSupportedStorageFormat =
                 isStorageFormatSupportedByStoragePool() && 
isStorageFormatCompatibleWithDomain();
         if (returnValue && !isSupportedStorageFormat) {
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_FORMAT_ILLEGAL_HOST);
             getReturnValue().getCanDoActionMessages().add(
-                    String.format("$storageFormat %1$s", 
getStorageDomain().getStorageFormat().toString()));
+                    String.format("$storageFormat %1$s", 
getStorageDomain().getStorageFormat()));
             returnValue = false;
         }
         return returnValue && canAddDomain();
     }
 
+    private void ensureStorageFormatInitialized() {
+        StorageDomain sd = getStorageDomain();
+        if (sd.getStorageFormat() == null) {
+            if (sd.getStorageDomainType().isDataDomain()) {
+                StoragePool sp = getTargetStoragePool();
+                if (sp != null) {
+                    
sd.setStorageFormat(VersionStorageFormatUtil.getPreferredForVersion(
+                            sp.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/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 = "";
     }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
index 7c9a84c..ef415f6 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDynamicDAOTest.java
@@ -9,6 +9,7 @@
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
+import org.ovirt.engine.core.common.businessentities.StorageFormatType;
 import org.ovirt.engine.core.compat.Guid;
 
 public class StorageDomainDynamicDAOTest extends BaseDAOTestCase {
@@ -32,6 +33,7 @@
 
         newStaticDomain = new StorageDomainStatic();
         newStaticDomain.setStorage("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePl");
+        newStaticDomain.setStorageFormat(StorageFormatType.V1);
         newDynamicDomain = new StorageDomainDynamic();
         newDynamicDomain.setAvailableDiskSize(USED_DISK_SIZE);
     }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
index 58d370d..31e372d 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainStaticDAOTest.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
+import org.ovirt.engine.core.common.businessentities.StorageFormatType;
 import org.ovirt.engine.core.compat.Guid;
 
 public class StorageDomainStaticDAOTest extends BaseDAOTestCase {
@@ -39,6 +40,7 @@
         newStaticDomain = new StorageDomainStatic();
         newStaticDomain.setStorageName("NewStorageDomain");
         newStaticDomain.setStorage("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePl");
+        newStaticDomain.setStorageFormat(StorageFormatType.V1);
     }
 
     /**


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If469bb655e9a65e2d0afcee164655fa0bdfa5d99
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Allon Mureinik <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to