in concurrency-loadbalancer-core/src/main/java/com/uber/concurrency/loadbalancer/utils/IntervalLimiter.java [41:52]
public long acquire() {
long oldTick = this.lastTick.get();
long newTick = this.ticker.read();
long age = newTick - oldTick;
if (age > intervalNano) {
long newIntervalStartTick = newTick - age % intervalNano;
if (this.lastTick.compareAndSet(oldTick, newIntervalStartTick)) {
return age;
}
}
return -1;
}