Class LinearBackoffManager
- java.lang.Object
-
- org.apache.hc.client5.http.impl.classic.AbstractBackoff
-
- org.apache.hc.client5.http.impl.classic.LinearBackoffManager
-
- All Implemented Interfaces:
BackoffManager
@Contract(threading=SAFE) public class LinearBackoffManager extends AbstractBackoff
An implementation ofBackoffManager
that uses a linear backoff strategy to adjust the maximum number of connections per route in anPoolingHttpClientConnectionManager
. This class is designed to be thread-safe and can be used in multi-threaded environments.The linear backoff strategy increases or decreases the maximum number of connections per route by a fixed increment when backing off or probing, respectively. The adjustments are made based on a cool-down period, during which no further adjustments will be made.
The
LinearBackoffManager
is intended to be used with aPoolingHttpClientConnectionManager
, which provides theConnPoolControl
interface. This class interacts with thePoolingHttpClientConnectionManager
to adjust the maximum number of connections per route.Example usage:
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); LinearBackoffManager backoffManager = new LinearBackoffManager(connectionManager, 1); // Use the backoffManager with the connectionManager in your application
- Since:
- 5.3
- See Also:
BackoffManager
,ConnPoolControl
,PoolingHttpClientConnectionManager
-
-
Field Summary
Fields Modifier and Type Field Description private int
increment
The backoff increment used when adjusting connection pool sizes.private static org.slf4j.Logger
LOG
private java.util.concurrent.ConcurrentHashMap<HttpRoute,java.util.concurrent.atomic.AtomicInteger>
routeAttempts
-
Constructor Summary
Constructors Constructor Description LinearBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPoolControl)
Constructs a new LinearBackoffManager with the specified connection pool control.LinearBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPoolControl, int increment)
Constructs a new LinearBackoffManager with the specified connection pool control and backoff increment.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
backOff(HttpRoute route)
Reduces the number of maximum allowed connections for the specified route based on the exponential backoff algorithm.protected int
getBackedOffPoolSize(int curr)
Returns the new pool size after applying the linear backoff algorithm.void
probe(HttpRoute route)
Adjusts the maximum number of connections for the specified route, decreasing it by the increment value.void
setBackoffFactor(double d)
This method is not used in LinearBackoffManager's implementation.private boolean
shouldSkip(HttpRoute route, java.time.Instant now)
Determines whether an adjustment action (backoff or probe) should be skipped for the given HttpRoute based on the cool-down period.-
Methods inherited from class org.apache.hc.client5.http.impl.classic.AbstractBackoff
getBackoffFactor, getCap, getConnPerRoute, getCoolDown, getLastRouteBackoffs, getLastRouteProbes, getLastUpdate, getTimeInterval, setCoolDown, setPerHostConnectionCap
-
-
-
-
Field Detail
-
LOG
private static final org.slf4j.Logger LOG
-
increment
private final int increment
The backoff increment used when adjusting connection pool sizes. The pool size will be increased or decreased by this value during the backoff process. The increment must be positive.
-
routeAttempts
private final java.util.concurrent.ConcurrentHashMap<HttpRoute,java.util.concurrent.atomic.AtomicInteger> routeAttempts
-
-
Constructor Detail
-
LinearBackoffManager
public LinearBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPoolControl)
Constructs a new LinearBackoffManager with the specified connection pool control. The backoff increment is set to1
by default.- Parameters:
connPoolControl
- the connection pool control to be used by this LinearBackoffManager
-
LinearBackoffManager
public LinearBackoffManager(org.apache.hc.core5.pool.ConnPoolControl<HttpRoute> connPoolControl, int increment)
Constructs a new LinearBackoffManager with the specified connection pool control and backoff increment.- Parameters:
connPoolControl
- the connection pool control to be used by this LinearBackoffManagerincrement
- the backoff increment to be used when adjusting connection pool sizes- Throws:
java.lang.IllegalArgumentException
- if connPoolControl isnull
or increment is not positive
-
-
Method Detail
-
backOff
public void backOff(HttpRoute route)
Description copied from class:AbstractBackoff
Reduces the number of maximum allowed connections for the specified route based on the exponential backoff algorithm.- Specified by:
backOff
in interfaceBackoffManager
- Overrides:
backOff
in classAbstractBackoff
- Parameters:
route
- the HttpRoute for which the backoff needs to be applied
-
probe
public void probe(HttpRoute route)
Adjusts the maximum number of connections for the specified route, decreasing it by the increment value. The method ensures that adjustments only happen after the cool-down period has passed since the last adjustment.- Specified by:
probe
in interfaceBackoffManager
- Overrides:
probe
in classAbstractBackoff
- Parameters:
route
- the HttpRoute for which the maximum number of connections will be decreased
-
shouldSkip
private boolean shouldSkip(HttpRoute route, java.time.Instant now)
Determines whether an adjustment action (backoff or probe) should be skipped for the given HttpRoute based on the cool-down period. If the time elapsed since the last successful probe or backoff for the given route is less than the cool-down period, the method returns true. Otherwise, it returns false.This method is used by both backOff() and probe() methods to enforce the cool-down period before making adjustments to the connection pool size.
- Parameters:
route
- theHttpRoute
to checknow
- the currentInstant
used to calculate the time since the last probe or backoff- Returns:
- true if the cool-down period has not elapsed since the last probe or backoff, false otherwise
-
getBackedOffPoolSize
protected int getBackedOffPoolSize(int curr)
Returns the new pool size after applying the linear backoff algorithm. The new pool size is calculated by adding the increment value to the current pool size.- Specified by:
getBackedOffPoolSize
in classAbstractBackoff
- Parameters:
curr
- the current pool size- Returns:
- the new pool size after applying the linear backoff
-
setBackoffFactor
public void setBackoffFactor(double d)
This method is not used in LinearBackoffManager's implementation. It is provided to fulfill the interface requirement and for potential future extensions or modifications of LinearBackoffManager that may use the backoff factor.- Specified by:
setBackoffFactor
in classAbstractBackoff
- Parameters:
d
- the backoff factor, not used in the current implementation
-
-