if (eagerTokens > requestedPermits && this.tokenBucket.getTokens(eagerTokens, 0, TimeUnit.MILLISECONDS)) { return eagerTokens; if (this.tokenBucket.getTokens(requestedPermits, allowedTimeout, TimeUnit.MILLISECONDS)) { return requestedPermits; if (this.tokenBucket.getTokens(minPermits, allowedTimeout, TimeUnit.MILLISECONDS)) { return minPermits;
@Override public Boolean call() { try { return this.tokenBucket.getTokens(this.tokens, this.timeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException ie) { throw new RuntimeException(ie); } } }
if (eagerTokens > requestedPermits && this.tokenBucket.getTokens(eagerTokens, 0, TimeUnit.MILLISECONDS)) { return eagerTokens; if (this.tokenBucket.getTokens(requestedPermits, allowedTimeout, TimeUnit.MILLISECONDS)) { return requestedPermits; if (this.tokenBucket.getTokens(minPermits, allowedTimeout, TimeUnit.MILLISECONDS)) { return minPermits;
@Test public void testTimeout() throws Exception { TokenBucket tokenBucket = new TokenBucket(100, 0); // If it cannot satisfy the request within the timeout, return false immediately Assert.assertFalse(tokenBucket.getTokens(100, 1, TimeUnit.MILLISECONDS)); Assert.assertFalse(tokenBucket.getTokens(100, 10, TimeUnit.MILLISECONDS)); Assert.assertFalse(tokenBucket.getTokens(100, 100, TimeUnit.MILLISECONDS)); Assert.assertTrue(tokenBucket.getTokens(10, 101, TimeUnit.MILLISECONDS)); // Can use stored tokens to satisfy request tokenBucket = new TokenBucket(100, 100); Thread.sleep(200); // fill up bucket Assert.assertTrue(tokenBucket.getTokens(20, 101, TimeUnit.MILLISECONDS)); }