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 }
 

Reply via email to