org.apache.hc.client5.http.impl.classic

## Class AIMDBackoffManager

- java.lang.Object
- - org.apache.hc.client5.http.impl.classic.AbstractBackoff
  - - org.apache.hc.client5.http.impl.classic.AIMDBackoffManager

- All Implemented Interfaces:
    BackoffManager

      @Contract(threading=SAFE)
      public class AIMDBackoffManager
      extends AbstractBackoff

  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

    Constructors
    Constructor and Description
    `AIMDBackoffManager(ConnPoolControl<HttpRoute> connPerRoute)` Constructs an `AIMDBackoffManager` with the specified `ConnPoolControl` and `Clock`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected int` | `getBackedOffPoolSize(int curr)` Returns the backed-off pool size based on the current pool size.
    `void` | `setBackoffFactor(double d)` Sets the factor to use when backing off; the new per-host limit will be roughly the current max times this factor.

    - ### Methods inherited from class org.apache.hc.client5.http.impl.classic.AbstractBackoff

      `backOff, getBackoffFactor, getCap, getConnPerRoute, getCoolDown, getLastRouteBackoffs, getLastRouteProbes, getLastUpdate, getTimeInterval, probe, setCoolDown, setPerHostConnectionCap`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AIMDBackoffManager

          public AIMDBackoffManager(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` - the `ConnPoolControl` that manages per-host routing maximums

  - ### Method Detail

    - #### getBackedOffPoolSize

          protected int getBackedOffPoolSize(int curr)

      Returns the backed-off pool size based on the current pool size. The new pool size is calculated as the floor of (backoffFactor * curr).
      Specified by:
        `getBackedOffPoolSize` in class `AbstractBackoff`
      Parameters:
        `curr` - the current pool size
      Returns:
        the backed-off pool size, with a minimum value of 1

    - #### setBackoffFactor

          public void setBackoffFactor(double d)

      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` - must be between 0.0 and 1.0, exclusive.

Copyright © 1999–2021 The Apache Software Foundation. All rights reserved.