From ca2a7d9992a311c017655e882a1ae797559611fc Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Mon, 11 Jan 2021 13:21:36 +0800 Subject: [PATCH] fix: decr global concurrents before response if apply api/service/service_default rate limit config --- src/main/java/we/filter/FlowControlFilter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/we/filter/FlowControlFilter.java b/src/main/java/we/filter/FlowControlFilter.java index 3773f38..d892ab0 100644 --- a/src/main/java/we/filter/FlowControlFilter.java +++ b/src/main/java/we/filter/FlowControlFilter.java @@ -114,6 +114,10 @@ public class FlowControlFilter extends ProxyAggrFilter { if (concurrentOrRpsExceed) { + if (rlc.type == ResourceRateLimitConfig.Type.API || rlc.type == ResourceRateLimitConfig.Type.SERVICE || rlc.type == ResourceRateLimitConfig.Type.SERVICE_DEFAULT) { + flowStat.decrConcurrentRequest(ResourceRateLimitConfig.GLOBAL, currentTimeSlot); + } + StringBuilder b = ThreadContext.getStringBuilder(); b.append(WebUtils.getClientService(exchange)).append(Constants.Symbol.SPACE).append(WebUtils.getClientReqPath(exchange)); b.append(exceed).append(rlc.resource).append(concurrents).append(rlc.concurrents).append(orQps).append(rlc.qps); @@ -137,7 +141,8 @@ public class FlowControlFilter extends ProxyAggrFilter { t -> { inTheEnd(exchange, start, currentTimeSlot, false); } - ).doOnCancel( + ) + .doOnCancel( () -> { inTheEnd(exchange, start, currentTimeSlot, false); }