Dudi Maroshi has uploaded a new change for review.

Change subject: engien: Add KSM policy to NUMA hosts
......................................................................

engien: Add KSM policy to NUMA hosts

1. Update MomPolicyVDSparameters and with new ksmMergeAcrossNodes field
2. Update UpdateVdsGroupCommand to distribute the KSM policy change to active 
hosts
with concurrent exectuor
3. Refactor SetMOMPolicyParameters VDSCommand, appended new field, refactor all 
calls

Change-Id: I9efa046547fb3732f0fb059092e5f444d72d589c
Bug-Url: https://bugzilla.redhat.com/840114
Signed-off-by: Dudi Maroshi <d...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateMomPolicyCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MomPolicyVDSParameters.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetMOMPolicyParametersVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
7 files changed, 84 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/64/39864/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
index 9f19a22..72945d9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
@@ -303,7 +303,10 @@
         if (cluster.getCompatibilityVersion().compareTo(Version.v3_3) >= 0) {
             try {
                 returnValue = 
runVdsCommand(VDSCommandType.SetMOMPolicyParameters,
-                        new MomPolicyVDSParameters(vds, 
cluster.isEnableBallooning(), cluster.isEnableKsm())
+                                new MomPolicyVDSParameters(vds,
+                                        cluster.isEnableBallooning(),
+                                        cluster.isEnableKsm(),
+                                        cluster.isKsmMergeAcrossNumaNodes())
                                                 );
             } catch (VdcBLLException e) {
                 log.error("Could not update MoM policy on host '{}'", 
vds.getName());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateMomPolicyCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateMomPolicyCommand.java
index a76ff06..ea8e8a6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateMomPolicyCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateMomPolicyCommand.java
@@ -27,7 +27,7 @@
         try {
             succeeded = runVdsCommand(VDSCommandType.SetMOMPolicyParameters,
                     new MomPolicyVDSParameters(getVds(), 
getVdsGroup().isEnableBallooning(),
-                                                getVdsGroup().isEnableKsm())
+                            getVdsGroup().isEnableKsm(), 
getVdsGroup().isKsmMergeAcrossNumaNodes())
                                               ).getSucceeded();
         } catch (VdcBLLException e) {
             log.error("Could not update MoM policy on host '{}': {}",
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 3f6924d..144c5a3 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
@@ -1,8 +1,10 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.Callable;
 
 import javax.inject.Inject;
 
@@ -34,14 +36,19 @@
 import org.ovirt.engine.core.common.businessentities.profiles.CpuProfile;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.gluster.GlusterFeatureSupported;
 import org.ovirt.engine.core.common.utils.ListUtils;
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
+import org.ovirt.engine.core.common.vdscommands.MomPolicyVDSParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.network.NetworkDao;
+import org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil;
 
 public class UpdateVdsGroupCommand<T extends 
ManagementNetworkOnClusterOperationParameters> extends
         VdsGroupOperationCommandBase<T>  implements RenamedEntityInfoProvider{
@@ -112,6 +119,11 @@
             getParameters().getVdsGroup().setEmulatedMachine(null);
         }
 
+        // if ksm-enabled updated or ksm-merge-across-nodes updated
+        if ((getVdsGroup().isKsmMergeAcrossNumaNodes() != 
getPrevVdsGroup().isKsmMergeAcrossNumaNodes()) ||
+                (getVdsGroup().isEnableKsm() != 
getPrevVdsGroup().isEnableKsm()))
+            publishMomPolicyOnKsmPolicyChange();
+
         getVdsGroupDAO().update(getParameters().getVdsGroup());
 
         if (isAddedToStoragePool) {
@@ -134,6 +146,43 @@
         setSucceeded(true);
     }
 
+    private void publishMomPolicyOnKsmPolicyChange() {
+        // collect all Active hosts into a callable list
+        List<Callable<VDSReturnValue>> callables = new LinkedList<>();
+        final VDSGroup cluster = getVdsGroup();
+        for (final VDS vds : allForVdsGroup) {
+            if (vds.getStatus() == VDSStatus.Up) {
+                callables.add(new Callable<VDSReturnValue>() {
+                    @Override
+                    public VDSReturnValue call() {
+                        return runUpdateMomPolicy(cluster, vds);
+                    }
+                });
+            }
+        }
+        // run all VDSCommands concurrently with executor
+        if (callables.size() > 0)
+            ThreadPoolUtil.invokeAll(callables);
+    }
+
+    private VDSReturnValue runUpdateMomPolicy(final VDSGroup cluster, final 
VDS vds) {
+        VDSReturnValue returnValue = new VDSReturnValue();
+        if (cluster.getCompatibilityVersion().compareTo(Version.v3_5) >= 0) {
+            try {
+                returnValue = 
runVdsCommand(VDSCommandType.SetMOMPolicyParameters,
+                                new MomPolicyVDSParameters(vds,
+                                        cluster.isEnableBallooning(),
+                                        cluster.isEnableKsm(),
+                                        cluster.isKsmMergeAcrossNumaNodes())
+                        );
+            } catch (VdcBLLException e) {
+                log.error("Could not update MoM policy on host '{}'", 
vds.getName());
+                returnValue.setSucceeded(false);
+            }
+        }
+        return returnValue;
+    }
+
     private NetworkCluster createManagementNetworkCluster(Network 
managementNetwork) {
         final NetworkCluster networkCluster = new NetworkCluster(
                 getVdsGroup().getId(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
index 3228143..dc54208 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsGroupOperationCommandBase.java
@@ -48,6 +48,15 @@
         return getParameters().getVdsGroup();
     }
 
+    /**
+     * Get the cluster object as it is in database before update
+     *
+     * @return Current cluster object before database update, or null if not 
existing
+     */
+    public VDSGroup getPrevVdsGroup() {
+        return super.getVdsGroup();
+    }
+
     @Override
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__CLUSTER);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MomPolicyVDSParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MomPolicyVDSParameters.java
index 1b2b6c7..119f6f6 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MomPolicyVDSParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/MomPolicyVDSParameters.java
@@ -8,14 +8,19 @@
 public class MomPolicyVDSParameters extends VdsIdVDSCommandParametersBase {
     private boolean enableBalloon;
     private boolean enableKsm;
-
-    public MomPolicyVDSParameters(VDS vds, boolean enableBalloon, boolean 
enableKsm) {
-        super(vds.getId());
-        this.enableBalloon = enableBalloon;
-        this.enableKsm = enableKsm;
-    }
+    private boolean ksmMergeAcrossNumaNodes;
 
     public MomPolicyVDSParameters() {
+    }
+
+    public MomPolicyVDSParameters(VDS vds,
+            boolean enableBallooning2,
+            boolean enableKsm2,
+            boolean ksmMergeAcrossNumaNodes2) {
+        super(vds.getId());
+        this.enableBalloon = enableBallooning2;
+        this.enableKsm = enableKsm2;
+        this.ksmMergeAcrossNumaNodes = ksmMergeAcrossNumaNodes2;
     }
 
     public boolean isEnableBalloon() {
@@ -33,4 +38,12 @@
     public void setEnableKsm(boolean enableKsm) {
         this.enableKsm = enableKsm;
     }
+
+    public boolean isKsmMergeAcrossNumaNodes() {
+        return ksmMergeAcrossNumaNodes;
+    }
+
+    public void setKsmMergeAcrossNumaNodes(boolean ksmMergeAcrossNumaNodes) {
+        this.ksmMergeAcrossNumaNodes = ksmMergeAcrossNumaNodes;
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetMOMPolicyParametersVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetMOMPolicyParametersVDSCommand.java
index 7e9123b..c83ec6a 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetMOMPolicyParametersVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetMOMPolicyParametersVDSCommand.java
@@ -28,6 +28,7 @@
         Map<String, Object> deviceStruct = new HashMap<>();
         deviceStruct.put(VdsProperties.balloonEnabled, 
getParameters().isEnableBalloon());
         deviceStruct.put(VdsProperties.ksmEnabled, 
getParameters().isEnableKsm());
+        deviceStruct.put(VdsProperties.ksmMergeAcrossNodes, 
getParameters().isKsmMergeAcrossNumaNodes());
         return deviceStruct;
     }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
index 78e3785..3f7e272 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsProperties.java
@@ -444,6 +444,7 @@
     // MoM policy tuning
     public static final String balloonEnabled = "balloonEnabled";
     public static final String ksmEnabled = "ksmEnabled";
+    public static final String ksmMergeAcrossNodes = "ksmMergeAcrossNodes";
 
     // properties for ServerConnectionListReturnForXmlRpc
     public static final String serverType = "serverType";


-- 
To view, visit https://gerrit.ovirt.org/39864
To unsubscribe, visit https://gerrit.ovirt.org/settings

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

Reply via email to