fix backoff overflow #107
This commit is contained in:
@@ -17,6 +17,10 @@ public class Backoff {
|
|||||||
int deviation = (int) Math.floor(rand * this.jitter * ms);
|
int deviation = (int) Math.floor(rand * this.jitter * ms);
|
||||||
ms = (((int) Math.floor(rand * 10)) & 1) == 0 ? ms - deviation : ms + deviation;
|
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);
|
return Math.min(ms, this.max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,4 +19,17 @@ public class BackoffTest {
|
|||||||
assertTrue(100 == b.duration());
|
assertTrue(100 == b.duration());
|
||||||
assertTrue(200 == 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user