JitterStrategy.java
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package software.amazon.lambda.durable.retry;
/**
* Jitter strategy for retry delays to prevent thundering herd problems.
*
* <p>Jitter reduces simultaneous retry attempts by spreading retries out over a randomized delay interval, which helps
* prevent overwhelming services when many clients retry at the same time.
*/
public enum JitterStrategy {
/**
* No jitter - use exact calculated delay. This provides predictable timing but may cause thundering herd issues.
*/
NONE {
@Override
public double apply(double baseDelay) {
return baseDelay;
}
},
/**
* Full jitter - random delay between 0 and calculated delay. This provides maximum spread but may result in very
* short delays.
*/
FULL {
@Override
public double apply(double baseDelay) {
return Math.random() * baseDelay;
}
},
/**
* Half jitter - random delay between 50% and 100% of calculated delay. This provides good spread while maintaining
* reasonable minimum delays.
*/
HALF {
@Override
public double apply(double baseDelay) {
return baseDelay / 2 + Math.random() * (baseDelay / 2);
}
};
public abstract double apply(double baseDelay);
}