in ingest/src/main/java/com/microsoft/azure/kusto/ingest/resources/RankedStorageAccount.java [45:83]
private Bucket adjustForTimePassed() {
if (buckets.isEmpty()) {
Bucket b = new Bucket();
try {
bucketsLock.writeLock().lock();
buckets.push(b);
} finally {
bucketsLock.writeLock().unlock();
}
lastActionTimestamp = timeProvider.currentTimeMillis();
return b;
}
long timePassed = timeProvider.currentTimeMillis() - lastActionTimestamp;
long bucketsToCreate = timePassed / bucketDurationMillis;
if (bucketsToCreate == 0) {
return buckets.peek();
}
try {
bucketsLock.writeLock().lock();
if (bucketsToCreate >= maxNumberOfBuckets) {
buckets.clear();
buckets.push(new Bucket());
} else {
for (int i = 0; i < bucketsToCreate; i++) {
buckets.push(new Bucket());
if (buckets.size() > maxNumberOfBuckets) {
buckets.poll();
}
}
}
} finally {
bucketsLock.writeLock().unlock();
}
lastActionTimestamp = timeProvider.currentTimeMillis();
return buckets.peek();
}