Liron Aravot has uploaded a new change for review.

Change subject: core: change vdsSpmId related command to support numerous vdss
......................................................................

core: change vdsSpmId related command to support numerous vdss

related to bug https://bugzilla.redhat.com/show_bug.cgi?id=771699

currently the different vdsSpmId commands support execution on one vds
at a time, which degrades performance. This patch change those commands
to support execution on numerous hosts at a time.

Change-Id: I7531b9edb763d32b96c58104385349d587de3416
Signed-off-by: Liron Aravot <lara...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
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/RemoveVdsSpmIdCommand.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/action/VdcActionType.java
6 files changed, 73 insertions(+), 55 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/77/8277/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
index 8251f2a..468089a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsCommand.java
@@ -21,6 +21,7 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
+import org.ovirt.engine.core.common.action.VdsSpmIdParameters;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -105,7 +106,7 @@
 
         // set vds spm id
         if (getVdsGroup().getstorage_pool_id() != null) {
-            VdsActionParameters tempVar = new 
VdsActionParameters(getVdsIdRef().getValue());
+            VdsSpmIdParameters tempVar = new 
VdsSpmIdParameters(Collections.singletonList(getParameters().getVdsStaticData()),
 getVdsGroup().getstorage_pool_id().getValue());
             tempVar.setSessionId(getParameters().getSessionId());
             tempVar.setCompensationEnabled(true);
             CompensationContext compensationContext = getCompensationContext();
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 0c36238..187ad98 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
@@ -4,7 +4,9 @@
 import java.util.List;
 import java.util.Map;
 
+import org.ovirt.engine.core.common.action.VdsSpmIdParameters;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
+import org.ovirt.engine.core.common.businessentities.VdsStatic;
 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;
@@ -18,7 +20,7 @@
 
 @InternalCommandAttribute
 @LockIdNameAttribute(isWait = true)
-public class AddVdsSpmIdCommand<T extends VdsActionParameters> extends 
VdsCommand<T> {
+public class AddVdsSpmIdCommand<T extends VdsSpmIdParameters> extends 
VdsCommand<T> {
     private List<vds_spm_id_map> vds_spm_id_mapList;
 
     /**
@@ -37,13 +39,13 @@
     @Override
     protected boolean canDoAction() {
         // check if vds already has vds spm id and storage pool exists
-        if (Guid.Empty.equals(getVds().getstorage_pool_id())
+        if (Guid.Empty.equals(getStoragePoolId())
                 || DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) 
!= null) {
             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)) {
+        if (vds_spm_id_mapList.size() + getParameters().getVdss().size() >= 
Config.<Integer> GetValue(ConfigValues.MaxNumberOfHostsInStoragePool)) {
             VdcFault fault = new VdcFault();
             fault.setError(VdcBllErrors.ReachedMaxNumberOfHostsInDC);
             fault.setMessage(Backend.getInstance()
@@ -57,34 +59,36 @@
 
     @Override
     protected void executeCommand() {
-        // according to shaharf the first id is 1
-        int selectedId = 1;
-        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();
+        //TODO : this logic should be optimized.
+        for (VdsStatic vds : getParameters().getVdss()) {
+            // according to shaharf the first id is 1
+            int selectedId = 1;
+            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();
+                }
+            });
+            Collections.sort(map);
+            for (int id : map) {
+                if (selectedId == id) {
+                    selectedId++;
+                } else {
+                    break;
+                }
             }
-        });
-        Collections.sort(map);
-        for (int id : map) {
-            if (selectedId == id) {
-                selectedId++;
-            } else {
-                break;
+            vds_spm_id_map newMap = new 
vds_spm_id_map(getVds().getstorage_pool_id(), getVdsId(), selectedId);
+            DbFacade.getInstance().getVdsSpmIdMapDao().save(newMap);
+            if (getParameters().isCompensationEnabled()) {
+                getCompensationContext().snapshotNewEntity(newMap);
+                getCompensationContext().stateChanged();
             }
         }
-        vds_spm_id_map newMap = new 
vds_spm_id_map(getVds().getstorage_pool_id(), getVdsId(), selectedId);
-        DbFacade.getInstance().getVdsSpmIdMapDao().save(newMap);
-        if (getParameters().isCompensationEnabled()) {
-            getCompensationContext().snapshotNewEntity(newMap);
-            getCompensationContext().stateChanged();
-        }
-
         setSucceeded(true);
     }
 
     @Override
     protected Map<String, String> getExclusiveLocks() {
-        return 
Collections.singletonMap(getVds().getstorage_pool_id().toString(), 
LockingGroup.REGISTER_VDS.name());
+        return 
Collections.singletonMap(getParameters().getStoragePoolId().toString(), 
LockingGroup.REGISTER_VDS.name());
     }
 }
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 81d7c54..7591b1a 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
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.common.action.ChangeVDSClusterParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.action.VdsSpmIdParameters;
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
@@ -112,10 +113,13 @@
             return;
         }
 
+        VdsSpmIdParameters vdsSpmIdParameters = new VdsSpmIdParameters();
+        
vdsSpmIdParameters.setVdss(Collections.singletonList(getVds().getStaticData()));
         if (targetStoragePool != null) {
+            vdsSpmIdParameters.setStoragePoolId(targetStoragePool.getId());
             VdcReturnValueBase addVdsSpmIdReturn =
                     
Backend.getInstance().runInternalAction(VdcActionType.AddVdsSpmId,
-                            getParameters(),
+                            vdsSpmIdParameters,
                             new CommandContext(getCompensationContext()));
             if (!addVdsSpmIdReturn.getSucceeded()) {
                 setSucceeded(false);
@@ -154,6 +158,7 @@
         getParameters().setCompensationEnabled(true);
         
getParameters().setTransactionScopeOption(TransactionScopeOption.RequiresNew);
         if (getSourceCluster().getstorage_pool_id() != null) {
+            
vdsSpmIdParameters.setStoragePoolId(getSourceCluster().getstorage_pool_id().getValue());
             VdcReturnValueBase removeVdsSpmIdReturn =
                     
Backend.getInstance().runInternalAction(VdcActionType.RemoveVdsSpmId,
                             getParameters(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java
index d40096c..e718b4f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsSpmIdCommand.java
@@ -1,11 +1,12 @@
 package org.ovirt.engine.core.bll;
 
-import org.ovirt.engine.core.common.action.VdsActionParameters;
+import org.ovirt.engine.core.common.action.VdsSpmIdParameters;
+import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 
 @InternalCommandAttribute
-public class RemoveVdsSpmIdCommand<T extends VdsActionParameters> extends 
AddVdsSpmIdCommand<T> {
+public class RemoveVdsSpmIdCommand<T extends VdsSpmIdParameters> extends 
AddVdsSpmIdCommand<T> {
 
     /**
      * Constructor for command creation when compensation is applied on startup
@@ -22,20 +23,24 @@
 
     @Override
     protected void executeCommand() {
-        if (getParameters().isCompensationEnabled()) {
-            
getCompensationContext().snapshotEntity(DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()));
-        }
+        for (VdsStatic vdsStatic : getParameters().getVdss()) {
+            Guid vdsId = vdsStatic.getId();
+            if (getParameters().isCompensationEnabled()) {
+                
getCompensationContext().snapshotEntity(DbFacade.getInstance().getVdsSpmIdMapDao().get(vdsId));
+            }
 
-        DbFacade.getInstance().getVdsSpmIdMapDao().remove(getVdsId());
-        if (getParameters().isCompensationEnabled()) {
-            getCompensationContext().stateChanged();
+            DbFacade.getInstance().getVdsSpmIdMapDao().remove(vdsId);
+            if (getParameters().isCompensationEnabled()) {
+                getCompensationContext().stateChanged();
+            }
         }
         setSucceeded(true);
     }
 
     @Override
     protected boolean canDoAction() {
-        // check that there is spm id for this vds
-        return DbFacade.getInstance().getVdsSpmIdMapDao().get(getVdsId()) != 
null;
+        // check that there is spm id for atlease one of the vdss
+        return !getParameters().getVdss().isEmpty()
+                && 
DbFacade.getInstance().getVdsSpmIdMapDao().get(getParameters().getVdss().get(0).getId())
 != null;
     }
 }
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 3d53178..6e6d44b 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
@@ -7,6 +7,7 @@
 import org.ovirt.engine.core.bll.storage.StorageHandlingCommandBase;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.action.VdsSpmIdParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import org.ovirt.engine.core.common.action.VdsActionParameters;
@@ -58,26 +59,27 @@
                 && 
!oldGroup.getstorage_pool_id().equals(getVdsGroup().getstorage_pool_id())
                 || oldGroup.getstorage_pool_id() == null
                 && 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;
-                    }
+            List<VdsStatic> vdsList = 
getVdsStaticDAO().getAllForVdsGroup(oldGroup.getId());
+            VdsSpmIdParameters parameters = new VdsSpmIdParameters(vdsList, 
getVdsGroup().getstorage_pool_id().getValue());
+            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,
-                                    parameters);
-                    if (!removeVdsSpmIdReturn.getSucceeded()) {
-                        setSucceeded(false);
-                        
getReturnValue().setFault(removeVdsSpmIdReturn.getFault());
-                        return;
-                    }
+            }
+
+            if (oldGroup.getstorage_pool_id() != null) {
+                
parameters.setStoragePoolId(oldGroup.getstorage_pool_id().getValue());
+                VdcReturnValueBase removeVdsSpmIdReturn =
+                        
getBackend().runInternalAction(VdcActionType.RemoveVdsSpmId,
+                                parameters);
+                if (!removeVdsSpmIdReturn.getSucceeded()) {
+                    setSucceeded(false);
+                    getReturnValue().setFault(removeVdsSpmIdReturn.getFault());
+                    return;
                 }
             }
         }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index 2aec786..97f5109 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -71,6 +71,7 @@
     HandleVdsCpuFlagsOrClusterChanged(114),
     InitVdsOnUp(115),
     SetNonOperationalVds(117),
+    AddMultipleVdsSpmId(119),
     AddVdsSpmId(119),
     RemoveVdsSpmId(120),
     // Fencing (including RestartVds above)


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7531b9edb763d32b96c58104385349d587de3416
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