Package org.apache.storm.scheduler.resource.strategies.scheduling

# Class ConstraintSolverStrategy

java.lang.Object
org.apache.storm.scheduler.resource.strategies.scheduling.BaseResourceAwareStrategy
org.apache.storm.scheduler.resource.strategies.scheduling.ConstraintSolverStrategy

All Implemented Interfaces:
  `IStrategy`

public class ConstraintSolverStrategy extends BaseResourceAwareStrategy

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.storm.scheduler.resource.strategies.scheduling.BaseResourceAwareStrategy

  `BaseResourceAwareStrategy.NodeSortType`

- ## Field Summary

  ### Fields inherited from class org.apache.storm.scheduler.resource.strategies.scheduling.BaseResourceAwareStrategy

  `cluster, compToExecs, config, execSorter, execToComp, nodes, nodeSorter, nodeSortType, orderExecutorsByProximity, searcherState, sortNodesForEachExecutor, topologyDetails, topoName`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ConstraintSolverStrategy()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected SchedulingResult`
  `checkSchedulingFeasibility()`
  Check scheduling feasibility for a quick failure as the second step in `BaseResourceAwareStrategy.schedule(Cluster, TopologyDetails)`.
  `protected boolean`
  `isExecAssignmentToWorkerValid(ExecutorDetails exec, WorkerSlot worker)`
  Check if any constraints are violated if exec is scheduled on worker.
  `protected void`
  `prepareForScheduling(Cluster cluster, TopologyDetails topologyDetails)`
  Initialize instance variables as the first step in `BaseResourceAwareStrategy.schedule(Cluster, TopologyDetails)`.
  `static boolean`
  `validateSolution(Cluster cluster, TopologyDetails topo)`
  Determines if a scheduling is valid and all constraints are satisfied (for use in testing).

  ### Methods inherited from class org.apache.storm.scheduler.resource.strategies.scheduling.BaseResourceAwareStrategy

  `assignBoundAckersForNewWorkerSlot, getMaxStateSearchFromTopoConf, hostnameToNodes, idToNode, isOrderByProximity, prepare, schedule, scheduleExecutorsOnNodes, setExecSorter, setNodeSorter`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ConstraintSolverStrategy

    public ConstraintSolverStrategy()

- ## Method Details

  - ### prepareForScheduling

    protected void prepareForScheduling(Cluster cluster, TopologyDetails topologyDetails)
    Description copied from class: `BaseResourceAwareStrategy`
    Initialize instance variables as the first step in `BaseResourceAwareStrategy.schedule(Cluster, TopologyDetails)`. This method may be extended by subclasses to initialize additional variables as in `prepareForScheduling(Cluster, TopologyDetails)`.
    Overrides:
      `prepareForScheduling` in class `BaseResourceAwareStrategy`
    Parameters:
      `cluster` - on which executors will be scheduled.
      `topologyDetails` - to be scheduled.

  - ### checkSchedulingFeasibility

    protected SchedulingResult checkSchedulingFeasibility()
    Description copied from class: `BaseResourceAwareStrategy`
    Check scheduling feasibility for a quick failure as the second step in `BaseResourceAwareStrategy.schedule(Cluster, TopologyDetails)`. If scheduling is not possible, then return a SchedulingStatus object with a failure status. If fully scheduled then return a successful SchedulingStatus. This method can be extended by subclasses `checkSchedulingFeasibility()` to check for additional failure conditions.
    Overrides:
      `checkSchedulingFeasibility` in class `BaseResourceAwareStrategy`
    Returns:
      A non-null `SchedulingResult` to terminate scheduling, otherwise return null to continue scheduling.

  - ### isExecAssignmentToWorkerValid

    protected boolean isExecAssignmentToWorkerValid(ExecutorDetails exec, WorkerSlot worker)
    Check if any constraints are violated if exec is scheduled on worker.
    Overrides:
      `isExecAssignmentToWorkerValid` in class `BaseResourceAwareStrategy`
    Parameters:
      `exec` - being scheduled.
      `worker` - on which to schedule.
    Returns:
      true if scheduling exec on worker does not violate any constraints, returns false if it does

  - ### validateSolution

    public static boolean validateSolution(Cluster cluster, TopologyDetails topo)
    Determines if a scheduling is valid and all constraints are satisfied (for use in testing). This is done in three steps.
  - Check if nodeCoLocationCnt-constraints are satisfied. Some components may allow only a certain number of executors to exist on the same node `ConstraintSolverConfig.getMaxNodeCoLocationCnts()`.
  - Check if incompatibility-constraints are satisfied. Incompatible components `ConstraintSolverConfig.getIncompatibleComponentSets()` should not be put on the same worker.
  - Check if CPU and Memory resources do not exceed availability on the node and total matches what is expected when fully scheduled.

Parameters:
  `cluster` - on which scheduling was done.
  `topo` - TopologyDetails being scheduled.
Returns:
  true if solution is valid, false otherwise.