Skip to content

Commit

Permalink
Fix the issue caused by unordered version numbers.
Browse files Browse the repository at this point in the history
  • Loading branch information
chenzhiguo committed Jun 25, 2024
1 parent fa23c48 commit 8b34cb8
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ default ConcurrencyLimiter get(ConcurrencyLimitPolicy policy) {
}
AtomicReference<ConcurrencyLimiter> reference = CONCURRENCY_LIMITERS.computeIfAbsent(policy.getId(), n -> new AtomicReference<>());
ConcurrencyLimiter concurrencyLimiter = reference.get();
if (concurrencyLimiter != null && concurrencyLimiter.getPolicy().getVersion() >= policy.getVersion()) {
if (concurrencyLimiter != null && concurrencyLimiter.getPolicy().getVersion() == policy.getVersion()) {
return concurrencyLimiter;
}
ConcurrencyLimiter newLimiter = create(policy);
while (true) {
concurrencyLimiter = reference.get();
if (concurrencyLimiter == null || concurrencyLimiter.getPolicy().getVersion() < policy.getVersion()) {
if (concurrencyLimiter == null || concurrencyLimiter.getPolicy().getVersion() != policy.getVersion()) {
if (reference.compareAndSet(concurrencyLimiter, newLimiter)) {
concurrencyLimiter = newLimiter;
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@ public RateLimiter get(RateLimitPolicy policy) {
}
AtomicReference<RateLimiter> reference = rateLimiters.computeIfAbsent(policy.getId(), n -> new AtomicReference<>());
RateLimiter rateLimiter = reference.get();
if (rateLimiter != null && rateLimiter.getPolicy().getVersion() >= policy.getVersion()) {
if (rateLimiter != null && rateLimiter.getPolicy().getVersion() == policy.getVersion()) {
return rateLimiter;
}
RateLimiter newLimiter = create(policy);
while (true) {
rateLimiter = reference.get();
if (rateLimiter == null || rateLimiter.getPolicy().getVersion() < policy.getVersion()) {
if (rateLimiter == null || rateLimiter.getPolicy().getVersion() != policy.getVersion()) {
if (reference.compareAndSet(rateLimiter, newLimiter)) {
rateLimiter = newLimiter;
break;
Expand Down

0 comments on commit 8b34cb8

Please sign in to comment.