You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/01/17 00:57:15 UTC
[servicecomb-java-chassis] branch 1.3.x updated: [SCB-2369] improve fow control logs and message (#2696)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch 1.3.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/1.3.x by this push:
new ad53a38 [SCB-2369] improve fow control logs and message (#2696)
ad53a38 is described below
commit ad53a38dd7a18cfe76705f16f8772859bdf890c4
Author: david6969xin <86...@users.noreply.github.com>
AuthorDate: Mon Jan 17 08:57:07 2022 +0800
[SCB-2369] improve fow control logs and message (#2696)
---
.../apache/servicecomb/demo/pojo/client/TestFlowControl.java | 4 ++--
.../servicecomb/qps/ConsumerQpsFlowControlHandler.java | 2 +-
.../servicecomb/qps/ProviderQpsFlowControlHandler.java | 2 +-
.../apache/servicecomb/qps/strategy/FixedWindowStrategy.java | 12 +++++++++++-
.../apache/servicecomb/qps/strategy/LeakyBucketStrategy.java | 6 ++++++
.../servicecomb/qps/TestConsumerQpsFlowControlHandler.java | 2 +-
.../servicecomb/qps/TestProviderQpsFlowControlHandler.java | 2 +-
7 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestFlowControl.java b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestFlowControl.java
index b558d22..937c9e7 100644
--- a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestFlowControl.java
+++ b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestFlowControl.java
@@ -43,8 +43,8 @@ public class TestFlowControl {
public void testAllTransport() throws Exception {
// 1.3.2 未统一。 2.1.5 统一了。
- String serverMsg = "InvocationException: code=429;msg={message=rejected by qps flowcontrol}";
- String clientMsg = "InvocationException: code=429;msg=CommonExceptionData [message=rejected by qps flowcontrol]";
+ String serverMsg = "InvocationException: code=429;msg={message=provider request rejected by qps flowcontrol}";
+ String clientMsg = "InvocationException: code=429;msg=CommonExceptionData [message=consumer request rejected by qps flowcontrol]";
testFlowControl((num) -> client1.foo(num), true, serverMsg);
testFlowControl((num) -> client1.bar(num), false, serverMsg);
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ConsumerQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ConsumerQpsFlowControlHandler.java
index 1d81311..f04ace8 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ConsumerQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ConsumerQpsFlowControlHandler.java
@@ -40,7 +40,7 @@ public class ConsumerQpsFlowControlHandler implements Handler {
QpsStrategy qpsStrategy = qpsControllerMgr.getOrCreate(invocation.getMicroserviceName(), invocation);
if (qpsStrategy.isLimitNewRequest()) {
// return http status 429
- CommonExceptionData errorData = new CommonExceptionData("rejected by qps flowcontrol");
+ CommonExceptionData errorData = new CommonExceptionData("consumer request rejected by qps flowcontrol");
asyncResp.consumerFail(
new InvocationException(QpsConst.TOO_MANY_REQUESTS_STATUS, errorData));
return;
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ProviderQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ProviderQpsFlowControlHandler.java
index 0abdd47..009f81c 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ProviderQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/ProviderQpsFlowControlHandler.java
@@ -49,7 +49,7 @@ public class ProviderQpsFlowControlHandler implements Handler {
private boolean isLimitNewRequest(QpsStrategy qpsStrategy, AsyncResponse asyncResp) {
if (qpsStrategy.isLimitNewRequest()) {
- CommonExceptionData errorData = new CommonExceptionData("rejected by qps flowcontrol");
+ CommonExceptionData errorData = new CommonExceptionData("provider request rejected by qps flowcontrol");
asyncResp.producerFail(new InvocationException(QpsConst.TOO_MANY_REQUESTS_STATUS, errorData));
return true;
} else {
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/FixedWindowStrategy.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/FixedWindowStrategy.java
index f91f87f..4fd884e 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/FixedWindowStrategy.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/FixedWindowStrategy.java
@@ -18,8 +18,13 @@ package org.apache.servicecomb.qps.strategy;
import java.util.concurrent.atomic.AtomicLong;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class FixedWindowStrategy extends AbstractQpsStrategy {
+ private static final Logger LOGGER = LoggerFactory.getLogger(FixedWindowStrategy.class);
+
// Interval begin time
private volatile long msCycleBegin;
@@ -49,7 +54,12 @@ public class FixedWindowStrategy extends AbstractQpsStrategy {
// Configuration update and use is at the situation of multi-threaded concurrency
// It is possible that operation level updated to null,but schema level or microservice level does not updated
- return newCount - lastRequestCount >= this.getQpsLimit();
+ boolean isLimitRequest = newCount - lastRequestCount >= this.getQpsLimit();
+ if (isLimitRequest) {
+ LOGGER.warn("qps flowcontrol open, qpsLimit is {} and tps is {}", this.getQpsLimit(),
+ newCount - lastRequestCount + 1);
+ }
+ return isLimitRequest;
}
@Override
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/LeakyBucketStrategy.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/LeakyBucketStrategy.java
index d65d43b..180be4d 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/LeakyBucketStrategy.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/LeakyBucketStrategy.java
@@ -19,6 +19,9 @@ package org.apache.servicecomb.qps.strategy;
import java.util.concurrent.atomic.AtomicLong;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* leaky bucket algorithm include 2 implementation :
* 1. as a meter : it's same as the token bucket.
@@ -27,6 +30,8 @@ import java.util.concurrent.atomic.AtomicLong;
**/
public class LeakyBucketStrategy extends AbstractQpsStrategy {
+ private static final Logger LOGGER = LoggerFactory.getLogger(LeakyBucketStrategy.class);
+
// Request count between Interval begin and now in one interval
private volatile AtomicLong requestCount = new AtomicLong();
@@ -60,6 +65,7 @@ public class LeakyBucketStrategy extends AbstractQpsStrategy {
requestCount.incrementAndGet();
return false;
}
+ LOGGER.warn("qps flowcontrol open, qpsLimit is {} and tps is {}", this.getQpsLimit(), requestCount.longValue() + 1);
return true;
}
diff --git a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
index 5aef2dd..1043d58 100644
--- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConsumerQpsFlowControlHandler.java
@@ -109,7 +109,7 @@ public class TestConsumerQpsFlowControlHandler {
Mockito.verify(asyncResp).consumerFail(captor.capture());
InvocationException invocationException = captor.getValue();
assertEquals(QpsConst.TOO_MANY_REQUESTS_STATUS, invocationException.getStatus());
- assertEquals("rejected by qps flowcontrol",
+ assertEquals("consumer request rejected by qps flowcontrol",
((CommonExceptionData) invocationException.getErrorData()).getMessage());
}
diff --git a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
index dfbecfd..d1fb48e 100644
--- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
+++ b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestProviderQpsFlowControlHandler.java
@@ -161,7 +161,7 @@ public class TestProviderQpsFlowControlHandler {
InvocationException invocationException = captor.getValue();
assertEquals(QpsConst.TOO_MANY_REQUESTS_STATUS, invocationException.getStatus());
- assertEquals("rejected by qps flowcontrol",
+ assertEquals("provider request rejected by qps flowcontrol",
((CommonExceptionData) invocationException.getErrorData()).getMessage());
}