From 8b34cb80000ceeab49f76d67c3f74d0c88976791 Mon Sep 17 00:00:00 2001 From: chenzhiguo Date: Tue, 25 Jun 2024 20:52:46 +0800 Subject: [PATCH] Fix the issue caused by unordered version numbers. --- .../invoke/concurrencylimit/ConcurrencyLimiterFactory.java | 4 ++-- .../governance/invoke/ratelimit/AbstractLimiterFactory.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiterFactory.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiterFactory.java index d5892e26..fb068901 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiterFactory.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/concurrencylimit/ConcurrencyLimiterFactory.java @@ -50,13 +50,13 @@ default ConcurrencyLimiter get(ConcurrencyLimitPolicy policy) { } AtomicReference 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; diff --git a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractLimiterFactory.java b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractLimiterFactory.java index f46af583..8e268032 100644 --- a/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractLimiterFactory.java +++ b/joylive-core/joylive-governance-api/src/main/java/com/jd/live/agent/governance/invoke/ratelimit/AbstractLimiterFactory.java @@ -58,13 +58,13 @@ public RateLimiter get(RateLimitPolicy policy) { } AtomicReference 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;