alluxio.util.RateLimiter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alluxio-core-common Show documentation
Show all versions of alluxio-core-common Show documentation
Common utilities shared in Alluxio core modules
/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.util;
import java.util.Optional;
/**
* Used to limit the rate of operations. This rate limiter is not thread safe
* and the operations are non-blocking. It is used by acquiring a permit for
* each operation, then checking how the operation should wait by calling
* {@link RateLimiter#getWaitTimeNanos(long)}.
*/
public interface RateLimiter {
/**
* Acquire a permit for the next operation.
* @return {@link Optional#empty()} if no waiting is needed, otherwise
* the value contained in the returned optional is the permit, which
* can be used in calls to {@link RateLimiter#getWaitTimeNanos}
* to see how long to wait for the operation to be ready.
*/
Optional acquire();
/**
* Checks how long is needed to wait for this permit to be ready.
* @param permit the permit returned by {@link RateLimiter#acquire()}
* @return the amount of time needed to wait in nanoseconds
*/
long getWaitTimeNanos(long permit);
/**
* @param permitsPerSecond permits per second
* @return a rate limiter
*/
static RateLimiter createRateLimiter(long permitsPerSecond) {
if (permitsPerSecond <= 0) {
return new RateLimiter() {
@Override
public Optional acquire() {
return Optional.empty();
}
@Override
public long getWaitTimeNanos(long permit) {
return 0;
}
};
}
return new SimpleRateLimiter(permitsPerSecond);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy