BackoffManager that uses a linear backoff strategy to adjust the maximum number
of connections per route in an org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager .
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 a org.,
which provides the ConnPoolControl interface. This class interacts with the PoolingHttpClientConnectionManager
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
BackoffManager, ConnPoolControl, org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager
| Modifier and Type | Field and Description |
|---|---|
| private final int | increment
The backoff increment used when adjusting connection pool sizes. |
| private static final Logger | |
| private final ConcurrentHashMap |
| Access | Constructor and Description |
|---|---|
| public | LinearBackoffManager(final ConnPoolControl<HttpRoute>
the connection pool control to be used by this LinearBackoffManager connPoolControl)Constructs a new LinearBackoffManager with the specified connection pool control. |
| public | LinearBackoffManager(final ConnPoolControl<HttpRoute>
the connection pool control to be used by this LinearBackoffManager connPoolControl, final int the backoff increment to be used when adjusting connection pool sizes increment)Constructs a new LinearBackoffManager with the specified connection pool control and backoff increment. |
| Modifier and Type | Method and Description |
|---|---|
| public void | backOff(final HttpRoute
the HttpRoute for which the backoff needs to be applied route)Overrides org. Implements org. |
| protected int | Returns: the new pool size after applying the linear backoffthe current pool size curr)Implements abstract org. |
| public void | probe(final HttpRoute
the HttpRoute for which the maximum number of connections will be decreased route)Overrides org. Implements org. |
| public void | setBackoffFactor(final double
the backoff factor, not used in the current implementation d)Implements abstract org. |
| private boolean | Returns: true if the cool-down period has not elapsed since the last probe or backoff, false otherwisethe route, final Instant HttpRoute to checkthe current now)Instant used to calculate the time since the last probe or backoffDetermines whether an adjustment action (backoff or probe) should be skipped for the given HttpRoute based on the cool-down period. |
| increment | back to summary |
|---|---|
| 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. | |
| LOG | back to summary |
|---|---|
| private static final Logger LOG Hides org. | |
| routeAttempts | back to summary |
|---|---|
| private final ConcurrentHashMap<HttpRoute, AtomicInteger> routeAttempts | |
| LinearBackoffManager | back to summary |
|---|---|
| public LinearBackoffManager(final ConnPoolControl<HttpRoute> connPoolControl) Constructs a new LinearBackoffManager with the specified connection pool control.
The backoff increment is set to
| |
| LinearBackoffManager | back to summary |
|---|---|
| public LinearBackoffManager(final ConnPoolControl<HttpRoute> connPoolControl, final int increment) Constructs a new LinearBackoffManager with the specified connection pool control and backoff increment.
| |
| backOff | back to summary |
|---|---|
| public void backOff(final HttpRoute route) Overrides org. Implements org. Doc from org. Reduces the number of maximum allowed connections for the specified route based on the exponential backoff algorithm. | |
| getBackedOffPoolSize | back to summary |
|---|---|
| protected int getBackedOffPoolSize(final int curr) Implements abstract org. 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.
| |
| probe | back to summary |
|---|---|
| public void probe(final HttpRoute route) Overrides org. Implements org. 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. | |
| setBackoffFactor | back to summary |
|---|---|
| public void setBackoffFactor(final double d) Implements abstract org. 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.
| |
| shouldSkip | back to summary |
|---|---|
| private boolean shouldSkip(final HttpRoute route, final 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. | |