> @@ -126,6 +127,9 @@ public void imposeBackoffExponentialDelay(long period, 
> int pow, int failureCount
>     public void imposeBackoffExponentialDelay(long period, long maxPeriod, 
> int pow, int failureCount, int max,
>              String commandDescription) {
>        long delayMs = (long) (period * Math.pow(failureCount, pow));
> +      // Add random delay to avoid thundering herd problem when multiple
> +      // simultaneous failed requests retry after sleeping for the same 
> delay.
> +      delayMs += new Random().nextInt((int) (delayMs / 10));

```delayMs``` defaults to a small value, 50 ms, although scales up to 500 ms.  
10% jitter may be suboptimal; I chose this value to agree with our existing 
tests.

Java 6 Javadoc does not guarantee thread-safety:

http://docs.oracle.com/javase/6/docs/api/java/util/Random.html

Although StackOverflow and the Java bug tracker suggest that it is:

http://stackoverflow.com/questions/5819638/is-random-class-thread-safe
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6362070

Prefer to keep this simple if possible since we only see this on the uncommon 
failure path.

---
Reply to this email directly or view it on GitHub:
https://github.com/jclouds/jclouds/pull/286/files#r9637620

Reply via email to