Liron Aravot has uploaded a new change for review.

Change subject: core: Validate maximum number of hosts in DC.(#771699)
......................................................................

core: Validate maximum number of hosts in DC.(#771699)

http://bugzilla.redhat.com/show_bug.cgi?id=771699

when a host is added, there should be a check whether the maximum number
of
hosts attached to DC has been exceeded.

If max number of hosts is exceeded, user should be presented with an
appropriate message.

Change-Id: If375400f3e12e3e0452053dea12ac6e28bc0ff61
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
M backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
5 files changed, 51 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/8321/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java
index 03e3c10..c110804 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsSpmIdCommand.java
@@ -6,6 +6,10 @@
 
 import org.ovirt.engine.core.common.action.VdsActionParameters;
 import org.ovirt.engine.core.common.businessentities.vds_spm_id_map;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import org.ovirt.engine.core.common.errors.VdcFault;
 import org.ovirt.engine.core.common.locks.LockingGroup;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@@ -13,8 +17,9 @@
 import org.ovirt.engine.core.utils.linq.LinqUtils;
 
 @InternalCommandAttribute
-@LockIdNameAttribute(isWait=true)
+@LockIdNameAttribute(isWait = true)
 public class AddVdsSpmIdCommand<T extends VdsActionParameters> extends 
VdsCommand<T> {
+    private List<vds_spm_id_map> vds_spm_id_mapList;
 
     /**
      * Constructor for command creation when compensation is applied on startup
@@ -31,17 +36,29 @@
 
     @Override
     protected boolean canDoAction() {
-        return !Guid.Empty.equals(getVds().getstorage_pool_id())
-                && DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) 
== null;
+        // check if vds already has vds spm id and storage pool exists
+        if (Guid.Empty.equals(getVds().getstorage_pool_id())) {
+            return false;
+        }
+        vds_spm_id_mapList = DbFacade.getInstance().getVdsSpmIdMapDao().getAll(
+                getVds().getstorage_pool_id());
+        if (vds_spm_id_mapList.size() >= Config.<Integer> 
GetValue(ConfigValues.MaxNumberOfHostsInStoragePool)) {
+            VdcFault fault = new VdcFault();
+            fault.setError(VdcBllErrors.ReachedMaxNumberOfHostsInDC);
+            fault.setMessage(Backend.getInstance()
+                    .getVdsErrorsTranslator()
+                    .TranslateErrorTextSingle(fault.getError().toString()));
+            getReturnValue().setFault(fault);
+            return false;
+        }
+        return true;
     }
 
     @Override
     protected void executeCommand() {
         // according to shaharf the first id is 1
         int selectedId = 1;
-        List<vds_spm_id_map> list = 
DbFacade.getInstance().getVdsSpmIdMapDao().getAll(
-                getVds().getstorage_pool_id());
-        List<Integer> map = LinqUtils.foreach(list, new 
Function<vds_spm_id_map, Integer>() {
+        List<Integer> map = LinqUtils.foreach(vds_spm_id_mapList, new 
Function<vds_spm_id_map, Integer>() {
             @Override
             public Integer eval(vds_spm_id_map vds_spm_id_map) {
                 return vds_spm_id_map.getvds_spm_id();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java
index 028d65d..eaad375 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVDSClusterCommand.java
@@ -111,6 +111,7 @@
             setSucceeded(true);
             return;
         }
+
         // save the new cluster id
         TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
             @Override
@@ -123,6 +124,20 @@
                 return null;
             }
         });
+
+        if (targetStoragePool != null
+                && (getSourceCluster().getstorage_pool_id()== null || 
!targetStoragePool.getId().equals(getSourceCluster().getstorage_pool_id().getValue())))
 {
+            VdcReturnValueBase addVdsSpmIdReturn =
+                    
Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId,
+                            getParameters(),
+                            new CommandContext(getCompensationContext()));
+            if (!addVdsSpmIdReturn.getSucceeded()) {
+                setSucceeded(false);
+                getReturnValue().setFault(addVdsSpmIdReturn.getFault());
+                return;
+            }
+        }
+
 
         if (getSourceCluster().supportsGlusterService() && 
getClusterUtils().hasServers(getSourceCluster().getId())) {
             if (!glusterHostRemove(getSourceCluster().getId())) {
@@ -140,7 +155,8 @@
         // handle spm
         getParameters().setCompensationEnabled(true);
         
getParameters().setTransactionScopeOption(TransactionScopeOption.RequiresNew);
-        if (getSourceCluster().getstorage_pool_id() != null) {
+        if (getSourceCluster().getstorage_pool_id() != null
+                && (targetStoragePool== null || 
!getSourceCluster().getstorage_pool_id().getValue().equals(targetStoragePool.getId())))
 {
             VdcReturnValueBase removeVdsSpmIdReturn =
                     
Backend.getInstance().runInternalAction(VdcActionType.RemoveVdsSpmId,
                             getParameters(),
@@ -152,17 +168,6 @@
             }
         }
 
-        if (targetStoragePool != null) {
-            VdcReturnValueBase addVdsSpmIdReturn =
-                    
Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId,
-                            getParameters(),
-                            new CommandContext(getCompensationContext()));
-            if (!addVdsSpmIdReturn.getSucceeded()) {
-                setSucceeded(false);
-                getReturnValue().setFault(addVdsSpmIdReturn.getFault());
-                return;
-            }
-        }
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
index 7c2e689..3d53178 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
@@ -60,6 +60,15 @@
                 && getVdsGroup().getstorage_pool_id() != null) {
             for (VdsStatic vds : 
getVdsStaticDAO().getAllForVdsGroup(oldGroup.getId())) {
                 VdsActionParameters parameters = new 
VdsActionParameters(vds.getId());
+                if (getVdsGroup().getstorage_pool_id() != null) {
+                    VdcReturnValueBase addVdsSpmIdReturn =
+                            
getBackend().runInternalAction(VdcActionType.AddVdsSpmId, parameters);
+                    if (!addVdsSpmIdReturn.getSucceeded()) {
+                        setSucceeded(false);
+                        
getReturnValue().setFault(addVdsSpmIdReturn.getFault());
+                        return;
+                    }
+                }
                 if (oldGroup.getstorage_pool_id() != null) {
                     VdcReturnValueBase removeVdsSpmIdReturn =
                             
getBackend().runInternalAction(VdcActionType.RemoveVdsSpmId,
@@ -67,15 +76,6 @@
                     if (!removeVdsSpmIdReturn.getSucceeded()) {
                         setSucceeded(false);
                         
getReturnValue().setFault(removeVdsSpmIdReturn.getFault());
-                        return;
-                    }
-                }
-                if (getVdsGroup().getstorage_pool_id() != null) {
-                    VdcReturnValueBase addVdsSpmIdReturn =
-                            
getBackend().runInternalAction(VdcActionType.AddVdsSpmId, parameters);
-                    if (!addVdsSpmIdReturn.getSucceeded()) {
-                        setSucceeded(false);
-                        
getReturnValue().setFault(addVdsSpmIdReturn.getFault());
                         return;
                     }
                 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
index d5a3492..fb4fe2a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
@@ -306,6 +306,7 @@
     ImportInfoError(801),
     ImportUnknownType(802),
     ExportError(803),
+    ReachedMaxNumberOfHostsInDC(804),
     ResourceNamespaceNotEmpty(850),
     ResourceTimeout(851),
     ResourceDoesNotExist(852),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
index fb309e7..92036ad 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/VdsmErrors.properties
@@ -237,6 +237,7 @@
 CannotRetrieveSpmStatus=Cannot retrieve SPM status, master domain probably 
unavailable
 FileStorageDomainStaleNFSHandle=Stale NFS handle on underlying NFS server
 InvalidJob=Job is invalid
+ReachedMaxNumberOfHostsInDC=The maximum number of Hosts allowed in the Data 
Center has been reached
 InvalidPhysDev=Invalid physical device
 PartitionedPhysDev=Partitioned physical device
 InvalidRecovery=Recovery is invalid


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

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

Reply via email to