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 2018/04/16 09:37:29 UTC

[incubator-servicecomb-java-chassis] 01/02: [SCB-481]Fix qps handler compatible issues due to assumption to schema ids not contains dot

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit a4088a60655633a6f49db4802b71c8cf76970a06
Author: liubao <ba...@huawei.com>
AuthorDate: Thu Apr 12 20:51:42 2018 +0800

    [SCB-481]Fix qps handler compatible issues due to assumption to schema ids not contains dot
---
 .../src/main/resources/microservice.yaml           |   2 +-
 .../qps/ConsumerQpsFlowControlHandler.java         |   3 +-
 .../qps/ProviderQpsFlowControlHandler.java         |   3 +-
 .../servicecomb/qps/QpsControllerManager.java      |  20 +-
 .../servicecomb/qps/QpsControllerManagerTest.java  | 309 ++++++++++++++++-----
 .../qps/TestConsumerQpsFlowControlHandler.java     |  12 +-
 .../qps/TestProviderQpsFlowControlHandler.java     |   6 +-
 7 files changed, 270 insertions(+), 85 deletions(-)

diff --git a/demo/demo-pojo/pojo-client/src/main/resources/microservice.yaml b/demo/demo-pojo/pojo-client/src/main/resources/microservice.yaml
index 30efc87..302c3d0 100644
--- a/demo/demo-pojo/pojo-client/src/main/resources/microservice.yaml
+++ b/demo/demo-pojo/pojo-client/src/main/resources/microservice.yaml
@@ -26,7 +26,7 @@ cse:
   handler:
     chain:
       Consumer:
-        default: bizkeeper-consumer,loadbalance
+        default: qps-flowcontrol-consumer,bizkeeper-consumer,loadbalance
   isolation:
     Consumer:
       enabled: false
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 101babc..bc82c6c 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
@@ -38,8 +38,7 @@ public class ConsumerQpsFlowControlHandler implements Handler {
       return;
     }
 
