diff --git a/src/main/java/com/box/sdk/BackoffCounter.java b/src/main/java/com/box/sdk/BackoffCounter.java index 2b40b3e4a..15286feae 100644 --- a/src/main/java/com/box/sdk/BackoffCounter.java +++ b/src/main/java/com/box/sdk/BackoffCounter.java @@ -5,8 +5,8 @@ class BackoffCounter { private static final Logger LOGGER = Logger.getLogger(BackoffCounter.class.getName()); - private static final int MIN_EXPONENT = 10; - private static final int MAX_EXPONENT = 16; + private static final int BASE_TIMEOUT = 1000; + private static final double RANDOM_FACTOR = 0.5; private final Time time; @@ -49,11 +49,11 @@ public void reset(int maxAttempts) { } private int calculateDelay() { - int exponent = (MIN_EXPONENT + (this.maxAttempts - (this.attemptsRemaining + 1))); - if (exponent > MAX_EXPONENT) { - exponent = MAX_EXPONENT; - } + int exponent = this.maxAttempts - this.attemptsRemaining; + double minWindow = 1 - RANDOM_FACTOR; + double maxWindow = 1 + RANDOM_FACTOR; + double jitter = (Math.random() * (maxWindow - minWindow)) + minWindow; - return (2 << exponent); + return (int) (Math.pow(2, exponent) * BASE_TIMEOUT * jitter); } } diff --git a/src/main/java/com/box/sdk/BoxAPIConnection.java b/src/main/java/com/box/sdk/BoxAPIConnection.java index 7d7c03d0b..bf66a6685 100644 --- a/src/main/java/com/box/sdk/BoxAPIConnection.java +++ b/src/main/java/com/box/sdk/BoxAPIConnection.java @@ -22,7 +22,7 @@ public class BoxAPIConnection { /** * The default maximum number of times an API request will be tried when an error occurs. */ - public static final int DEFAULT_MAX_ATTEMPTS = 3; + public static final int DEFAULT_MAX_ATTEMPTS = 5; private static final String AUTHORIZATION_URL = "https://account.box.com/api/oauth2/authorize"; private static final String TOKEN_URL_STRING = "https://api.box.com/oauth2/token";