public class DefaultAsyncBucketProxy extends Object implements AsyncBucketProxy, AsyncOptimizationController, SchedulingBucket
Constructor and Description |
---|
DefaultAsyncBucketProxy(AsyncCommandExecutor commandExecutor,
RecoveryStrategy recoveryStrategy,
Supplier<CompletableFuture<BucketConfiguration>> configurationSupplier) |
Modifier and Type | Method and Description |
---|---|
CompletableFuture<Void> |
addTokens(long tokensToAdd)
Asynchronous version of
Bucket.addTokens(long) , follows the same semantic. |
SchedulingBucket |
asScheduler()
Returns asynchronous view of this bucket that allows to use bucket as async scheduler.
|
AsyncVerboseBucket |
asVerbose()
Returns the verbose view of this bucket.
|
CompletableFuture<Void> |
consume(long tokensToConsume,
ScheduledExecutorService scheduler)
Consumes the specified number of tokens from the bucket.
|
CompletableFuture<Long> |
consumeIgnoringRateLimits(long tokensToConsume)
Asynchronous version of
Bucket.consumeIgnoringRateLimits(long) , follows the same semantic. |
CompletableFuture<EstimationProbe> |
estimateAbilityToConsume(long numTokens)
Asynchronous version of
Bucket.estimateAbilityToConsume(long) , follows the same semantic. |
CompletableFuture<Void> |
forceAddTokens(long tokensToAdd)
Asynchronous version of
Bucket.forceAddTokens(long) , follows the same semantic. |
CompletableFuture<Long> |
getAvailableTokens()
Returns amount of available tokens in this bucket.
|
AsyncOptimizationController |
getOptimizationController()
Returns optimization controller for this proxy.
|
CompletableFuture<Void> |
replaceConfiguration(BucketConfiguration newConfiguration,
TokensInheritanceStrategy tokensInheritanceStrategy)
Has the same semantic with
Bucket.replaceConfiguration(BucketConfiguration, TokensInheritanceStrategy) |
CompletableFuture<Void> |
syncByCondition(long unsynchronizedTokens,
Duration timeSinceLastSync)
Initiates immediate synchronization of local copy of bucket with remote storage in case of both conditions bellow are
true :
Accumulated amount of locally consumed tokens without external synchronization is greater than or equal to unsynchronizedTokens
Time passed since last synchronization with external storage is greater than or equal to timeSinceLastSync
|
AsyncBucketProxy |
toListenable(BucketListener listener)
Returns new copy of this bucket instance decorated by
listener . |
CompletableFuture<Boolean> |
tryConsume(long tokensToConsume)
Asynchronous version of
Bucket.tryConsume(long) , follows the same semantic. |
CompletableFuture<Boolean> |
tryConsume(long tokensToConsume,
long maxWaitTimeNanos,
ScheduledExecutorService scheduler)
Tries to consume the specified number of tokens from the bucket.
|
CompletableFuture<ConsumptionProbe> |
tryConsumeAndReturnRemaining(long tokensToConsume)
Asynchronous version of
Bucket.tryConsumeAndReturnRemaining(long) , follows the same semantic. |
CompletableFuture<Long> |
tryConsumeAsMuchAsPossible()
Asynchronous version of
Bucket.tryConsumeAsMuchAsPossible() , follows the same semantic. |
CompletableFuture<Long> |
tryConsumeAsMuchAsPossible(long limit)
Asynchronous version of
Bucket.tryConsumeAsMuchAsPossible(long) , follows the same semantic. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
syncImmediately
tryConsume
public DefaultAsyncBucketProxy(AsyncCommandExecutor commandExecutor, RecoveryStrategy recoveryStrategy, Supplier<CompletableFuture<BucketConfiguration>> configurationSupplier)
public AsyncVerboseBucket asVerbose()
AsyncBucketProxy
asVerbose
in interface AsyncBucketProxy
public AsyncBucketProxy toListenable(BucketListener listener)
AsyncBucketProxy
listener
.
The created bucket will share same tokens with source bucket and vice versa.
See javadocs for BucketListener
in order to understand semantic of listener.toListenable
in interface AsyncBucketProxy
listener
- the listener of bucket events.listener
public SchedulingBucket asScheduler()
AsyncBucketProxy
asScheduler
in interface AsyncBucketProxy
public CompletableFuture<Long> consumeIgnoringRateLimits(long tokensToConsume)
AsyncBucketProxy
Bucket.consumeIgnoringRateLimits(long)
, follows the same semantic.consumeIgnoringRateLimits
in interface AsyncBucketProxy
Bucket.consumeIgnoringRateLimits(long)
public CompletableFuture<Boolean> tryConsume(long tokensToConsume)
AsyncBucketProxy
Bucket.tryConsume(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.tryConsume(long)
tryConsume
in interface AsyncBucketProxy
tokensToConsume
- The number of tokens to consume from the bucket, must be a positive number.true
if the numTokens were consumed and completed by false
otherwise.Bucket.tryConsume(long)
public CompletableFuture<ConsumptionProbe> tryConsumeAndReturnRemaining(long tokensToConsume)
AsyncBucketProxy
Bucket.tryConsumeAndReturnRemaining(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.tryConsumeAndReturnRemaining(long)
tryConsumeAndReturnRemaining
in interface AsyncBucketProxy
tokensToConsume
- The number of tokens to consume from the bucket, must be a positive number.probe
which describes both result of consumption and tokens remaining in the bucket after consumption.Bucket.tryConsumeAndReturnRemaining(long)
public CompletableFuture<EstimationProbe> estimateAbilityToConsume(long numTokens)
AsyncBucketProxy
Bucket.estimateAbilityToConsume(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.estimateAbilityToConsume(long)
estimateAbilityToConsume
in interface AsyncBucketProxy
numTokens
- The number of tokens to consume from the bucket, must be a positive number.probe
which describes the ability to consume specified amount of tokens.Bucket.estimateAbilityToConsume(long)
public CompletableFuture<Long> tryConsumeAsMuchAsPossible()
AsyncBucketProxy
Bucket.tryConsumeAsMuchAsPossible()
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.tryConsumeAsMuchAsPossible()
tryConsumeAsMuchAsPossible
in interface AsyncBucketProxy
Bucket.tryConsumeAsMuchAsPossible()
public CompletableFuture<Long> tryConsumeAsMuchAsPossible(long limit)
AsyncBucketProxy
Bucket.tryConsumeAsMuchAsPossible(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.tryConsumeAsMuchAsPossible(long)
tryConsumeAsMuchAsPossible
in interface AsyncBucketProxy
limit
- maximum number of tokens to consume, should be positive.Bucket.tryConsumeAsMuchAsPossible(long)
public CompletableFuture<Boolean> tryConsume(long tokensToConsume, long maxWaitTimeNanos, ScheduledExecutorService scheduler)
SchedulingBucket
The algorithm for all type of buckets is following:
ScheduledExecutorService.schedule(Runnable, long, TimeUnit)
,
when delay equals to time required to refill the deficit of tokens. After scheduler executes task the future completed by true.
CompletableFuture.thenApplyAsync(Function, Executor)
.tryConsume
in interface SchedulingBucket
tokensToConsume
- The number of tokens to consume from the bucket.maxWaitTimeNanos
- limit of time(in nanoseconds) which thread can wait.scheduler
- used to delayed future completionpublic CompletableFuture<Void> consume(long tokensToConsume, ScheduledExecutorService scheduler)
SchedulingBucket
The algorithm for all type of buckets is following:
ScheduledExecutorService.schedule(Runnable, long, TimeUnit)
,
when delay equals to time required to refill the deficit of tokens. After scheduler executes task the future completed.
CompletableFuture.thenApplyAsync(Function, Executor)
.consume
in interface SchedulingBucket
tokensToConsume
- The number of tokens to consume from the bucket.scheduler
- used to delayed future completionpublic CompletableFuture<Void> replaceConfiguration(BucketConfiguration newConfiguration, TokensInheritanceStrategy tokensInheritanceStrategy)
AsyncBucketProxy
Bucket.replaceConfiguration(BucketConfiguration, TokensInheritanceStrategy)
replaceConfiguration
in interface AsyncBucketProxy
public CompletableFuture<Void> addTokens(long tokensToAdd)
AsyncBucketProxy
Bucket.addTokens(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.addTokens(long)
addTokens
in interface AsyncBucketProxy
tokensToAdd
- number of tokens to addBucket.addTokens(long)
public CompletableFuture<Void> forceAddTokens(long tokensToAdd)
AsyncBucketProxy
Bucket.forceAddTokens(long)
, follows the same semantic.
The algorithm for distribute buckets is following:
CompletableFuture.thenApplyAsync(Function, Executor)
.
The algorithm for local buckets is following:
Bucket.addTokens(long)
forceAddTokens
in interface AsyncBucketProxy
tokensToAdd
- number of tokens to addBucket.addTokens(long)
public CompletableFuture<Long> getAvailableTokens()
AsyncBucketProxy
This method designed to be used only for monitoring and testing, you should never use this method for business cases, because available tokens can be changed by concurrent transactions for case of multithreaded/multi-process environment.
getAvailableTokens
in interface AsyncBucketProxy
public AsyncOptimizationController getOptimizationController()
AsyncBucketProxy
This method is actual only if an optimization was applied during bucket construction via RemoteAsyncBucketBuilder.withOptimization(Optimization)
otherwise returned controller will do nothing.
getOptimizationController
in interface AsyncBucketProxy
public CompletableFuture<Void> syncByCondition(long unsynchronizedTokens, Duration timeSinceLastSync)
AsyncOptimizationController
true
:
unsynchronizedTokens
timeSinceLastSync
syncByCondition
in interface AsyncOptimizationController
unsynchronizedTokens
- criterion for accumulated amount of unsynchronized tokenstimeSinceLastSync
- criterion for time passed since last synchronizationCopyright © 2022. All rights reserved.