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

    All Methods Static Methods Instance Methods Concrete Methods
    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 Detail

    - #### ConstraintSolverStrategy

          public ConstraintSolverStrategy()

  - ### Method Detail

    - #### 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.