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