package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VdsSelectionAlgorithm; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.dal.VdcBllMessages; public abstract class VdsGroupOperationCommandBase<T extends VdsGroupOperationParameters> extends VdsGroupCommandBase<T> { // If the CPU thresholds are set to -1 then we should get the value from the configuration public static final int GET_CPU_THRESHOLDS_FROM_CONFIGURATION = -1; public VdsGroupOperationCommandBase(T parameters) { super(parameters); } @Override protected VDSGroup getVdsGroup() { return getParameters().getVdsGroup(); } protected void CheckMaxMemoryOverCommitValue() { if (getVdsGroup().getmax_vds_memory_over_commit() <= 0) { getVdsGroup().setmax_vds_memory_over_commit( Config.<Integer> GetValue(ConfigValues.MaxVdsMemOverCommit)); } } protected boolean isCpuUtilizationValid(int cpuUtilization) { return (cpuUtilization <= 100 && cpuUtilization >= 0) || cpuUtilization == GET_CPU_THRESHOLDS_FROM_CONFIGURATION; } protected boolean isCpuUtilizationExist(int cpuUtilization) { return cpuUtilization != GET_CPU_THRESHOLDS_FROM_CONFIGURATION; } protected boolean validateMetrics() { boolean result = true; VdsSelectionAlgorithm selectionAlgorithm = getVdsGroup().getselection_algorithm(); if (result && selectionAlgorithm != null && !selectionAlgorithm.equals(VdsSelectionAlgorithm.None)) { if (result && (!isCpuUtilizationValid(getVdsGroup().gethigh_utilization()) || !isCpuUtilizationValid(getVdsGroup().getlow_utilization()))) { addCanDoActionMessage(VdcBllMessages.VDS_GROUP_CPU_UTILIZATION_MUST_BE_IN_VALID_RANGE); result = false; } if (result && getVdsGroup().getlow_utilization() > getVdsGroup().gethigh_utilization()) { addCanDoActionMessage(VdcBllMessages.VDS_GROUP_CPU_LOW_UTILIZATION_PERCENTAGE_MUST_BE_LOWER_THAN_HIGH_PERCENTAGE); result = false; } if (result) { if (selectionAlgorithm.equals(VdsSelectionAlgorithm.EvenlyDistribute)) { if (!isCpuUtilizationExist(getVdsGroup().gethigh_utilization())) { addCanDoActionMessage(VdcBllMessages.VDS_GROUP_CPU_HIGH_UTILIZATION_PERCENTAGE_MUST_BE_DEFINED_WHEN_USING_EVENLY_DISTRIBUTED); result = false; } } else if (selectionAlgorithm.equals(VdsSelectionAlgorithm.PowerSave)) { if (!isCpuUtilizationExist(getVdsGroup().gethigh_utilization()) || !isCpuUtilizationExist(getVdsGroup().getlow_utilization())) { addCanDoActionMessage(VdcBllMessages.VDS_GROUP_BOTH_LOW_AND_HIGH_CPU_UTILIZATION_PERCENTAGE_MUST_BE_DEFINED_WHEN_USING_POWER_SAVING); result = false; } } } } return result; } }