This is an automated email from the ASF dual-hosted git repository.

iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 69e7204  [DUBBO-3023]: problem in ActiveLimitFilter (#3035)
69e7204 is described below

commit 69e72041943f247360249ba191ac1217217f43a5
Author: Ian Luo <[email protected]>
AuthorDate: Fri Dec 21 21:58:54 2018 +0800

    [DUBBO-3023]: problem in ActiveLimitFilter (#3035)
    
    *     #3023: problem in ActiveLimitFilter
    
    * fix problem when max <= 0
---
 .../src/main/java/org/apache/dubbo/rpc/RpcStatus.java    |  1 +
 .../org/apache/dubbo/rpc/filter/ActiveLimitFilter.java   |  2 +-
 .../org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java  |  2 +-
 .../apache/dubbo/rpc/filter/ActiveLimitFilterTest.java   | 16 ++++++++++++++++
 4 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcStatus.java 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcStatus.java
index de68434..d3a2032 100644
--- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcStatus.java
+++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/RpcStatus.java
@@ -109,6 +109,7 @@ public class RpcStatus {
      * @param url
      */
     public static boolean beginCount(URL url, String methodName, int max) {
+        max = (max <= 0) ? Integer.MAX_VALUE : max;
         RpcStatus appStatus = getStatus(url);
         RpcStatus methodStatus = getStatus(url, methodName);
         if (methodStatus.active.incrementAndGet() > max) {
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ActiveLimitFilter.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ActiveLimitFilter.java
index 696840f..926fd01 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ActiveLimitFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ActiveLimitFilter.java
@@ -47,7 +47,7 @@ public class ActiveLimitFilter implements Filter {
         String methodName = invocation.getMethodName();
         int max = invoker.getUrl().getMethodParameter(methodName, 
Constants.ACTIVES_KEY, 0);
         RpcStatus count = RpcStatus.getStatus(invoker.getUrl(), 
invocation.getMethodName());
-        if (max > 0 && !RpcStatus.beginCount(url, methodName, max)) {
+        if (!RpcStatus.beginCount(url, methodName, max)) {
             long timeout = 
invoker.getUrl().getMethodParameter(invocation.getMethodName(), 
Constants.TIMEOUT_KEY, 0);
             long start = System.currentTimeMillis();
             long remain = timeout;
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java
 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java
index d0995da..b335a41 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/ExecuteLimitFilter.java
@@ -40,7 +40,7 @@ public class ExecuteLimitFilter implements Filter {
         URL url = invoker.getUrl();
         String methodName = invocation.getMethodName();
         int max = url.getMethodParameter(methodName, Constants.EXECUTES_KEY, 
0);
-        if (max > 0 && !RpcStatus.beginCount(url, methodName, max)) {
+        if (!RpcStatus.beginCount(url, methodName, max)) {
             throw new RpcException("Failed to invoke method " + 
invocation.getMethodName() + " in provider " +
                     url + ", cause: The service using threads greater than 
<dubbo:service executes=\"" + max +
                     "\" /> limited.");
diff --git 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/ActiveLimitFilterTest.java
 
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/ActiveLimitFilterTest.java
index 012951d..2dff886 100644
--- 
a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/ActiveLimitFilterTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/filter/ActiveLimitFilterTest.java
@@ -195,4 +195,20 @@ public class ActiveLimitFilterTest {
         assertEquals("After exception active count should be same"
                 , beforeExceptionActiveCount, afterExceptionActiveCount);
     }
+
+    @Test
+    public void testInvokeRuntimeExceptionWithActiveCountMatch() {
+        URL url = 
URL.valueOf("test://test:11/test?accesslog=true&group=dubbo&version=1.1&actives=0");
+        Invoker<ActiveLimitFilterTest> invoker = new 
RuntimeExceptionInvoker(url);
+        Invocation invocation = new MockInvocation();
+        RpcStatus count = RpcStatus.getStatus(invoker.getUrl(), 
invocation.getMethodName());
+        int beforeExceptionActiveCount = count.getActive();
+        try {
+            activeLimitFilter.invoke(invoker, invocation);
+        } catch (RuntimeException ex) {
+            int afterExceptionActiveCount = count.getActive();
+            assertEquals("After exception active count should be same"
+                    , beforeExceptionActiveCount, afterExceptionActiveCount);
+        }
+    }
 }

Reply via email to