fix backoff overflow #107

This commit is contained in:
Naoyuki Kanezawa
2015-03-07 22:10:09 +09:00
parent 13492ddd07
commit d6e22703b8
2 changed files with 17 additions and 0 deletions

View File

@@ -17,6 +17,10 @@ public class Backoff {
int deviation = (int) Math.floor(rand * this.jitter * ms);
ms = (((int) Math.floor(rand * 10)) & 1) == 0 ? ms - deviation : ms + deviation;
}
if (ms < this.ms) {
// overflow happened
ms = Long.MAX_VALUE;
}
return Math.min(ms, this.max);
}

View File

@@ -19,4 +19,17 @@ public class BackoffTest {
assertTrue(100 == b.duration());
assertTrue(200 == b.duration());
}
@Test
public void durationOverflow() {
Backoff b = new Backoff();
b.setMin(100);
b.setMax(10000);
b.setJitter(1.0);
for (int i = 0; i < 100; i++) {
long duration = b.duration();
assertTrue(100 <= duration && duration <= 10000);
}
}
}