public class CanaryStrategy extends java.lang.Object implements Strategy<Step>
proceed()
calls in order to move along a deployment. This allows the user to manually check that the
deployment looks good before a full rollout is attempted.
The default is to do nothing until a first proceed()
call is received, at which point the first Step
is deployed. The user may then examine whether the deployment of that first Step
was successful before
invoking a proceed()
call. By default this second proceed()
will result in deploying all the other
Step
s according to the rules of the underlying strategy. The number of proceed()
calls required to
enter this state may be customized via the CanaryStrategy constructor.
Unlike other strategies, CanaryStrategy may only be applied to Phase
s to
manage the progress of child Step
s. This requirement avoids user or developer error resulting from ambiguity
in what should happen when e.g. a CanaryStrategy is applied to a Plan
against child Phase
s. In practice, developers and users should be able to
get their desired behavior by directly applying CanaryStrategy to some subset of the
Phase
s in their Plan
.Modifier and Type | Class and Description |
---|---|
static class |
CanaryStrategy.Generator
This class generates Strategy objects of the appropriate type.
|
Modifier and Type | Field and Description |
---|---|
java.util.Collection<Step> |
canarySteps |
Constructor and Description |
---|
CanaryStrategy(Strategy<Step> postCanaryStrategy,
int requiredProceeds,
java.util.List<Step> steps)
Creates a new Canary Strategy which will require a specified number of
proceed() calls from a user
before following the provided postCanaryStrategy . |
CanaryStrategy(Strategy<Step> postCanaryStrategy,
java.util.List<Step> steps)
Creates a new Canary Strategy which will require 2
proceed() calls from a user before following the
provided postCanaryStrategy . |
Modifier and Type | Method and Description |
---|---|
java.util.Collection<Step> |
getCandidates(java.util.Collection<Step> steps,
java.util.Collection<PodInstanceRequirement> dirtyAssets)
Returns the candidate element(s), if any, which may have work performed against them.
|
java.lang.String |
getName() |
void |
interrupt()
A call to interrupt indicates to an
Interruptible that it should not continue work beyond the current
point, until Interruptible.proceed() is called. |
boolean |
isInterrupted()
Indicates whether the object is interrupted or not.
|
void |
proceed()
A call to proceed indicates to an
Interruptible that it should may cancel a previous Interruptible.interrupt()
call and resume with any in-progress work. |
public java.util.Collection<Step> canarySteps
public CanaryStrategy(Strategy<Step> postCanaryStrategy, java.util.List<Step> steps)
proceed()
calls from a user before following the
provided postCanaryStrategy
.postCanaryStrategy
- the strategy to use after the canary stage has completedpublic CanaryStrategy(Strategy<Step> postCanaryStrategy, int requiredProceeds, java.util.List<Step> steps)
proceed()
calls from a user
before following the provided postCanaryStrategy
.postCanaryStrategy
- the strategy to use after the canary stage has completedrequiredProceeds
- the number of proceed()
calls to require before the provided strategy is
executedpublic java.util.Collection<Step> getCandidates(java.util.Collection<Step> steps, java.util.Collection<PodInstanceRequirement> dirtyAssets)
Strategy
getCandidates
in interface Strategy<Step>
steps
- the elements to be examined for candidacydirtyAssets
- any asset names which already have work in progress elsewhere, which should not be returned by
this callpublic void interrupt()
Interruptible
Interruptible
that it should not continue work beyond the current
point, until Interruptible.proceed()
is called. This call has no effect if the object is already interrupted.interrupt
in interface Interruptible
public void proceed()
Interruptible
Interruptible
that it should may cancel a previous Interruptible.interrupt()
call and resume with any in-progress work. This call has no effect if the object is already proceeding.proceed
in interface Interruptible
public boolean isInterrupted()
Interruptible
isInterrupted
in interface Interruptible