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/servicecomb-java-chassis.git

commit 88c24e95746cb143edf2405696004d9946aa04f0
Author: GuoYL <[email protected]>
AuthorDate: Fri Jul 17 16:26:35 2020 +0800

    [SCB-2043] modify as comment, change strategy when strategy change.
---
 .../servicecomb/qps/QpsControllerManager.java      | 28 ++++++++++++++----
 .../qps/strategy/AbstractQpsStrategy.java          |  4 +--
 .../qps/strategy/FixedWindowStrategy.java          |  3 --
 .../qps/strategy/LeakyBucketStrategy.java          |  6 +---
 .../qps/strategy/SlidingWindowStrategy.java        | 34 ----------------------
 .../servicecomb/qps/strategy/StrategyType.java     |  4 ---
 .../qps/strategy/TokenBucketStrategy.java          |  3 --
 .../org/apache/servicecomb/qps/TestConfig.java     |  4 ---
 8 files changed, 25 insertions(+), 61 deletions(-)

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 4a989e7..40e25c5 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
@@ -133,9 +133,19 @@ public class QpsControllerManager {
     LOGGER.info("Create qpsController, configKey = [{}]", configKey);
     DynamicProperty limitProperty = DynamicProperty.getInstance(limitKeyPrefix 
+ configKey);
     DynamicProperty bucketProperty = 
DynamicProperty.getInstance(bucketKeyPrefix + configKey);
+    DynamicProperty strategyProperty = DynamicProperty
+        .getInstance(Config.STRATEGY_KEY_PREFIX);
     AbstractQpsStrategy qpsStrategy = chooseStrategy(configKey, 
limitProperty.getLong(),
-        bucketProperty.getLong());
-
+        bucketProperty.getLong(), strategyProperty.getString());
+
+    strategyProperty.addCallback(() -> {
+      AbstractQpsStrategy innerQpsStrategy = chooseStrategy(configKey, 
limitProperty.getLong(),
+          bucketProperty.getLong(), strategyProperty.getString());
+      configQpsControllerMap.put(configKey, innerQpsStrategy);
+      LOGGER.info("Global flow control strategy update, value = [{}]",
+          strategyProperty.getString());
+      updateObjMap(configKey);
+    });
     limitProperty.addCallback(() -> {
       qpsStrategy.setQpsLimit(limitProperty.getLong());
       LOGGER.info("Qps limit updated, configKey = [{}], value = [{}]", 
configKey,
@@ -177,8 +187,16 @@ public class QpsControllerManager {
   public QpsControllerManager setGlobalQpsStrategy(String globalLimitKey, 
String globalBucketKey) {
     DynamicProperty globalLimitProperty = 
DynamicProperty.getInstance(globalLimitKey);
     DynamicProperty globalBucketProperty = 
DynamicProperty.getInstance(globalBucketKey);
+    DynamicProperty globalStrategyProperty = DynamicProperty
+        .getInstance(Config.STRATEGY_KEY_PREFIX);
     globalQpsStrategy = chooseStrategy(globalLimitKey, 
globalLimitProperty.getLong(),
-        globalBucketProperty.getLong());
+        globalBucketProperty.getLong(), globalStrategyProperty.getString());
+    globalStrategyProperty.addCallback(() -> {
+      globalQpsStrategy = chooseStrategy(globalLimitKey, 
globalLimitProperty.getLong(),
+          globalBucketProperty.getLong(), globalStrategyProperty.getString());
+      LOGGER.info("Global flow control strategy update, value = [{}]",
+          globalStrategyProperty.getString());
+    });
     globalLimitProperty.addCallback(() -> {
       globalQpsStrategy.setQpsLimit(globalLimitProperty.getLong());
       LOGGER.info("Global qps limit update, value = [{}]", 
globalLimitProperty.getInteger());
@@ -190,8 +208,8 @@ public class QpsControllerManager {
     return this;
   }
 
-  private AbstractQpsStrategy chooseStrategy(String globalConfigKey, Long 
limit, Long bucket) {
-    String strategyKey = 
DynamicProperty.getInstance(Config.STRATEGY_KEY_PREFIX).getString();
+  private AbstractQpsStrategy chooseStrategy(String globalConfigKey, Long 
limit, Long bucket,
+      String strategyKey) {
     AbstractQpsStrategy strategy;
     switch (StrategyType.parseStrategyType(strategyKey)) {
       case FixedWindow:
diff --git 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/AbstractQpsStrategy.java
 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/AbstractQpsStrategy.java
index 9285142..4fc0ed8 100644
--- 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/AbstractQpsStrategy.java
+++ 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/AbstractQpsStrategy.java
@@ -19,9 +19,7 @@ package org.apache.servicecomb.qps.strategy;
 
 import org.apache.servicecomb.qps.QpsStrategy;
 
-/**
- * @Date 2020/7/14
- **/
+
 public class AbstractQpsStrategy implements QpsStrategy {
 
   private Long qpsLimit;
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 01b6e31..74bb9b5 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,9 +18,6 @@ package org.apache.servicecomb.qps.strategy;
 
 import java.util.concurrent.atomic.AtomicLong;
 
-/**
- * @Date 2020/7/8
- **/
 public class FixedWindowStrategy extends AbstractQpsStrategy {
 
   // Interval begin time
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 9be7f2e..b2f4f3e 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
@@ -24,7 +24,6 @@ import java.util.concurrent.atomic.AtomicLong;
  * 1. as a meter : it's same as the token bucket.
  * 2. as a queue : the bucket size equal to qpsLimit.
  *
- * @Date 2020/7/7
  **/
 public class LeakyBucketStrategy extends AbstractQpsStrategy {
 
@@ -45,9 +44,6 @@ public class LeakyBucketStrategy extends AbstractQpsStrategy {
     this.setBucketLimit(bucketLimit);
   }
 
-  /**
-   * @return
-   */
   @Override
   public boolean isLimitNewRequest() {
     if (this.getQpsLimit() == null) {
@@ -61,7 +57,7 @@ public class LeakyBucketStrategy extends AbstractQpsStrategy {
     //get the num of te period time
     long leakCount = ((nowTime - lastTime + remainder) / 1000) * 
this.getQpsLimit();
     remainder = (nowTime - lastTime + remainder) % 1000;
-    // leak the request , if leak
+    // leak the request
     if (requestCount.longValue() > leakCount) {
       requestCount.addAndGet(-leakCount);
     } else {
diff --git 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/SlidingWindowStrategy.java
 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/SlidingWindowStrategy.java
deleted file mode 100644
index 4671ba2..0000000
--- 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/SlidingWindowStrategy.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.qps.strategy;
-
-
-/**
- * @Date 2020/7/8
- **/
-public class SlidingWindowStrategy extends AbstractQpsStrategy {
-
-  public SlidingWindowStrategy(long qpsLimit, String key) {
-    super(qpsLimit, key);
-  }
-
-  @Override
-  public boolean isLimitNewRequest() {
-    return true;
-  }
-}
diff --git 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
index 8aa241b..5a9192a 100644
--- 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
+++ 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/StrategyType.java
@@ -19,10 +19,6 @@ package org.apache.servicecomb.qps.strategy;
 
 import org.apache.commons.lang3.StringUtils;
 
-/**
- * @Author GuoYl123
- * @Date 2020/7/13
- **/
 public enum StrategyType {
   TokenBucket,
   LeakyBucket,
diff --git 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/TokenBucketStrategy.java
 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/TokenBucketStrategy.java
index 582cbe6..68f3334 100644
--- 
a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/TokenBucketStrategy.java
+++ 
b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/strategy/TokenBucketStrategy.java
@@ -17,9 +17,6 @@
 
 package org.apache.servicecomb.qps.strategy;
 
-/**
- * @Date 2020/7/16
- **/
 public class TokenBucketStrategy extends LeakyBucketStrategy {
 
   public TokenBucketStrategy(String key, Long qpsLimit, Long bucketLimit) {
diff --git 
a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConfig.java
 
b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConfig.java
index 04f9400..9035ba5 100644
--- 
a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConfig.java
+++ 
b/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConfig.java
@@ -23,10 +23,6 @@ import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-/**
- *
- *
- */
 public class TestConfig {
   @BeforeClass
   public static void classSetup() {

Reply via email to