Class BaseResourceAwareStrategy
java.lang.Object
org.apache.storm.scheduler.resource.strategies.scheduling.BaseResourceAwareStrategy
- All Implemented Interfaces:
- IStrategy
- Direct Known Subclasses:
- ConstraintSolverStrategy,- DefaultResourceAwareStrategy,- DefaultResourceAwareStrategyOld,- GenericResourceAwareStrategy,- GenericResourceAwareStrategyOld,- RoundRobinResourceAwareStrategy
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic enumDifferent node sorting types available.
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprotected Clusterprotected Map<String,Set<ExecutorDetails>> protected IExecSorterprotected Map<ExecutorDetails,String> protected RasNodesprotected INodeSorterprotected final BaseResourceAwareStrategy.NodeSortTypeprotected booleanprotected SchedulingSearcherStateprotected final booleanprotected TopologyDetailsprotected String
- 
Constructor SummaryConstructorsConstructorDescriptionBaseResourceAwareStrategy(boolean sortNodesForEachExecutor, BaseResourceAwareStrategy.NodeSortType nodeSortType) Initialize for the default implementation of schedule().
- 
Method SummaryModifier and TypeMethodDescriptionprotected intassignBoundAckersForNewWorkerSlot(ExecutorDetails exec, RasNode node, WorkerSlot workerSlot) Determine how many bound ackers to put into the given workerSlot.protected SchedulingResultCheck scheduling feasibility for a quick failure as the second step inschedule(Cluster, TopologyDetails).static intgetMaxStateSearchFromTopoConf(Map<String, Object> topoConf) hostnameToNodes(String hostname) hostname to Ids.Find RASNode for specified node id.protected booleanisExecAssignmentToWorkerValid(ExecutorDetails exec, WorkerSlot worker) Check if the assignment of the executor to the worker is valid.static booleanisOrderByProximity(Map<String, Object> topoConf) voidPrepare the Strategy for scheduling.protected voidprepareForScheduling(Cluster cluster, TopologyDetails topologyDetails) Initialize instance variables as the first step inschedule(Cluster, TopologyDetails).schedule(Cluster cluster, TopologyDetails td) Note that this method is not thread-safe.protected SchedulingResultscheduleExecutorsOnNodes(List<ExecutorDetails> orderedExecutors, Iterable<String> sortedNodesIter) Try to schedule till successful or till limits (backtrack count or time) have been exceeded.protected voidsetExecSorter(IExecSorter execSorter) Set the pluggable sorter for ExecutorDetails.protected voidsetNodeSorter(INodeSorter nodeSorter) Set the pluggable sorter for Nodes.
- 
Field Details- 
sortNodesForEachExecutorprotected final boolean sortNodesForEachExecutor
- 
nodeSortType
- 
config
- 
cluster
- 
topologyDetails
- 
nodes
- 
topoName
- 
compToExecs
- 
execToComp
- 
orderExecutorsByProximityprotected boolean orderExecutorsByProximity
- 
searcherState
- 
execSorter
- 
nodeSorter
 
- 
- 
Constructor Details- 
BaseResourceAwareStrategypublic BaseResourceAwareStrategy()
- 
BaseResourceAwareStrategypublic BaseResourceAwareStrategy(boolean sortNodesForEachExecutor, BaseResourceAwareStrategy.NodeSortType nodeSortType) Initialize for the default implementation of schedule().- Parameters:
- sortNodesForEachExecutor- Sort nodes before scheduling each executor.
- nodeSortType- type of sorting to be applied to object resource collection- BaseResourceAwareStrategy.NodeSortType.
 
 
- 
- 
Method Details- 
prepareDescription copied from interface:IStrategyPrepare the Strategy for scheduling.
- 
scheduleNote that this method is not thread-safe. Several instance variables are generated from supplied parameters. In addition, the following instance variables are set to complete scheduling:searcherStateexecSorterto sort executorsnodeSorterto sort nodesScheduling consists of three main steps: prepareForScheduling(Cluster, TopologyDetails)checkSchedulingFeasibility(), andscheduleExecutorsOnNodes(List, Iterable)The executors and nodes are sorted in the order most conducive to scheduling for the strategy. Those interfaces may be overridden by subclasses using mutators: setExecSorter(IExecSorter)andsetNodeSorter(INodeSorter)
- 
prepareForSchedulingInitialize instance variables as the first step inschedule(Cluster, TopologyDetails). This method may be extended by subclasses to initialize additional variables as inConstraintSolverStrategy.prepareForScheduling(Cluster, TopologyDetails).- Parameters:
- cluster- on which executors will be scheduled.
- topologyDetails- to be scheduled.
 
- 
setExecSorterSet the pluggable sorter for ExecutorDetails.- Parameters:
- execSorter- to use for sorting executorDetails when scheduling.
 
- 
setNodeSorterSet the pluggable sorter for Nodes.- Parameters:
- nodeSorter- to use for sorting nodes when scheduling.
 
- 
getMaxStateSearchFromTopoConf
- 
isOrderByProximity
- 
checkSchedulingFeasibilityCheck scheduling feasibility for a quick failure as the second step inschedule(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 subclassesConstraintSolverStrategy.checkSchedulingFeasibility()to check for additional failure conditions.- Returns:
- A non-null SchedulingResultto terminate scheduling, otherwise return null to continue scheduling.
 
- 
isExecAssignmentToWorkerValidCheck if the assignment of the executor to the worker is valid. In simple cases, this is simply a check ofRasNode.wouldFit(WorkerSlot, ExecutorDetails, TopologyDetails). This method may be extended by subclasses to add additional checks, seeConstraintSolverStrategy.isExecAssignmentToWorkerValid(ExecutorDetails, WorkerSlot).- Parameters:
- exec- being scheduled.
- worker- on which to schedule.
- Returns:
- true if executor can be assigned to the worker, false otherwise.
 
- 
hostnameToNodeshostname to Ids.- Parameters:
- hostname- the hostname.
- Returns:
- the ids n that node.
 
- 
idToNodeFind RASNode for specified node id.- Parameters:
- id- the node/supervisor id to lookup
- Returns:
- a RASNode object
 
- 
scheduleExecutorsOnNodesprotected SchedulingResult scheduleExecutorsOnNodes(List<ExecutorDetails> orderedExecutors, Iterable<String> sortedNodesIter) Try to schedule till successful or till limits (backtrack count or time) have been exceeded.- Parameters:
- orderedExecutors- Executors sorted in the preferred order cannot be null - note that ackers are isolated at the end.
- sortedNodesIter- Node iterable which may be null.
- Returns:
- SchedulingResult with success attribute set to true or false indicting whether ALL executors were assigned.
 
- 
assignBoundAckersForNewWorkerSlotprotected int assignBoundAckersForNewWorkerSlot(ExecutorDetails exec, RasNode node, WorkerSlot workerSlot) Determine how many bound ackers to put into the given workerSlot. Then try to assign the ackers one by one into this workerSlot upto the calculated maximum required. Return the number of ackers assigned. Return 0 if one of the conditions hold true: 1. No bound ackers are used. 2. This is not first exec assigned to this worker. 3. No ackers could be assigned because of space or exception. - Parameters:
- exec- being scheduled.
- node- RasNode on which to schedule.
- workerSlot- WorkerSlot on which to schedule.
- Returns:
- Number of ackers assigned.
 
 
-