public class MaxPerAttributeRule extends MaxPerRule
MaxPerAttributeRule
with a limit of 5 and a regex of
'rack:.*':
The regex of 'rack:.*' will result in internally grouping the task counts as follows:
- rack:a: 5 tasks
- rack:b: 4 tasks
- rack:c: 1 task
After grouping the task counts according to the distinct values produced by the regex, we can now
enforce the limit value of 5. In this case, we see that rack:a is full but that rack:b and rack:c
still have room. Therefore the PlacementRule will allow deployments given an attribute of
'rack:b' or 'rack:c', and will block deployments onto 'rack:a'.
This enforcement is applied by task name. By default the rule will only count e.g. tasks named
'index-.*'. This allows us to only enforce the rule against certain task types or task instances
within the service.max
Constructor and Description |
---|
MaxPerAttributeRule(int maxTasksPerSelectedAttribute,
StringMatcher attributeMatcher)
Creates a new rule which will block deployment on tasks which already have N instances
running against a specified attribute, with no filtering on task names (all tasks across the
service are counted against the max).
|
MaxPerAttributeRule(int maxTasksPerSelectedAttribute,
StringMatcher attributeMatcher,
StringMatcher taskFilter)
Creates a new rule which will block deployment on tasks which already have N instances
running against a specified attribute, with the provided filtering on task names to be
counted against the maximum.
|
Modifier and Type | Method and Description |
---|---|
EvaluationOutcome |
filter(Offer offer,
PodInstance podInstance,
java.util.Collection<TaskInfo> tasks)
Returns whether the provided
Offer , combined with the accompanying
TaskInfo s, passes or fails this placement constraint. |
java.util.Collection<java.lang.String> |
getKeys(Offer offer) |
java.util.Collection<java.lang.String> |
getKeys(TaskInfo taskInfo) |
java.util.Collection<PlacementField> |
getPlacementFields()
Returns the
PlacementField s to which this rule applies. |
java.lang.String |
toString() |
equals, getTaskFilter, hashCode, isAcceptable
public MaxPerAttributeRule(int maxTasksPerSelectedAttribute, StringMatcher attributeMatcher)
maxTasksPerSelectedAttribute
- the maximum number of tasks which may be run on an agent
which has attributes matching the provided matcher
attributeMatcher
- the filter on which attributes should be counted and talliedpublic MaxPerAttributeRule(int maxTasksPerSelectedAttribute, StringMatcher attributeMatcher, StringMatcher taskFilter)
maxTasksPerSelectedAttribute
- the maximum number of tasks which may be run on an agent
which has attributes matching the provided matcher
attributeMatcher
- the filter on which attributes should be counted and tallied, for
example only checking attributes which match a rack:*
patterntaskFilter
- a filter on task names to determine which tasks are included in the count,
for example counting all tasks, or just counting tasks of a given typepublic EvaluationOutcome filter(Offer offer, PodInstance podInstance, java.util.Collection<TaskInfo> tasks)
PlacementRule
Offer
, combined with the accompanying
TaskInfo
s, passes or fails this placement constraint.offer
- the offer to be examinedtasks
- the currently deployed tasks in the system, possibly including a duplicate
of the task being launched as represented in the offerRequirement. Use
PlacementUtils.areEquivalent(TaskInfo, PodInstance)
to detect
duplicatesEvaluationOutcome
object describing whether the placement succeeded or failed and whypublic java.util.Collection<PlacementField> getPlacementFields()
PlacementRule
PlacementField
s to which this rule applies.public java.util.Collection<java.lang.String> getKeys(TaskInfo taskInfo)
getKeys
in class MaxPerRule
public java.util.Collection<java.lang.String> getKeys(Offer offer)
getKeys
in class MaxPerRule
public java.lang.String toString()
toString
in class java.lang.Object