Top Description Constructors Methods
org.apache.hc.client5.http.impl.classic

public Class AIMDBackoffManager

extends AbstractBackoff
Class Inheritance
Annotations
@Contract
threading:SAFE
Imports
org.apache.hc.client5.http.HttpRoute, org.apache.hc.core5.annotation.Contract, .ThreadingBehavior, org.apache.hc.core5.pool.ConnPoolControl, org.apache.hc.core5.util.Args

The AIMDBackoffManager applies an additive increase, multiplicative decrease (AIMD) to managing a dynamic limit to the number of connections allowed to a given host. You may want to experiment with the settings for the cooldown periods and the backoff factor to get the adaptive behavior you want.

Generally speaking, shorter cooldowns will lead to more steady-state variability but faster reaction times, while longer cooldowns will lead to more stable equilibrium behavior but slower reaction times.

Similarly, higher backoff factors promote greater utilization of available capacity at the expense of fairness among clients. Lower backoff factors allow equal distribution of capacity among clients (fairness) to happen faster, at the expense of having more server capacity unused in the short term.

Since
4.2

Constructor Summary

AccessConstructor and Description
public
AIMDBackoffManager(final ConnPoolControl<HttpRoute>
the ConnPoolControl that manages per-host routing maximums
connPerRoute
)

Constructs an AIMDBackoffManager with the specified ConnPoolControl and Clock.

Method Summary

Modifier and TypeMethod and Description
protected int

Returns:

the backed-off pool size, with a minimum value of 1
getBackedOffPoolSize
(final int
the current pool size
curr
)

Implements abstract org.apache.hc.client5.http.impl.classic.AbstractBackoff.getBackedOffPoolSize.

Returns the backed-off pool size based on the current pool size.
public void
setBackoffFactor(final double
must be between 0.0 and 1.0, exclusive.
d
)

Implements abstract org.apache.hc.client5.http.impl.classic.AbstractBackoff.setBackoffFactor.

Sets the factor to use when backing off; the new per-host limit will be roughly the current max times this factor.
Inherited from org.apache.hc.client5.http.impl.classic.AbstractBackoff:
backOffgetBackoffFactorgetCapgetConnPerRoutegetCoolDowngetLastRouteBackoffsgetLastRouteProbesgetLastUpdategetTimeIntervalprobesetCoolDownsetPerHostConnectionCap

Constructor Detail

AIMDBackoffManagerback to summary
public AIMDBackoffManager(final ConnPoolControl<HttpRoute> connPerRoute)

Constructs an AIMDBackoffManager with the specified ConnPoolControl and Clock.

This constructor is primarily used for testing purposes, allowing the injection of a custom Clock implementation.

Parameters
connPerRoute:ConnPoolControl<HttpRoute>

the ConnPoolControl that manages per-host routing maximums

Method Detail

getBackedOffPoolSizeback to summary
protected int getBackedOffPoolSize(final int curr)

Implements abstract org.apache.hc.client5.http.impl.classic.AbstractBackoff.getBackedOffPoolSize.

Returns the backed-off pool size based on the current pool size. The new pool size is calculated as the floor of (backoffFactor * curr).

Parameters
curr:int

the current pool size

Returns:int

the backed-off pool size, with a minimum value of 1

setBackoffFactorback to summary
public void setBackoffFactor(final double d)

Implements abstract org.apache.hc.client5.http.impl.classic.AbstractBackoff.setBackoffFactor.

Sets the factor to use when backing off; the new per-host limit will be roughly the current max times this factor. Math.floor is applied in the case of non-integer outcomes to ensure we actually decrease the pool size. Pool sizes are never decreased below 1, however. Defaults to 0.5.

Parameters
d:double

must be between 0.0 and 1.0, exclusive.

Annotations
@Override