in src/main/java/com/amazonaws/services/simpleworkflow/flow/worker/Throttler.java [107:136]
public synchronized void throttle() throws InterruptedException {
long now = System.currentTimeMillis();
long checkPoint = checkPointTimes_.get(index_);
if (checkPoint > 0) {
long elapsed = now - checkPoint;
// if the time for this window is less than the minimum per window
if (elapsed >= 0 && elapsed < rateInterval_) {
long sleepInterval = rateInterval_ - elapsed - overslept_;
overslept_ = 0;
if (sleepInterval > 0) {
if (log.isTraceEnabled()) {
log.debug("Throttling "
+ name_
+ ": called "
+ checkPointTimes_.size()
+ " times in last "
+ elapsed
+ " milliseconds. Going to sleep for "
+ sleepInterval
+ " milliseconds.");
}
long t = System.currentTimeMillis();
Thread.sleep(sleepInterval);
overslept_ = System.currentTimeMillis() - t - sleepInterval;
}
}
}
checkPointTimes_.set(index_++, System.currentTimeMillis());
}