-    QpsController qpsController = qpsControllerMgr.getOrCreate(
-        invocation.getOperationMeta().getMicroserviceQualifiedName());
+    QpsController qpsController = qpsControllerMgr.getOrCreate(invocation.getMicroserviceName(), invocation);
     if (qpsController.isLimitNewRequest()) {
       // return http status 429
       CommonExceptionData errorData = new CommonExceptionData("rejected by qps flowcontrol");
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 b81581f..d2ff0d8 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
@@ -41,8 +41,7 @@ public class ProviderQpsFlowControlHandler implements Handler {
     QpsController qpsController =
         StringUtils.isEmpty(microServiceName)
             ? qpsControllerMgr.getGlobalQpsController()
-            : qpsControllerMgr.getOrCreate(microServiceName + QpsControllerManager.SEPARATOR
-                + invocation.getOperationMeta().getSchemaQualifiedName());
+            : qpsControllerMgr.getOrCreate(microServiceName, invocation);
     if (isLimitNewRequest(qpsController, asyncResp)) {
       return;
     }
diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
index 09a69ed..b2d25c1 100644
--- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
+++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/QpsControllerManager.java
@@ -19,8 +19,8 @@ package org.apache.servicecomb.qps;
 
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.regex.Pattern;
 
+import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,8 +30,6 @@ import com.netflix.config.DynamicProperty;
 public class QpsControllerManager {
   private static final Logger LOGGER = LoggerFactory.getLogger(QpsControllerManager.class);
 
-  private static final Pattern QUALIFIED_KEY_CHECKER = Pattern.compile("^[^.]+\\.[^.]+\\.[^.]+$");
-
   /**
    * Describe the relationship between configuration and qpsController.
    */
@@ -48,22 +46,22 @@ public class QpsControllerManager {
 
   private String configKeyPrefix;
 
-  public QpsController getOrCreate(String key) {
-    return qualifiedNameControllerMap.computeIfAbsent(key, this::create);
+  public QpsController getOrCreate(String microerviceName, Invocation invocation) {
+    return qualifiedNameControllerMap
+        .computeIfAbsent(microerviceName + SEPARATOR + invocation.getOperationMeta().getSchemaQualifiedName(), key -> {
+          return create(key, microerviceName, invocation);
+        });
   }
 
   /**
    * Create relevant qpsLimit dynamicProperty and watch the configuration change.
    * Search and return a valid qpsController.
    */
-  protected QpsController create(String qualifiedNameKey) {
-    if (!QUALIFIED_KEY_CHECKER.matcher(qualifiedNameKey).matches()) {
-      throw new IllegalArgumentException("Unexpected qualified name: [" + qualifiedNameKey + "]");
-    }
+  protected QpsController create(String qualifiedNameKey, String microerviceName, Invocation invocation) {
     // create "microservice"
-    createQpsControllerIfNotExist(qualifiedNameKey.substring(0, qualifiedNameKey.indexOf(SEPARATOR)));
+    createQpsControllerIfNotExist(microerviceName);
     // create "microservice.schema"
-    createQpsControllerIfNotExist(qualifiedNameKey.substring(0, qualifiedNameKey.lastIndexOf(SEPARATOR)));
+    createQpsControllerIfNotExist(qualifiedNameKey.substring(0, microerviceName.length() + invocation.getSchemaId().length() + 1));
     // create "microservice.schema.operation"
     createQpsControllerIfNotExist(qualifiedNameKey);
 
diff --git a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/QpsControllerManagerTest.java b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/QpsControllerManagerTest.java
index 1837ff2..82c0d89 100644
--- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/QpsControllerManagerTest.java
+++ b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/QpsControllerManagerTest.java
@@ -30,6 +30,8 @@ import org.junit.Test;
 import org.mockito.Mockito;
 
 import mockit.Deencapsulation;
+import mockit.Expectations;
+import mockit.Mocked;
 
 public class QpsControllerManagerTest {
 
@@ -44,125 +46,236 @@ public class QpsControllerManagerTest {
   }
 
   @Test
-  public void testGetOrCreate() {
+  public void testGetOrCreate(@Mocked Invocation invocation, @Mocked OperationMeta operationMeta) {
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
     QpsControllerManager testQpsControllerManager = new QpsControllerManager()
         .setConfigKeyPrefix(Config.CONSUMER_LIMIT_KEY_PREFIX);
-    initTestQpsControllerManager(testQpsControllerManager);
+    initTestQpsControllerManager(testQpsControllerManager, invocation, operationMeta);
 
     // pojo
     setConfigWithDefaultPrefix("pojo", 100);
-    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo", qpsController.getKey());
     Assert.assertTrue(100 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo2.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("pojo2", invocation);
     Assert.assertEquals("pojo2", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("poj.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
     Assert.assertEquals("poj", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
-    testGetOrCreateCommon(testQpsControllerManager);
+    ArchaiusUtils.setProperty("cse.flowcontrol.Consumer.qps.limit.poj.server", 10000);
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
+    Assert.assertEquals("poj.server", qpsController.getKey());
+    Assert.assertEquals(qpsController.getQpsLimit(), (Integer)10000);
+    
+    ArchaiusUtils.setProperty("cse.flowcontrol.Consumer.qps.limit.poj.server.test", 20000);
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
+    Assert.assertEquals("poj.server.test", qpsController.getKey());
+    Assert.assertEquals(qpsController.getQpsLimit(), (Integer)20000);
+    
+    testGetOrCreateCommon(testQpsControllerManager, invocation, operationMeta);
   }
 
   @Test
-  public void testGetOrCreateWithGlobalConfig() {
+  public void testGetOrCreateWithGlobalConfig(@Mocked Invocation invocation, @Mocked OperationMeta operationMeta) {
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
+
     QpsControllerManager testQpsControllerManager = new QpsControllerManager()
         .setGlobalQpsController(Config.PROVIDER_LIMIT_KEY_GLOBAL)
         .setConfigKeyPrefix(Config.CONSUMER_LIMIT_KEY_PREFIX);
 
     // global
     setConfig(Config.PROVIDER_LIMIT_KEY_GLOBAL, 50);
-    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals(Config.PROVIDER_LIMIT_KEY_GLOBAL, qpsController.getKey());
     Assert.assertTrue(50 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo2.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("pojo2", invocation);
     Assert.assertEquals(Config.PROVIDER_LIMIT_KEY_GLOBAL, qpsController.getKey());
     Assert.assertTrue(50 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("poj.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
     Assert.assertEquals(Config.PROVIDER_LIMIT_KEY_GLOBAL, qpsController.getKey());
     Assert.assertTrue(50 == qpsController.getQpsLimit());
 
     // pojo
     setConfigWithDefaultPrefix("pojo", 100);
-    qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo", qpsController.getKey());
     Assert.assertTrue(100 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo2.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("pojo2", invocation);
     Assert.assertEquals(Config.PROVIDER_LIMIT_KEY_GLOBAL, qpsController.getKey());
     Assert.assertTrue(50 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("poj.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
     Assert.assertEquals(Config.PROVIDER_LIMIT_KEY_GLOBAL, qpsController.getKey());
     Assert.assertTrue(50 == qpsController.getQpsLimit());
 
-    testGetOrCreateCommon(testQpsControllerManager);
+    testGetOrCreateCommon(testQpsControllerManager, invocation, operationMeta);
   }
 
   @Test
-  public void testQualifiedNameKey() {
+  public void testQualifiedNameKey(@Mocked Invocation invocation, @Mocked OperationMeta operationMeta) {
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "schema";
+        operationMeta.getSchemaQualifiedName();
+        result = "schema.opr";
+      }
+    };
     QpsControllerManager qpsControllerManager = new QpsControllerManager();
-    QpsController qpsController = qpsControllerManager.getOrCreate("service.schema.opr");
+    QpsController qpsController = qpsControllerManager.getOrCreate("service", invocation);
     Assert.assertEquals("service", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
-    qpsController = qpsControllerManager.getOrCreate("test_service.test_schema.test_opr");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "test_schema";
+        operationMeta.getSchemaQualifiedName();
+        result = "test_schema.test_opr";
+      }
+    };
+    qpsController = qpsControllerManager.getOrCreate("test_service", invocation);
     Assert.assertEquals("test_service", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
-    qpsController = qpsControllerManager.getOrCreate("test-service.test-schema.test-opr");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "test_schema";
+        operationMeta.getSchemaQualifiedName();
+        result = "test-schema.test-opr";
+      }
+    };
+    qpsController = qpsControllerManager.getOrCreate("test-service", invocation);
     Assert.assertEquals("test-service", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
-    Exception exception = null;
-    try {
-      qpsControllerManager.getOrCreate("svc.schema.opr.tail");
-    } catch (Exception e) {
-      exception = e;
-    }
-    Assert.assertNotNull(exception);
-    Assert.assertEquals(IllegalArgumentException.class, exception.getClass());
-    Assert.assertEquals("Unexpected qualified name: [svc.schema.opr.tail]", exception.getMessage());
-
-    try {
-      qpsControllerManager.getOrCreate("svc.schema");
-    } catch (Exception e) {
-      exception = e;
-    }
-    Assert.assertNotNull(exception);
-    Assert.assertEquals(IllegalArgumentException.class, exception.getClass());
-    Assert.assertEquals("Unexpected qualified name: [svc.schema]", exception.getMessage());
-
-    try {
-      qpsControllerManager.getOrCreate("...");
-    } catch (Exception e) {
-      exception = e;
-    }
-    Assert.assertNotNull(exception);
-    Assert.assertEquals(IllegalArgumentException.class, exception.getClass());
-    Assert.assertEquals("Unexpected qualified name: [...]", exception.getMessage());
+
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "schema";
+        operationMeta.getSchemaQualifiedName();
+        result = "schema.opr.tail";
+      }
+    };
+    qpsController = qpsControllerManager.getOrCreate("svc", invocation);
+    Assert.assertEquals("svc", qpsController.getKey());
+    Assert.assertNull(qpsController.getQpsLimit());
+
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "schema.opr2";
+        operationMeta.getSchemaQualifiedName();
+        result = "schema.opr2.tail";
+      }
+    };
+    qpsController = qpsControllerManager.getOrCreate("svc", invocation);
+    Assert.assertEquals("svc", qpsController.getKey());
+    Assert.assertNull(qpsController.getQpsLimit());
   }
 
-  private void testGetOrCreateCommon(QpsControllerManager testQpsControllerManager) {
-    // pojo.server
+  private void testGetOrCreateCommon(QpsControllerManager testQpsControllerManager, Invocation invocation,
+      OperationMeta operationMeta) {
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
     setConfigWithDefaultPrefix("pojo.server", 200);
-    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo.server", qpsController.getKey());
     Assert.assertTrue(200 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo.server2.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        operationMeta.getSchemaQualifiedName();
+        result = "server2.test";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo", qpsController.getKey());
     Assert.assertTrue(100 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo.serve.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        operationMeta.getSchemaQualifiedName();
+        result = "serve.test";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo", qpsController.getKey());
     Assert.assertTrue(100 == qpsController.getQpsLimit());
 
     // pojo.server.test
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
     setConfigWithDefaultPrefix("pojo.server.test", 300);
-    qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo.server.test", qpsController.getKey());
     Assert.assertTrue(300 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo.server.test2");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test2";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo.server", qpsController.getKey());
     Assert.assertTrue(200 == qpsController.getQpsLimit());
-    qpsController = testQpsControllerManager.getOrCreate("pojo.server.tes");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+
+        operationMeta.getSchemaQualifiedName();
+        result = "server.tes";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo.server", qpsController.getKey());
     Assert.assertTrue(200 == qpsController.getQpsLimit());
   }
@@ -170,31 +283,102 @@ public class QpsControllerManagerTest {
   /**
    * Init testQpsControllerManager to test search function.
    */
-  private void initTestQpsControllerManager(QpsControllerManager testQpsControllerManager) {
+  private void initTestQpsControllerManager(QpsControllerManager testQpsControllerManager, Invocation invocation,
+      OperationMeta operationMeta) {
     // pojo.server.test
-    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo.server.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
+    QpsController qpsController = testQpsControllerManager.getOrCreate("pojo", invocation);
     Assert.assertEquals("pojo", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
     // pojo.server.test2
-    testQpsControllerManager.getOrCreate("pojo.server.test2");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test2";
+      }
+    };
+    testQpsControllerManager.getOrCreate("pojo", invocation);
 
     // pojo.server.tes
-    testQpsControllerManager.getOrCreate("pojo.server.tes");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.tes";
+      }
+    };
+    testQpsControllerManager.getOrCreate("pojo", invocation);
 
     // pojo.server2.test
-    testQpsControllerManager.getOrCreate("pojo.server2.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server2";
+        operationMeta.getSchemaQualifiedName();
+        result = "server2.test";
+      }
+    };
+    testQpsControllerManager.getOrCreate("pojo", invocation);
 
     // pojo.serve.test
-    testQpsControllerManager.getOrCreate("pojo.serve.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "serve";
+        operationMeta.getSchemaQualifiedName();
+        result = "serve.test";
+      }
+    };
+    testQpsControllerManager.getOrCreate("pojo", invocation);
 
     // pojo2.server.test
-    qpsController = testQpsControllerManager.getOrCreate("pojo2.server.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("pojo2", invocation);
     Assert.assertEquals("pojo2", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
 
     // poj.server.test
-    qpsController = testQpsControllerManager.getOrCreate("poj.server.test");
+    new Expectations() {
+      {
+        invocation.getOperationMeta();
+        result = operationMeta;
+        invocation.getSchemaId();
+        result = "server";
+        operationMeta.getSchemaQualifiedName();
+        result = "server.test";
+      }
+    };
+    qpsController = testQpsControllerManager.getOrCreate("poj", invocation);
     Assert.assertEquals("poj", qpsController.getKey());
     Assert.assertNull(qpsController.getQpsLimit());
   }
@@ -213,8 +397,7 @@ public class QpsControllerManagerTest {
 
   public static Invocation getMockInvocation(String microserviceName, String schemaId, String operationId) {
     return getMockInvocation(
-        getMockOperationMeta(microserviceName, schemaId, operationId)
-    );
+        getMockOperationMeta(microserviceName, schemaId, operationId));
   }
 
   private static Invocation getMockInvocation(OperationMeta mockOperationMeta) {
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 ea58948..04ab829 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
@@ -87,7 +87,9 @@ public class TestConsumerQpsFlowControlHandler {
     String key = "svc.schema.opr";
     QpsController qpsController = new QpsController("key", 12);
     Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
-    Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
+    Mockito.when(operationMeta.getSchemaQualifiedName()).thenReturn("schema.opr");
+    Mockito.when(invocation.getSchemaId()).thenReturn("schema");
+    Mockito.when(invocation.getMicroserviceName()).thenReturn("svc");
     setQpsController(key, qpsController);
     new MockUp<QpsController>() {
       @Mock
@@ -115,10 +117,12 @@ public class TestConsumerQpsFlowControlHandler {
 
   @Test
   public void testHandleIsLimitNewRequestAsFalse() throws Exception {
-    String key = "MicroserviceQualifiedName";
-    QpsController qpsController = new QpsController("key", 12);
+    String key = "service.schema.id";
+    QpsController qpsController = new QpsController("service", 12);
+    Mockito.when(invocation.getMicroserviceName()).thenReturn("service");
     Mockito.when(invocation.getOperationMeta()).thenReturn(operationMeta);
-    Mockito.when(operationMeta.getMicroserviceQualifiedName()).thenReturn(key);
+    
+    Mockito.when(operationMeta.getSchemaQualifiedName()).thenReturn("schema.id");
     setQpsController(key, qpsController);
 
     new MockUp<QpsController>() {
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 52cf625..d14e6a2 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
@@ -75,6 +75,8 @@ public class TestProviderQpsFlowControlHandler {
         result = "test";
         invocation.getOperationMeta();
         result = QpsControllerManagerTest.getMockOperationMeta("pojo", "server", "opr");
+        invocation.getSchemaId();
+        result = "server";
         asyncResp.producerFail((Throwable) any);
         result = new RuntimeException("test error");
       }
@@ -119,7 +121,7 @@ public class TestProviderQpsFlowControlHandler {
     Mockito.when(invocation.getContext(Const.SRC_MICROSERVICE)).thenReturn("test");
     OperationMeta mockOperationMeta = QpsControllerManagerTest.getMockOperationMeta("pojo", "server", "opr");
     Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
-
+    Mockito.when(invocation.getSchemaId()).thenReturn("server");
     new MockUp<QpsController>() {
       @Mock
       public boolean isLimitNewRequest() {
@@ -152,7 +154,7 @@ public class TestProviderQpsFlowControlHandler {
     OperationMeta mockOperationMeta = QpsControllerManagerTest
         .getMockOperationMeta("pojo", "server", "opr");
     Mockito.when(invocation.getOperationMeta()).thenReturn(mockOperationMeta);
-
+    Mockito.when(invocation.getSchemaId()).thenReturn("server");
     new MockUp<QpsController>() {
       @Mock
       public boolean isLimitNewRequest() {

-- 
To stop receiving notification emails like this one, please contact
liubao@apache.org.