package org.ovirt.engine.core.bll.scheduling;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.ovirt.engine.core.bll.scheduling.pending.PendingResourceManager;
import org.ovirt.engine.core.bll.scheduling.policyunits.BasicWeightSelectorPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.CPUPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.CompatibilityVersionFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.CpuLevelFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.CpuOverloadPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.CpuPinningPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EmulatedMachineFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionBalancePolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionCPUWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EvenDistributionMemoryWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EvenGuestDistributionBalancePolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.EvenGuestDistributionWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.HaReservationWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.HostDeviceFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.HostedEngineHAClusterFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.HostedEngineHAClusterWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.HostedEngineMemoryReservationFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.InClusterUpgradeFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.InClusterUpgradeWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.LabelFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.MemoryPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.MigrationPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.NetworkPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.NoneBalancePolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.PinToHostPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingBalancePolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingCPUWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.PowerSavingMemoryWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.PreferredHostsWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.RankSelectorPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.SwapFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.VmAffinityFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.VmAffinityWeightPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.VmToHostAffinityFilterPolicyUnit;
import org.ovirt.engine.core.bll.scheduling.policyunits.VmToHostAffinityWeightPolicyUnit;
import org.ovirt.engine.core.common.scheduling.PolicyUnit;
import org.ovirt.engine.core.compat.Guid;
public class InternalPolicyUnits {
private static final Set<Class<? extends PolicyUnitImpl>> enabledUnits = new HashSet<>();
static {
enabledUnits.add(CpuLevelFilterPolicyUnit.class);
enabledUnits.add(CpuOverloadPolicyUnit.class);
enabledUnits.add(CPUPolicyUnit.class);
enabledUnits.add(EmulatedMachineFilterPolicyUnit.class);
enabledUnits.add(EvenDistributionBalancePolicyUnit.class);
enabledUnits.add(EvenDistributionCPUWeightPolicyUnit.class);
enabledUnits.add(EvenDistributionMemoryWeightPolicyUnit.class);
enabledUnits.add(EvenGuestDistributionBalancePolicyUnit.class);
enabledUnits.add(EvenGuestDistributionWeightPolicyUnit.class);
//enabledUnits.add(HaReservationBalancePolicyUnit.class); /* TODO not used? */
enabledUnits.add(HaReservationWeightPolicyUnit.class);
enabledUnits.add(HostDeviceFilterPolicyUnit.class);
enabledUnits.add(HostedEngineHAClusterFilterPolicyUnit.class);
enabledUnits.add(HostedEngineHAClusterWeightPolicyUnit.class);
enabledUnits.add(HostedEngineMemoryReservationFilterPolicyUnit.class);
enabledUnits.add(MemoryPolicyUnit.class);
enabledUnits.add(MigrationPolicyUnit.class);
enabledUnits.add(NetworkPolicyUnit.class);
enabledUnits.add(NoneBalancePolicyUnit.class);
enabledUnits.add(PinToHostPolicyUnit.class);
enabledUnits.add(PowerSavingBalancePolicyUnit.class);
enabledUnits.add(PowerSavingCPUWeightPolicyUnit.class);
enabledUnits.add(PowerSavingMemoryWeightPolicyUnit.class);
enabledUnits.add(PreferredHostsWeightPolicyUnit.class);
enabledUnits.add(SwapFilterPolicyUnit.class);
enabledUnits.add(VmAffinityFilterPolicyUnit.class);
enabledUnits.add(VmAffinityWeightPolicyUnit.class);
enabledUnits.add(VmToHostAffinityFilterPolicyUnit.class);
enabledUnits.add(VmToHostAffinityWeightPolicyUnit.class);
enabledUnits.add(CpuPinningPolicyUnit.class);
enabledUnits.add(CompatibilityVersionFilterPolicyUnit.class);
enabledUnits.add(InClusterUpgradeFilterPolicyUnit.class);
enabledUnits.add(InClusterUpgradeWeightPolicyUnit.class);
enabledUnits.add(LabelFilterPolicyUnit.class);
enabledUnits.add(BasicWeightSelectorPolicyUnit.class);
enabledUnits.add(RankSelectorPolicyUnit.class);
}
public static Collection<Class<? extends PolicyUnitImpl>> getList() {
return Collections.unmodifiableSet(enabledUnits);
}
public static PolicyUnitImpl instantiate(Class<? extends PolicyUnitImpl> unitType, PendingResourceManager pendingResourceManager)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
// This check is only performed once during the static initializer run
// and serves as a sanity check
if (unitType.getAnnotation(SchedulingUnit.class) == null) {
throw new IllegalArgumentException(unitType.getName()
+ " is missing the required SchedulingUnit annotation metadata.");
}
if (!enabledUnits.contains(unitType)) {
throw new IllegalArgumentException("Policy unit " + unitType.getName() + " is not present"
+ " in the list of enabled internal policy units.");
}
return unitType
.getConstructor(PolicyUnit.class, PendingResourceManager.class)
.newInstance(null, pendingResourceManager);
}
public static Guid getGuid(Class<? extends PolicyUnitImpl> unitType) {
// This check is only performed once during the static initializer run
// and serves as a sanity check
if (unitType.getAnnotation(SchedulingUnit.class) == null) {
throw new IllegalArgumentException(unitType.getName()
+ " is missing the required SchedulingUnit annotation metadata.");
}
return Guid.createGuidFromString(unitType.getAnnotation(SchedulingUnit.class).guid());
}
}