This is an automated email from the ASF dual-hosted git repository.
yunlong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 077f889fad [type:fix][ISSUE #5100] Redis cluster mode,fix rate
limiter[concurrent、slidingwindow] redis key (#5286)
077f889fad is described below
commit 077f889fad946b77fe3f56b69c5596076d0b4a60
Author: CytFree <[email protected]>
AuthorDate: Fri Nov 10 11:17:18 2023 +0800
[type:fix][ISSUE #5100] Redis cluster mode,fix rate
limiter[concurrent、slidingwindow] redis key (#5286)
* fix: redis cluster mode,fix rate limiter[Concurrent、SlidingWindow] redis
key
* fix: check style ConcurrentRateLimiterAlgorithm.java
---------
Co-authored-by: CYT <[email protected]>
Co-authored-by: yunlongn <[email protected]>
---
.../plugin/ratelimiter/algorithm/ConcurrentRateLimiterAlgorithm.java | 5 +++--
.../ratelimiter/algorithm/SlidingWindowRateLimiterAlgorithm.java | 5 ++++-
.../META-INF/scripts/sliding_window_request_rate_limiter.lua | 2 +-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/ConcurrentRateLimiterAlgorithm.java
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/ConcurrentRateLimiterAlgorithm.java
index f7f243275d..0fbe8756db 100644
---
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/ConcurrentRateLimiterAlgorithm.java
+++
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/ConcurrentRateLimiterAlgorithm.java
@@ -47,8 +47,9 @@ public class ConcurrentRateLimiterAlgorithm extends
AbstractRateLimiterAlgorithm
@Override
public List<String> getKeys(final String id) {
- String tokenKey = getKeyName() + ".{" + id + "}.tokens";
- String requestKey = UUIDUtils.getInstance().generateShortUuid();
+ String hashKeyPart = ".{" + id + "}";
+ String tokenKey = getKeyName() + hashKeyPart + ".tokens";
+ String requestKey = UUIDUtils.getInstance().generateShortUuid() +
hashKeyPart + ".request";
return Arrays.asList(tokenKey, requestKey);
}
diff --git
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/SlidingWindowRateLimiterAlgorithm.java
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/SlidingWindowRateLimiterAlgorithm.java
index 660c4c4390..2fe5852271 100644
---
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/SlidingWindowRateLimiterAlgorithm.java
+++
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/java/org/apache/shenyu/plugin/ratelimiter/algorithm/SlidingWindowRateLimiterAlgorithm.java
@@ -41,6 +41,9 @@ public class SlidingWindowRateLimiterAlgorithm extends
AbstractRateLimiterAlgori
@Override
public List<String> getKeys(final String id) {
- return Arrays.asList((getKeyName() + ".{" + id) + "}.tokens",
UUIDUtils.getInstance().generateShortUuid());
+ String hashKeyPart = ".{" + id + "}";
+ String tokenKey = getKeyName() + hashKeyPart + ".tokens";
+ String timestampKey = UUIDUtils.getInstance().generateShortUuid() +
hashKeyPart + ".timestamp";
+ return Arrays.asList(tokenKey, timestampKey);
}
}
diff --git
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/resources/META-INF/scripts/sliding_window_request_rate_limiter.lua
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/resources/META-INF/scripts/sliding_window_request_rate_limiter.lua
index 340de7df7f..cb2911bd38 100644
---
a/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/resources/META-INF/scripts/sliding_window_request_rate_limiter.lua
+++
b/shenyu-plugin/shenyu-plugin-fault-tolerance/shenyu-plugin-ratelimiter/src/main/resources/META-INF/scripts/sliding_window_request_rate_limiter.lua
@@ -49,7 +49,7 @@ end
--redis.log(redis.LOG_WARNING, "allowed_num " .. allowed_num)
redis.call('zremrangebyscore', tokens_key, 0, now - window_size / window_time)
-redis.call('expire', tokens_key, window_size)
+redis.call('expire', tokens_key, math.ceil(window_size))
return { allowed_num, remain_request }