public static void updateRates(String type, long rate) { LOGGER.debug("updateRates : type={}, rate={}", type, rate); Iterator<RateLimiterDescriptor> iterator = rateLimiterMap.asMap().keySet().iterator(); while (iterator.hasNext()) { RateLimiterDescriptor oldRateDesc = iterator.next(); if (type.equals(oldRateDesc.getType())) { LOGGER.trace("updateRates : invalidated rate={}", oldRateDesc); rateLimiterMap.invalidate(oldRateDesc); RateLimiterDescriptor newRateDesc = new RateLimiterDescriptor(oldRateDesc.getType(), oldRateDesc.getAppId(), rate); LOGGER.trace("updateRates : updating rate desc={}, rate={}", newRateDesc, rate); rateLimiterMap.put(newRateDesc, RateLimiter.create(rate)); rateLimiterMap.refresh(newRateDesc); } } }
public static boolean isAllowed(RateLimiterDescriptor descriptor) { if (descriptor.getPermitsPerSecond() <= 0) { LOGGER.trace("isAllowed : rate limiting disabled"); return true; } try { LOGGER.trace("isAllowed : getting ratelimiter for descriptor={}", descriptor); RateLimiter r = getOrCreate(descriptor); LOGGER.trace("isAllowed : retireved ratelimiter={}, rate={}", r, r.getRate()); return r.tryAcquire(); } catch (ExecutionException e) { LOGGER.error( "isAllowed : Caught exception getting RateLimiter for descriptor : {}", descriptor, e); return false; } }
public RateLimiter load(RateLimiterDescriptor descriptor) { return RateLimiter.create(descriptor.getPermitsPerSecond()); }