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 e7723baa4ac8dda16e1f9b253d3777571b0aad81 Author: liubao <bi...@qq.com> AuthorDate: Mon Sep 18 21:01:15 2023 +0800 [SCB-2008]change DynamicPropertyFactory to Environment: fault injection and flowcontrol --- .../faultinjection/FaultInjectionConfig.java | 66 ----------- .../faultinjection/FaultInjectionUtil.java | 3 +- .../TestConsumerAbortFaultFilter.java | 68 ++++++++--- .../TestConsumerDelayFaultFilter.java | 125 ++++++++++++--------- .../faultinjection/TestFaultInjectConfig.java | 62 ---------- .../java/org/apache/servicecomb/qps/Config.java | 28 +---- .../org/apache/servicecomb/qps/TestConfig.java | 55 --------- .../router/custom/RouterAddHeaderFilter.java | 60 +++------- .../router/custom/RouterServerListFilter.java | 4 +- 9 files changed, 153 insertions(+), 318 deletions(-) diff --git a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionConfig.java b/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionConfig.java deleted file mode 100755 index 76b8e94ba..000000000 --- a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionConfig.java +++ /dev/null @@ -1,66 +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.faultinjection; - -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; - -import com.google.common.annotations.VisibleForTesting; -import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.netflix.config.DynamicIntProperty; -import com.netflix.config.DynamicPropertyFactory; - -/** - * Handles the fault injection configuration read from micro service file/config - * center. - */ -public final class FaultInjectionConfig { - - private static final Logger LOGGER = LoggerFactory.getLogger(FaultInjectionConfig.class); - - // key is configuration parameter. - private static final Map<String, String> cfgCallback = new ConcurrentHashMapEx<>(); - - public static int getConfigVal(String config, int defaultValue) { - DynamicIntProperty dynamicIntProperty = DynamicPropertyFactory.getInstance().getIntProperty(config, - defaultValue); - - cfgCallback.computeIfAbsent(config, key -> { - dynamicIntProperty.addCallback(() -> { - int newValue = dynamicIntProperty.get(); - String cfgName = dynamicIntProperty.getName(); - - //store the value in config center map and check for next requests. - FaultInjectionUtil.setConfigCenterValue(cfgName, new AtomicInteger(newValue)); - LOGGER.info("{} changed to {}", cfgName, newValue); - }); - return config; - }); - - return dynamicIntProperty.get(); - } - - @VisibleForTesting - static Map<String, String> getCfgCallback() { - return cfgCallback; - } - -} diff --git a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java b/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java index 220fdb4ca..9d96fcd1d 100755 --- a/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java +++ b/handlers/handler-fault-injection/src/main/java/org/apache/servicecomb/faultinjection/FaultInjectionUtil.java @@ -27,6 +27,7 @@ import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicInteger; import org.apache.servicecomb.core.Invocation; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; import com.google.common.annotations.VisibleForTesting; @@ -120,7 +121,7 @@ public class FaultInjectionUtil { return cfgMap.get(config).get(); } - value = FaultInjectionConfig.getConfigVal(config, FAULT_INJECTION_DEFAULT_VALUE); + value = LegacyPropertyFactory.getIntProperty(config, FAULT_INJECTION_DEFAULT_VALUE); return value; } diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerAbortFaultFilter.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerAbortFaultFilter.java index ecb5bf6ea..fbc0409ee 100644 --- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerAbortFaultFilter.java +++ b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerAbortFaultFilter.java @@ -24,6 +24,7 @@ import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.Transport; import org.apache.servicecomb.core.filter.FilterNode; import org.apache.servicecomb.foundation.common.Holder; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.swagger.invocation.Response; @@ -34,16 +35,57 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.springframework.core.env.Environment; import com.netflix.config.DynamicProperty; public class TestConsumerAbortFaultFilter { private Invocation invocation; + private Environment environment; + @BeforeEach public void before() { - ArchaiusUtils.resetConfig(); - FaultInjectionConfig.getCfgCallback().clear(); + environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4.operations.sayBye4" + + ".policy.fault.protocols.rest.abort.percent", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4.operations.sayBye4" + + ".policy.fault.protocols.rest.abort.httpStatus", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4" + + ".policy.fault.protocols.rest.abort.percent", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4" + + ".policy.fault.protocols.rest.abort.httpStatus", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6" + + ".policy.fault.protocols.rest.abort.percent", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6" + + ".policy.fault.protocols.rest.abort.httpStatus", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.abort.percent", + int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.abort.httpStatus", + int.class, -1)) + .thenReturn(-1); + FaultInjectionUtil.getConfigCenterValue().clear(); invocation = Mockito.mock(Invocation.class); @@ -58,7 +100,6 @@ public class TestConsumerAbortFaultFilter { @AfterEach public void after() { - ArchaiusUtils.resetConfig(); } @AfterAll @@ -68,17 +109,16 @@ public class TestConsumerAbortFaultFilter { @Test public void injectFaultError() { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus", "421"); - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent", "100"); - - Assertions.assertEquals("421", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.httpStatus") - .getString()); - Assertions.assertEquals("100", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.abort.percent") - .getString()); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.abort.httpStatus", + int.class, -1)) + .thenReturn(421); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.abort.percent", + int.class, -1)) + .thenReturn(100); ConsumerAbortFaultFilter abortFault = new ConsumerAbortFaultFilter(); diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerDelayFaultFilter.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerDelayFaultFilter.java index d1edf711a..381d3d014 100644 --- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerDelayFaultFilter.java +++ b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestConsumerDelayFaultFilter.java @@ -22,7 +22,7 @@ import java.util.concurrent.CompletableFuture; import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.Transport; import org.apache.servicecomb.core.filter.FilterNode; -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.swagger.invocation.Response; import org.junit.jupiter.api.AfterAll; @@ -31,16 +31,56 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; - -import com.netflix.config.DynamicProperty; +import org.springframework.core.env.Environment; public class TestConsumerDelayFaultFilter { private Invocation invocation; + private Environment environment; + @BeforeEach public void before() { - ArchaiusUtils.resetConfig(); - FaultInjectionConfig.getCfgCallback().clear(); + environment = Mockito.mock(Environment.class); + LegacyPropertyFactory.setEnvironment(environment); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4.operations.sayBye4" + + ".policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4.operations.sayBye4" + + ".policy.fault.protocols.rest.delay.percent", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4" + + ".policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6.schemas.testSchema4" + + ".policy.fault.protocols.rest.delay.percent", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6" + + ".policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)).thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer.carts6" + + ".policy.fault.protocols.rest.delay.percent", + int.class, -1)).thenReturn(-1); + + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)) + .thenReturn(-1); + Mockito.when(environment.getProperty( + "servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.delay.percent", + int.class, -1)) + .thenReturn(-1); + FaultInjectionUtil.getConfigCenterValue().clear(); invocation = Mockito.mock(Invocation.class); @@ -55,7 +95,6 @@ public class TestConsumerDelayFaultFilter { @AfterEach public void after() { - ArchaiusUtils.resetConfig(); } @AfterAll @@ -65,17 +104,15 @@ public class TestConsumerDelayFaultFilter { @Test public void injectFaultVertxDelay() throws Exception { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", "10"); - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", "100"); - - Assertions.assertEquals("10", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay") - .getString()); - Assertions.assertEquals("100", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent") - .getString()); + Mockito.when(environment.getProperty("servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)) + .thenReturn(10); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global" + + ".policy.fault.protocols.rest.delay.percent", + int.class, -1)) + .thenReturn(100); ConsumerDelayFaultFilter delayFault = new ConsumerDelayFaultFilter(); FilterNode filterNode = Mockito.mock(FilterNode.class); @@ -87,17 +124,14 @@ public class TestConsumerDelayFaultFilter { @Test public void injectFaultSystemDelay() throws Exception { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", "10"); - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", "100"); - - Assertions.assertEquals("10", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay") - .getString()); - Assertions.assertEquals("100", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent") - .getString()); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)) + .thenReturn(10); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", + int.class, -1)) + .thenReturn(100); ConsumerDelayFaultFilter delayFault = new ConsumerDelayFaultFilter(); FilterNode filterNode = Mockito.mock(FilterNode.class); @@ -109,16 +143,14 @@ public class TestConsumerDelayFaultFilter { @Test public void injectFaultNotDelay() throws Exception { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", "10"); - ArchaiusUtils.setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", "0"); - - Assertions.assertEquals("10", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay") - .getString()); - Assertions.assertEquals("0", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent") - .getString()); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.fixedDelay", + int.class, -1)) + .thenReturn(10); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", + int.class, -1)) + .thenReturn(0); ConsumerDelayFaultFilter delayFault = new ConsumerDelayFaultFilter(); FilterNode filterNode = Mockito.mock(FilterNode.class); @@ -130,13 +162,6 @@ public class TestConsumerDelayFaultFilter { @Test public void injectFaultNoPercentageConfig() throws Exception { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", null); - - Assertions.assertNull(DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent") - .getString()); - ConsumerDelayFaultFilter delayFault = new ConsumerDelayFaultFilter(); FilterNode filterNode = Mockito.mock(FilterNode.class); Mockito.when(filterNode.onFilter(invocation)) @@ -147,12 +172,10 @@ public class TestConsumerDelayFaultFilter { @Test public void injectFaultNoDelayMsConfig() throws Exception { - ArchaiusUtils - .setProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", "10"); - - Assertions.assertEquals("10", DynamicProperty - .getInstance("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent") - .getString()); + Mockito.when( + environment.getProperty("servicecomb.governance.Consumer._global.policy.fault.protocols.rest.delay.percent", + int.class, -1)) + .thenReturn(10); ConsumerDelayFaultFilter delayFault = new ConsumerDelayFaultFilter(); FilterNode filterNode = Mockito.mock(FilterNode.class); diff --git a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectConfig.java b/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectConfig.java deleted file mode 100644 index 811e736ea..000000000 --- a/handlers/handler-fault-injection/src/test/java/org/apache/servicecomb/faultinjection/TestFaultInjectConfig.java +++ /dev/null @@ -1,62 +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.faultinjection; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -/** - * Tests the fault injection configuration. - */ -public class TestFaultInjectConfig { - FaultInjectionConfig faultCfg; - - FaultInjectionConst faultConst; - - FaultParam faultParam; - - @BeforeEach - public void setUp() throws Exception { - faultParam = new FaultParam(); - } - - @AfterEach - public void tearDown() throws Exception { - faultCfg = null; - faultConst = null; - faultParam = null; - } - - @Test - public void testFaultInjectConfig() throws Exception { - int val = FaultInjectionConfig.getConfigVal("servicecomb.servicecomb.handler.consumer.faultinject.config", 0); - Assertions.assertEquals(0, val); - } - - @Test - public void testConstants() { - Assertions.assertEquals("servicecomb.governance.Consumer.", FaultInjectionConst.CONSUMER_FAULTINJECTION); - Assertions.assertEquals("policy.fault.protocols.", FaultInjectionConst.CONSUMER_FAULTINJECTION_POLICY_PROTOCOLS); - Assertions.assertEquals(-1, FaultInjectionConst.FAULT_INJECTION_DEFAULT_VALUE); - Assertions.assertEquals("servicecomb.governance.Consumer._global.", - FaultInjectionConst.CONSUMER_FAULTINJECTION_GLOBAL); - Assertions.assertEquals(-1, FaultInjectionConst.FAULT_INJECTION_ERROR); - } -} diff --git a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/Config.java b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/Config.java index 807842850..c7f286c2d 100644 --- a/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/Config.java +++ b/handlers/handler-flowcontrol-qps/src/main/java/org/apache/servicecomb/qps/Config.java @@ -17,15 +17,9 @@ package org.apache.servicecomb.qps; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.netflix.config.DynamicBooleanProperty; -import com.netflix.config.DynamicPropertyFactory; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; public final class Config { - private static final Logger LOGGER = LoggerFactory.getLogger(Config.class); - public static final String STRATEGY_KEY = "servicecomb.flowcontrol.strategy"; public static final String ANY_SERVICE = "ANY"; @@ -56,29 +50,15 @@ public final class Config { public static Config INSTANCE = new Config(); - private final DynamicBooleanProperty consumerEnabled = - DynamicPropertyFactory.getInstance().getBooleanProperty(CONSUMER_ENABLED, true); - - private final DynamicBooleanProperty providerEnabled = - DynamicPropertyFactory.getInstance().getBooleanProperty(PROVIDER_ENABLED, true); - public Config() { - consumerEnabled.addCallback(() -> { - boolean newValue = consumerEnabled.get(); - LOGGER.info("{} changed from {} to {}", CONSUMER_ENABLED, consumerEnabled, newValue); - }); - - providerEnabled.addCallback(() -> { - boolean newValue = providerEnabled.get(); - LOGGER.info("{} changed from {} to {}", PROVIDER_ENABLED, providerEnabled, newValue); - }); + } public boolean isConsumerEnabled() { - return consumerEnabled.get(); + return LegacyPropertyFactory.getBooleanProperty(CONSUMER_ENABLED, true); } public boolean isProviderEnabled() { - return providerEnabled.get(); + return LegacyPropertyFactory.getBooleanProperty(PROVIDER_ENABLED, true); } } 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 deleted file mode 100644 index ea9f47440..000000000 --- a/handlers/handler-flowcontrol-qps/src/test/java/org/apache/servicecomb/qps/TestConfig.java +++ /dev/null @@ -1,55 +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; - -import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -public class TestConfig { - @BeforeAll - public static void classSetup() { - ArchaiusUtils.resetConfig(); - } - - @AfterAll - public static void classTeardown() { - ArchaiusUtils.resetConfig(); - } - - @Test - public void testEnabled() { - Config.INSTANCE = new Config(); - - Assertions.assertTrue(Config.INSTANCE.isProviderEnabled()); - ArchaiusUtils.setProperty(Config.PROVIDER_ENABLED, false); - Assertions.assertFalse(Config.INSTANCE.isProviderEnabled()); - - ArchaiusUtils.setProperty(Config.PROVIDER_ENABLED, null); - Assertions.assertTrue(Config.INSTANCE.isProviderEnabled()); - - Assertions.assertTrue(Config.INSTANCE.isConsumerEnabled()); - ArchaiusUtils.setProperty(Config.CONSUMER_ENABLED, false); - Assertions.assertFalse(Config.INSTANCE.isConsumerEnabled()); - - ArchaiusUtils.setProperty(Config.CONSUMER_ENABLED, null); - Assertions.assertTrue(Config.INSTANCE.isConsumerEnabled()); - } -} diff --git a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterAddHeaderFilter.java b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterAddHeaderFilter.java index d4c1fbe1c..4d044f2e9 100644 --- a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterAddHeaderFilter.java +++ b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterAddHeaderFilter.java @@ -30,17 +30,15 @@ import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.core.filter.Filter; import org.apache.servicecomb.core.filter.FilterNode; import org.apache.servicecomb.core.filter.ProviderFilter; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.utils.JsonUtils; import org.apache.servicecomb.foundation.vertx.http.HttpServletRequestEx; import org.apache.servicecomb.swagger.invocation.InvocationType; import org.apache.servicecomb.swagger.invocation.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.CollectionUtils; import com.fasterxml.jackson.core.JsonProcessingException; -import com.netflix.config.DynamicPropertyFactory; -import com.netflix.config.DynamicStringProperty; public class RouterAddHeaderFilter implements Filter { @@ -48,48 +46,28 @@ public class RouterAddHeaderFilter implements Filter { private static final String SERVICECOMB_ROUTER_HEADER = "servicecomb.router.header"; - private static List<String> allHeader = new ArrayList<>(); + private List<String> allHeader = new ArrayList<>(); - /** - * read config and get Header - */ - private boolean loadHeaders() { - if (!CollectionUtils.isEmpty(allHeader)) { - return true; - } - DynamicStringProperty headerStr = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_ROUTER_HEADER, null, () -> { - DynamicStringProperty temHeader = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_ROUTER_HEADER, null); - if (!addAllHeaders(temHeader.get())) { - allHeader = new ArrayList<>(); - } - }); - return addAllHeaders(headerStr.get()); + public RouterAddHeaderFilter() { + loadHeaders(); } /** - * if don't have headers rule , avoid registered too many callback + * read config and get Header */ - private boolean isHaveHeadersRule() { - DynamicStringProperty headerStr = DynamicPropertyFactory.getInstance() - .getStringProperty(SERVICECOMB_ROUTER_HEADER, null); - return StringUtils.isNotEmpty(headerStr.get()); + private void loadHeaders() { + addAllHeaders(LegacyPropertyFactory.getStringProperty(SERVICECOMB_ROUTER_HEADER)); } - private boolean addAllHeaders(String str) { + private void addAllHeaders(String str) { if (StringUtils.isEmpty(str)) { - return false; + return; } try { - if (CollectionUtils.isEmpty(allHeader)) { - allHeader = Arrays.asList(str.split(",")); - } + allHeader = Arrays.asList(str.split(",")); } catch (Exception e) { LOGGER.error("route management Serialization failed: {}", e.getMessage()); - return false; } - return true; } private Map<String, String> getHeaderMap(HttpServletRequestEx httpServletRequestEx) { @@ -108,7 +86,6 @@ public class RouterAddHeaderFilter implements Filter { return ProviderFilter.PROVIDER_SCHEDULE_FILTER_ORDER - 1970; } - @Nonnull @Override public boolean enabledForInvocationType(InvocationType invocationType) { // enable for both edge and producer @@ -131,20 +108,17 @@ public class RouterAddHeaderFilter implements Filter { return nextNode.onFilter(invocation); } - if (!isHaveHeadersRule()) { + if (allHeader.isEmpty()) { return nextNode.onFilter(invocation); } - if (loadHeaders()) { - Map<String, String> headerMap = getHeaderMap(invocation.getRequestEx()); - try { - invocation - .addContext(RouterServerListFilter.ROUTER_HEADER, JsonUtils.OBJ_MAPPER.writeValueAsString(headerMap)); - } catch (JsonProcessingException e) { - LOGGER.error("canary context serialization failed"); - } + Map<String, String> headerMap = getHeaderMap(invocation.getRequestEx()); + try { + invocation.addContext(RouterServerListFilter.ROUTER_HEADER, + JsonUtils.OBJ_MAPPER.writeValueAsString(headerMap)); + } catch (JsonProcessingException e) { + LOGGER.error("canary context serialization failed"); } - return nextNode.onFilter(invocation); } } diff --git a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java index b7a3cbc7a..3ebe527b7 100644 --- a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java +++ b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import org.apache.servicecomb.core.Invocation; +import org.apache.servicecomb.foundation.common.LegacyPropertyFactory; import org.apache.servicecomb.foundation.common.utils.BeanUtils; import org.apache.servicecomb.foundation.common.utils.JsonUtils; import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; @@ -33,7 +34,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; -import com.netflix.config.DynamicPropertyFactory; public class RouterServerListFilter implements ServerListFilterExt { @@ -53,7 +53,7 @@ public class RouterServerListFilter implements ServerListFilterExt { @Override public boolean enabled() { - return DynamicPropertyFactory.getInstance().getStringProperty(ENABLE, "").get() + return LegacyPropertyFactory.getStringProperty(ENABLE, "") .equals(TYPE_ROUTER); }