private Bucket adjustForTimePassed()

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();
    }