Use expireAfterWrite to perform throttle

This commit is contained in:
PunKeel
2016-05-14 23:37:12 +02:00
committed by md_5
parent d14b96d55e
commit d9a8311b8e
2 changed files with 7 additions and 10 deletions

View File

@@ -8,25 +8,22 @@ import java.util.concurrent.TimeUnit;
public class ConnectionThrottle
{
private final int throttleTime;
private final Cache<InetAddress, Long> throttle;
private final Cache<InetAddress, Boolean> throttle;
public ConnectionThrottle(int throttleTime)
{
this.throttleTime = throttleTime;
this.throttle = CacheBuilder.newBuilder()
.concurrencyLevel( Runtime.getRuntime().availableProcessors() )
.initialCapacity( 100 )
.expireAfterAccess( throttleTime, TimeUnit.MILLISECONDS )
.expireAfterWrite( throttleTime, TimeUnit.MILLISECONDS )
.build();
}
public boolean throttle(InetAddress address)
{
Long value = throttle.getIfPresent( address );
long currentTime = System.currentTimeMillis();
boolean isThrottled = throttle.getIfPresent( address );
throttle.put( address, true );
throttle.put( address, currentTime );
return value != null && currentTime - value < throttleTime;
return isThrottled;
}
}