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() {
