From 705b32788598f1b1fc80a359d21cfec2f55b664d Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Fri, 16 Dec 2022 12:53:22 +0800 Subject: [PATCH] Revert #10839, #11082 and #11086 (#11160) --- .../common/config/CompositeConfiguration.java | 16 -- .../dubbo/common/config/Configuration.java | 32 ++- .../dubbo/common/config/Environment.java | 2 +- .../config/EnvironmentConfiguration.java | 13 -- .../common/config/InmemoryConfiguration.java | 10 - .../OrderedPropertiesConfiguration.java | 10 - .../common/config/PrefixedConfiguration.java | 13 -- .../config/PropertiesConfiguration.java | 10 - .../common/config/SystemConfiguration.java | 81 +------- .../AbstractDynamicConfiguration.java | 5 - .../nop/NopDynamicConfiguration.java | 5 - .../CompositeDynamicConfiguration.java | 5 - .../context/ConfigConfigurationAdapter.java | 10 - .../config/SystemConfigurationTest.java | 21 +- .../utils/SerializeClassCheckerTest.java | 32 ++- .../config/context/ConfigManagerTest.java | 19 +- .../config/bootstrap/MultiInstanceTest.java | 40 ++-- .../apollo/ApolloDynamicConfiguration.java | 12 +- .../nacos/NacosDynamicConfiguration.java | 11 -- .../ZookeeperDynamicConfiguration.java | 10 - .../org/apache/dubbo/rpc/AsyncRpcResult.java | 11 +- .../dubbo/rpc/filter/AccessLogFilter.java | 4 +- .../dubbo/rpc/protocol/AbstractInvoker.java | 11 +- .../dubbo/DecodeableRpcInvocation.java | 14 +- .../dubbo/decode/DubboTelnetDecodeTest.java | 187 +++++++++--------- .../DefaultHessian2FactoryInitializer.java | 2 +- .../dubbo/Hessian2FactoryInitializer.java | 2 - 27 files changed, 167 insertions(+), 421 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java index 6212108a2b..1653e96134 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java @@ -89,20 +89,4 @@ public class CompositeConfiguration implements Configuration { return null; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - for (Configuration config : configList) { - try { - Object value = config.getProperty(key, defaultValue); - if (!ConfigurationUtils.isEmptyValue(value)) { - return value; - } - } catch (Exception e) { - logger.error("Error when trying to get value for key " + key + " from " + config + ", " + - "will continue to try the next one."); - } - } - return defaultValue; - } - } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java index 6a4f3ba7ae..5c3988ab02 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Configuration.java @@ -127,19 +127,18 @@ public interface Configuration { * Gets a property from the configuration. The default value will return if the configuration doesn't contain * the mapping for the specified key. * - * @param key property to retrieve + * @param key property to retrieve * @param defaultValue default value * @return the value to which this configuration maps the specified key, or default value if the configuration * contains no mapping for this key. */ default Object getProperty(String key, Object defaultValue) { - return getInternalProperty(key, defaultValue); + Object value = getInternalProperty(key); + return value != null ? value : defaultValue; } Object getInternalProperty(String key); - Object getInternalProperty(String key, Object defaultValue); - /** * Check if the configuration contains the specified key. * @@ -154,12 +153,9 @@ public interface Configuration { default T convert(Class cls, String key, T defaultValue) { // we only process String properties for now - Object value = getProperty(key, defaultValue); + String value = (String) getProperty(key); - if (!String.class.isInstance(value)) { - if (cls.isInstance(value)) { - return cls.cast(value); - } + if (value == null) { return defaultValue; } @@ -168,26 +164,24 @@ public interface Configuration { return cls.cast(value); } - String str = (String) value; - if (Boolean.class.equals(cls) || Boolean.TYPE.equals(cls)) { - obj = Boolean.valueOf(str); + obj = Boolean.valueOf(value); } else if (Number.class.isAssignableFrom(cls) || cls.isPrimitive()) { if (Integer.class.equals(cls) || Integer.TYPE.equals(cls)) { - obj = Integer.valueOf(str); + obj = Integer.valueOf(value); } else if (Long.class.equals(cls) || Long.TYPE.equals(cls)) { - obj = Long.valueOf(str); + obj = Long.valueOf(value); } else if (Byte.class.equals(cls) || Byte.TYPE.equals(cls)) { - obj = Byte.valueOf(str); + obj = Byte.valueOf(value); } else if (Short.class.equals(cls) || Short.TYPE.equals(cls)) { - obj = Short.valueOf(str); + obj = Short.valueOf(value); } else if (Float.class.equals(cls) || Float.TYPE.equals(cls)) { - obj = Float.valueOf(str); + obj = Float.valueOf(value); } else if (Double.class.equals(cls) || Double.TYPE.equals(cls)) { - obj = Double.valueOf(str); + obj = Double.valueOf(value); } } else if (cls.isEnum()) { - obj = Enum.valueOf(cls.asSubclass(Enum.class), str); + obj = Enum.valueOf(cls.asSubclass(Enum.class), value); } return cls.cast(obj); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java index 785eb11e8e..de7ec54b9a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java @@ -81,7 +81,7 @@ public class Environment extends LifecycleAdapter implements ApplicationExt { public void initialize() throws IllegalStateException { if (initialized.compareAndSet(false, true)) { this.propertiesConfiguration = new PropertiesConfiguration(scopeModel); - this.systemConfiguration = new SystemConfiguration(scopeModel); + this.systemConfiguration = new SystemConfiguration(); this.environmentConfiguration = new EnvironmentConfiguration(); this.externalConfiguration = new InmemoryConfiguration("ExternalConfig"); this.appExternalConfiguration = new InmemoryConfiguration("AppExternalConfig"); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java index c95e92864e..227b180897 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/EnvironmentConfiguration.java @@ -34,19 +34,6 @@ public class EnvironmentConfiguration implements Configuration { return value; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - String value = System.getenv(key); - if (StringUtils.isEmpty(value)) { - value = System.getenv(StringUtils.toOSStyleKey(key)); - } - - if (StringUtils.isEmpty(value)) { - return defaultValue; - } - return value; - } - public Map getProperties() { return System.getenv(); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java index 6fc1d01c80..92d808de9f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java @@ -45,16 +45,6 @@ public class InmemoryConfiguration implements Configuration { return store.get(key); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = store.get(key); - if (v != null) { - return v; - } else { - return defaultValue; - } - } - /** * Add one property into the store, the previous value will be replaced if the key exists */ diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java index dbf0719429..191320ed7f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java @@ -68,16 +68,6 @@ public class OrderedPropertiesConfiguration implements Configuration { return properties.getProperty(key); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = properties.getProperty(key); - if (v != null){ - return v; - }else { - return defaultValue; - } - } - public void setProperty(String key, String value) { properties.setProperty(key, value); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java index 0220a1ecf1..e23e6601ec 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PrefixedConfiguration.java @@ -42,17 +42,4 @@ public class PrefixedConfiguration implements Configuration { return null; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - if (StringUtils.isBlank(prefix)) { - return origin.getInternalProperty(key, defaultValue); - } - - Object value = origin.getInternalProperty(prefix + "." + key, defaultValue); - if (!ConfigurationUtils.isEmptyValue(value)) { - return value; - } - return null; - } - } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java index 9d4ed79234..e215dfb799 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/PropertiesConfiguration.java @@ -49,16 +49,6 @@ public class PropertiesConfiguration implements Configuration { return properties.getProperty(key); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = properties.getProperty(key); - if (v != null){ - return v; - }else { - return defaultValue; - } - } - public void setProperty(String key, String value) { properties.setProperty(key, value); } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java index e1cb9d0c7e..8341fd4e15 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/SystemConfiguration.java @@ -17,94 +17,19 @@ package org.apache.dubbo.common.config; -import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository; -import org.apache.dubbo.rpc.model.ScopeModel; -import org.apache.dubbo.rpc.model.ScopeModelUtil; - import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; /** - * FIXME: is this really necessary? PropertiesConfiguration should have already covered this: - * - * @See ConfigUtils#getProperty(String) - * @see PropertiesConfiguration + * Configuration from system properties */ public class SystemConfiguration implements Configuration { - private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(SystemConfiguration.class); - - private final Map cache = new ConcurrentHashMap<>(); - - private final ScheduledExecutorService sharedScheduledExecutor; - - public SystemConfiguration(ScopeModel scopeModel) { - sharedScheduledExecutor = ScopeModelUtil.getFrameworkModel(scopeModel).getBeanFactory() - .getBean(FrameworkExecutorRepository.class).getSharedScheduledExecutor(); - sharedScheduledExecutor.scheduleWithFixedDelay(() -> { - if (!cache.isEmpty()) { - Set keys = cache.keySet(); - keys.forEach((key) -> overwriteCache(key, System.getProperty(key))); - } - }, 60000, 60000, TimeUnit.MILLISECONDS); - } - @Override public Object getInternalProperty(String key) { - if (cache.containsKey(key)) { - return cache.get(key); - } else { - Object val = System.getProperty(key); - if (val != null) { - cache.putIfAbsent(key, val); - } - return val; - } + return System.getProperty(key); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - if (cache.containsKey(key)) { - return cache.get(key); - } else { - Object val = System.getProperty(key); - if (val != null) { - cache.putIfAbsent(key, val); - } else { - val = defaultValue; - if (defaultValue != null) { - cache.putIfAbsent(key, defaultValue); - } - } - return val; - } - } - - public void overwriteCache(String key, Object value) { - if (value != null) { - cache.put(key, value); - } - } - - public void clearCache() { - cache.clear(); - } - - public Map getProperties() { - Properties properties = System.getProperties(); - Map res = new ConcurrentHashMap<>(properties.size()); - try { - res.putAll((Map) properties); - } catch (Exception e) { - logger.warn("System property get failed", e); - } - return res; + return (Map) System.getProperties(); } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java index 71a959dab7..afd1cac989 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/AbstractDynamicConfiguration.java @@ -120,11 +120,6 @@ public abstract class AbstractDynamicConfiguration implements DynamicConfigurati return null; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - return null; - } - @Override public final void close() throws Exception { try { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java index f834ed7ff7..0f08705189 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/nop/NopDynamicConfiguration.java @@ -36,11 +36,6 @@ public class NopDynamicConfiguration implements DynamicConfiguration { return null; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - return null; - } - @Override public void addListener(String key, String group, ConfigurationListener listener) { // no-op diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java index c1ee02d05e..d9f6e3d30d 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/configcenter/wrapper/CompositeDynamicConfiguration.java @@ -75,11 +75,6 @@ public class CompositeDynamicConfiguration implements DynamicConfiguration { return iterateConfigOperation(configuration -> configuration.getInternalProperty(key)); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - return iterateConfigOperation(configuration -> configuration.getInternalProperty(key, defaultValue)); - } - @Override public boolean publishConfig(String key, String group, String content) throws UnsupportedOperationException { boolean publishedAll = true; diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java index 15599e4cfb..2b141e8a8b 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/context/ConfigConfigurationAdapter.java @@ -42,16 +42,6 @@ public class ConfigConfigurationAdapter implements Configuration { return metaData.get(key); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = metaData.get(key); - if (v != null) { - return v; - } else { - return defaultValue; - } - } - public Map getProperties() { return metaData; } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java index 67050f40d6..39fb018695 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/config/SystemConfigurationTest.java @@ -16,7 +16,6 @@ */ package org.apache.dubbo.common.config; -import org.apache.dubbo.rpc.model.ApplicationModel; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -45,7 +44,7 @@ class SystemConfigurationTest { @BeforeEach public void init() { - sysConfig = new SystemConfiguration(ApplicationModel.defaultModel().getDefaultModule()); + sysConfig = new SystemConfiguration(); } /** @@ -71,23 +70,23 @@ class SystemConfigurationTest { void testConvert() { Assertions.assertEquals( MOCK_STRING_VALUE, sysConfig.convert(String.class, NOT_EXIST_KEY, MOCK_STRING_VALUE)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_BOOL_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_BOOL_VALUE)); Assertions.assertEquals(MOCK_BOOL_VALUE, sysConfig.convert(Boolean.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_STRING_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_STRING_VALUE)); Assertions.assertEquals(MOCK_STRING_VALUE, sysConfig.convert(String.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_INT_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_INT_VALUE)); Assertions.assertEquals(MOCK_INT_VALUE, sysConfig.convert(Integer.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_LONG_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_LONG_VALUE)); Assertions.assertEquals(MOCK_LONG_VALUE, sysConfig.convert(Long.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_SHORT_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_SHORT_VALUE)); Assertions.assertEquals(MOCK_SHORT_VALUE, sysConfig.convert(Short.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_FLOAT_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_FLOAT_VALUE)); Assertions.assertEquals(MOCK_FLOAT_VALUE, sysConfig.convert(Float.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_DOUBLE_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_DOUBLE_VALUE)); Assertions.assertEquals(MOCK_DOUBLE_VALUE, sysConfig.convert(Double.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(MOCK_BYTE_VALUE)); + System.setProperty(MOCK_KEY, String.valueOf(MOCK_BYTE_VALUE)); Assertions.assertEquals(MOCK_BYTE_VALUE, sysConfig.convert(Byte.class, MOCK_KEY, null)); - sysConfig.overwriteCache(MOCK_KEY, String.valueOf(ConfigMock.MockOne)); + System.setProperty(MOCK_KEY, String.valueOf(ConfigMock.MockOne)); Assertions.assertEquals(ConfigMock.MockOne, sysConfig.convert(ConfigMock.class, MOCK_KEY, null)); } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java index 62a923f5ee..0ffd6546c3 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/SerializeClassCheckerTest.java @@ -16,11 +16,9 @@ */ package org.apache.dubbo.common.utils; -import org.apache.dubbo.common.config.SystemConfiguration; import org.apache.dubbo.common.constants.CommonConstants; import javassist.compiler.Javac; -import org.apache.dubbo.rpc.model.ApplicationModel; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -59,16 +57,14 @@ class SerializeClassCheckerTest { serializeClassChecker.validateClass(int.class.getName().toUpperCase(Locale.ROOT)); } - Assertions.assertThrows(IllegalArgumentException.class, () -> { + Assertions.assertThrows(IllegalArgumentException.class, ()-> { serializeClassChecker.validateClass(Socket.class.getName()); }); } @Test void testAddAllow() { - SystemConfiguration systemConfiguration = ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration(); - - systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, Socket.class.getName() + "," + Javac.class.getName()); + System.setProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, Socket.class.getName() + "," + Javac.class.getName()); SerializeClassChecker serializeClassChecker = SerializeClassChecker.getInstance(); for (int i = 0; i < 10; i++) { @@ -76,44 +72,40 @@ class SerializeClassCheckerTest { serializeClassChecker.validateClass(Javac.class.getName()); } - systemConfiguration.clearCache(); - + System.clearProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST); } @Test void testAddBlock() { - SystemConfiguration systemConfiguration = ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration(); - systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST, LinkedList.class.getName() + "," + Integer.class.getName()); + System.setProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST, LinkedList.class.getName() + "," + Integer.class.getName()); SerializeClassChecker serializeClassChecker = SerializeClassChecker.getInstance(); for (int i = 0; i < 10; i++) { - Assertions.assertThrows(IllegalArgumentException.class, () -> { + Assertions.assertThrows(IllegalArgumentException.class, ()-> { serializeClassChecker.validateClass(LinkedList.class.getName()); }); - Assertions.assertThrows(IllegalArgumentException.class, () -> { + Assertions.assertThrows(IllegalArgumentException.class, ()-> { serializeClassChecker.validateClass(Integer.class.getName()); }); } - systemConfiguration.clearCache(); - + System.clearProperty(CommonConstants.CLASS_DESERIALIZE_BLOCKED_LIST); } @Test void testBlockAll() { - SystemConfiguration systemConfiguration = ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration(); - - systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, "true"); - systemConfiguration.overwriteCache(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, LinkedList.class.getName()); + System.setProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL, "true"); + System.setProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST, LinkedList.class.getName()); SerializeClassChecker serializeClassChecker = SerializeClassChecker.getInstance(); for (int i = 0; i < 10; i++) { serializeClassChecker.validateClass(LinkedList.class.getName()); - Assertions.assertThrows(IllegalArgumentException.class, () -> { + Assertions.assertThrows(IllegalArgumentException.class, ()-> { serializeClassChecker.validateClass(Integer.class.getName()); }); } - systemConfiguration.clearCache(); + System.clearProperty(CommonConstants.CLASS_DESERIALIZE_BLOCK_ALL); + System.clearProperty(CommonConstants.CLASS_DESERIALIZE_ALLOWED_LIST); } } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java index de5bff64f1..95f3e2679e 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigManagerTest.java @@ -393,33 +393,22 @@ class ConfigManagerTest { @Test void testLoadConfigsOfTypeFromProps() { try { - System.setProperty("dubbo.protocols.dubbo1.port", "20880"); - System.setProperty("dubbo.protocols.dubbo2.port", "20881"); - System.setProperty("dubbo.protocols.rest1.port", "8080"); - System.setProperty("dubbo.protocols.rest2.port", "8081"); - - ApplicationModel.defaultModel().destroy(); - ApplicationModel applicationModel = ApplicationModel.defaultModel(); - configManager = applicationModel.getApplicationConfigManager(); - moduleConfigManager = applicationModel.getDefaultModule().getConfigManager(); - // dubbo.application.enable-file-cache = false configManager.loadConfigsOfTypeFromProps(ApplicationConfig.class); Optional application = configManager.getApplication(); Assertions.assertTrue(application.isPresent()); configManager.removeConfig(application.get()); + System.setProperty("dubbo.protocols.dubbo1.port", "20880"); + System.setProperty("dubbo.protocols.dubbo2.port", "20881"); + System.setProperty("dubbo.protocols.rest1.port", "8080"); + System.setProperty("dubbo.protocols.rest2.port", "8081"); configManager.loadConfigsOfTypeFromProps(ProtocolConfig.class); Collection protocols = configManager.getProtocols(); Assertions.assertEquals(protocols.size(), 4); System.setProperty("dubbo.applications.app1.name", "app-demo1"); System.setProperty("dubbo.applications.app2.name", "app-demo2"); - - ApplicationModel.defaultModel().destroy(); - applicationModel = ApplicationModel.defaultModel(); - configManager = applicationModel.getApplicationConfigManager(); - moduleConfigManager = applicationModel.getDefaultModule().getConfigManager(); try { configManager.loadConfigsOfTypeFromProps(ApplicationConfig.class); Assertions.fail(); diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java index 8163ecac3b..10456003f5 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/MultiInstanceTest.java @@ -120,7 +120,7 @@ class MultiInstanceTest { @AfterEach public void afterEach() { SysProps.clear(); - FrameworkModel.destroyAll(); + DubboBootstrap.reset(); } @Test @@ -152,12 +152,12 @@ class MultiInstanceTest { @Test void testDefaultProviderApplication() { - DubboBootstrap.reset(); DubboBootstrap dubboBootstrap = DubboBootstrap.getInstance(); try { configProviderApp(dubboBootstrap).start(); } finally { dubboBootstrap.destroy(); + DubboBootstrap.reset(); } } @@ -172,12 +172,13 @@ class MultiInstanceTest { Assertions.assertTrue(e.toString().contains("No provider available"), StringUtils.toString(e)); } finally { dubboBootstrap.destroy(); + DubboBootstrap.reset(); + SysProps.clear(); } } @Test void testDefaultMixedApplication() { - DubboBootstrap.reset(); DubboBootstrap dubboBootstrap = DubboBootstrap.getInstance(); try { dubboBootstrap.application("mixed-app"); @@ -188,6 +189,7 @@ class MultiInstanceTest { testConsumer(dubboBootstrap); } finally { dubboBootstrap.destroy(); + DubboBootstrap.reset(); } } @@ -217,8 +219,6 @@ class MultiInstanceTest { void testMultiModuleApplication() throws InterruptedException { //SysProps.setProperty(METADATA_PUBLISH_DELAY_KEY, "100"); - - FrameworkModel frameworkModel = new FrameworkModel(); String version1 = "1.0"; String version2 = "2.0"; String version3 = "3.0"; @@ -228,7 +228,7 @@ class MultiInstanceTest { try { // provider app - providerBootstrap = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap = DubboBootstrap.newInstance(); ServiceConfig serviceConfig1 = new ServiceConfig(); serviceConfig1.setInterface(DemoService.class); @@ -272,7 +272,7 @@ class MultiInstanceTest { //Thread.sleep(200); // consumer app - consumerBootstrap = DubboBootstrap.newInstance(frameworkModel); + consumerBootstrap = DubboBootstrap.newInstance(); consumerBootstrap.application("consumer-app") .registry(registryConfig) .reference(builder -> builder @@ -306,12 +306,10 @@ class MultiInstanceTest { @Test void testMultiProviderApplicationsStopOneByOne() { - DubboBootstrap.reset(); String version1 = "1.0"; String version2 = "2.0"; - FrameworkModel frameworkModel = new FrameworkModel(); DubboBootstrap providerBootstrap1 = null; DubboBootstrap providerBootstrap2 = null; @@ -328,7 +326,7 @@ class MultiInstanceTest { ProtocolConfig protocolConfig1 = new ProtocolConfig("dubbo", NetUtils.getAvailablePort()); - providerBootstrap1 = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap1 = DubboBootstrap.getInstance(); providerBootstrap1.application("provider1") .registry(new RegistryConfig(registryConfig.getAddress())) .service(serviceConfig1) @@ -351,7 +349,7 @@ class MultiInstanceTest { ProtocolConfig protocolConfig2 = new ProtocolConfig("dubbo", NetUtils.getAvailablePort()); - providerBootstrap2 = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap2 = DubboBootstrap.newInstance(); providerBootstrap2.application("provider2") .registry(registryConfig2) .service(serviceConfig2) @@ -374,7 +372,7 @@ class MultiInstanceTest { // stop provider app 2 and check threads providerBootstrap2.stop(); // shutdown register center after dubbo application to avoid unregister services blocking - checkUnclosedThreadsOfApp(stackTraces2, "Found unclosed threads of app 2: ", new String[]{"Dubbo-framework-shared-scheduler"}); + checkUnclosedThreadsOfApp(stackTraces2, "Found unclosed threads of app 2: ", null); } finally { if (providerBootstrap1 != null) { @@ -430,7 +428,6 @@ class MultiInstanceTest { String version2 = "2.0"; String version3 = "3.0"; - FrameworkModel frameworkModel = new FrameworkModel(); String serviceKey1 = DemoService.class.getName() + ":" + version1; String serviceKey2 = DemoService.class.getName() + ":" + version2; String serviceKey3 = DemoService.class.getName() + ":" + version3; @@ -440,7 +437,7 @@ class MultiInstanceTest { try { // provider app - providerBootstrap = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap = DubboBootstrap.newInstance(); ServiceConfig serviceConfig1 = new ServiceConfig(); serviceConfig1.setInterface(DemoService.class); @@ -478,7 +475,7 @@ class MultiInstanceTest { Assertions.assertNull(frameworkServiceRepository.lookupExportedServiceWithoutGroup(serviceKey3)); // consumer module 1 - consumerBootstrap = DubboBootstrap.newInstance(frameworkModel); + consumerBootstrap = DubboBootstrap.newInstance(); consumerBootstrap.application("consumer-app") .registry(registryConfig) .reference(builder -> builder @@ -573,7 +570,6 @@ class MultiInstanceTest { String version2 = "2.0"; String version3 = "3.0"; - FrameworkModel frameworkModel = new FrameworkModel(); String serviceKey1 = DemoService.class.getName() + ":" + version1; String serviceKey2 = DemoService.class.getName() + ":" + version2; String serviceKey3 = DemoService.class.getName() + ":" + version3; @@ -581,7 +577,7 @@ class MultiInstanceTest { // provider app DubboBootstrap providerBootstrap = null; try { - providerBootstrap = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap = DubboBootstrap.newInstance(); ServiceConfig serviceConfig1 = new ServiceConfig(); serviceConfig1.setInterface(DemoService.class); @@ -654,7 +650,6 @@ class MultiInstanceTest { String version2 = "2.0"; String version3 = "3.0"; - FrameworkModel frameworkModel = new FrameworkModel(); String serviceKey1 = DemoService.class.getName() + ":" + version1; String serviceKey2 = DemoService.class.getName() + ":" + version2; String serviceKey3 = DemoService.class.getName() + ":" + version3; @@ -662,7 +657,7 @@ class MultiInstanceTest { // provider app DubboBootstrap providerBootstrap = null; try { - providerBootstrap = DubboBootstrap.newInstance(frameworkModel); + providerBootstrap = DubboBootstrap.newInstance(); ServiceConfig serviceConfig1 = new ServiceConfig(); serviceConfig1.setInterface(DemoService.class); @@ -709,7 +704,6 @@ class MultiInstanceTest { @Test void testOldApiDeploy() throws Exception { - DubboBootstrap.reset(); try { // provider app ApplicationModel providerApplicationModel = ApplicationModel.defaultModel(); @@ -785,10 +779,8 @@ class MultiInstanceTest { @Test void testAsyncExportAndReferServices() throws ExecutionException, InterruptedException { - FrameworkModel frameworkModel = new FrameworkModel(); - - DubboBootstrap providerBootstrap = DubboBootstrap.newInstance(frameworkModel); - DubboBootstrap consumerBootstrap = DubboBootstrap.newInstance(frameworkModel); + DubboBootstrap providerBootstrap = DubboBootstrap.newInstance(); + DubboBootstrap consumerBootstrap = DubboBootstrap.newInstance(); try { ServiceConfig serviceConfig = new ServiceConfig(); diff --git a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java index a6e503debe..9525f7ce7e 100644 --- a/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-apollo/src/main/java/org/apache/dubbo/configcenter/support/apollo/ApolloDynamicConfiguration.java @@ -47,8 +47,8 @@ import static org.apache.dubbo.common.constants.CommonConstants.CHECK_KEY; import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SPLIT_PATTERN; import static org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY; -import static org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_CONNECT_REGISTRY; import static org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_CLOSE_CONNECT_APOLLO; +import static org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_FAILED_CONNECT_REGISTRY; import static org.apache.dubbo.common.constants.LoggerCodeConstants.CONFIG_NOT_EFFECT_EMPTY_RULE_APOLLO; /** @@ -215,16 +215,6 @@ public class ApolloDynamicConfiguration implements DynamicConfiguration { return dubboConfig.getProperty(key, null); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = dubboConfig.getProperty(key, null); - if (v != null) { - return v; - } else { - return defaultValue; - } - } - /** * Ignores the group parameter. * diff --git a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java index bc95620220..2f43c85f27 100644 --- a/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-nacos/src/main/java/org/apache/dubbo/configcenter/support/nacos/NacosDynamicConfiguration.java @@ -220,17 +220,6 @@ public class NacosDynamicConfiguration implements DynamicConfiguration { return null; } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = defaultValue; - try { - v = configService.getConfig(key, DEFAULT_GROUP, getDefaultTimeout()); - } catch (NacosException e) { - logger.error(e.getMessage()); - } - return v; - } - @Override public boolean publishConfig(String key, String group, String content) { boolean published = false; diff --git a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java index 4836012aa1..4836ed1b2f 100644 --- a/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java +++ b/dubbo-configcenter/dubbo-configcenter-zookeeper/src/main/java/org/apache/dubbo/configcenter/support/zookeeper/ZookeeperDynamicConfiguration.java @@ -85,16 +85,6 @@ public class ZookeeperDynamicConfiguration extends TreePathDynamicConfiguration return zkClient.getContent(buildPathKey("", key)); } - @Override - public Object getInternalProperty(String key, Object defaultValue) { - Object v = zkClient.getContent(buildPathKey("", key)); - if (v != null) { - return v; - } else { - return defaultValue; - } - } - @Override protected void doClose() throws Exception { // remove data listener diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java index afd8d86837..4814ce0acc 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/AsyncRpcResult.java @@ -66,6 +66,11 @@ public class AsyncRpcResult implements Result { private CompletableFuture responseFuture; + /** + * Whether set future to Thread Local when invocation mode is sync + */ + private static final boolean setFutureWhenSync = Boolean.parseBoolean(System.getProperty(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true")); + public AsyncRpcResult(CompletableFuture future, Invocation invocation) { this.responseFuture = future; this.invocation = invocation; @@ -211,11 +216,7 @@ public class AsyncRpcResult implements Result { fn.accept(v, t); }); - // Whether set future to Thread Local when invocation mode is sync - String setFutureWhenSync = invocation.getModuleModel().getModelEnvironment().getSystemConfiguration() - .getString(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true"); - - if (Boolean.parseBoolean(setFutureWhenSync) || ((RpcInvocation) invocation).getInvokeMode() != InvokeMode.SYNC) { + if (setFutureWhenSync || ((RpcInvocation) invocation).getInvokeMode() != InvokeMode.SYNC) { // Necessary! update future in context, see https://github.com/apache/dubbo/issues/9461 RpcContext.getServiceContext().setFuture(new FutureAdapter<>(this.responseFuture)); } diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java index f9243c76df..3433fb4dc6 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/filter/AccessLogFilter.java @@ -81,7 +81,7 @@ public class AccessLogFilter implements Filter { private AtomicBoolean scheduled = new AtomicBoolean(); - private final String LINE_SEPARATOR = System.getProperty("line.separator"); + private static final String LINE_SEPARATOR = "line.separator"; /** * Default constructor initialize demon thread for writing into access log file with names with access log key @@ -173,7 +173,7 @@ public class AccessLogFilter implements Filter { try { while (!logQueue.isEmpty()) { writer.write(logQueue.poll().getLogMessage()); - writer.write(LINE_SEPARATOR); + writer.write(System.getProperty(LINE_SEPARATOR)); } } finally { writer.flush(); diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java index fe668d65b9..ee04a1ded8 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/protocol/AbstractInvoker.java @@ -87,6 +87,11 @@ public abstract class AbstractInvoker implements Invoker { */ private boolean destroyed = false; + /** + * Whether set future to Thread Local when invocation mode is sync + */ + private static final boolean setFutureWhenSync = Boolean.parseBoolean(System.getProperty(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true")); + // -- Constructor public AbstractInvoker(Class type, URL url) { @@ -237,11 +242,7 @@ public abstract class AbstractInvoker implements Invoker { asyncResult = AsyncRpcResult.newDefaultAsyncResult(null, e, invocation); } - // Whether set future to Thread Local when invocation mode is sync - String setFutureWhenSync = invocation.getModuleModel().getModelEnvironment().getSystemConfiguration() - .getString(CommonConstants.SET_FUTURE_IN_SYNC_MODE, "true"); - - if (Boolean.parseBoolean(setFutureWhenSync) || invocation.getInvokeMode() != InvokeMode.SYNC) { + if (setFutureWhenSync || invocation.getInvokeMode() != InvokeMode.SYNC) { // set server context RpcContext.getServiceContext().setFuture(new FutureAdapter<>(asyncResult.getResponseFuture())); } diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java index af997afe7d..c24bd27817 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java @@ -17,7 +17,6 @@ package org.apache.dubbo.rpc.protocol.dubbo; -import org.apache.dubbo.common.config.ConfigurationUtils; import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.serialize.Cleanable; @@ -38,7 +37,6 @@ import org.apache.dubbo.rpc.model.FrameworkServiceRepository; import org.apache.dubbo.rpc.model.MethodDescriptor; import org.apache.dubbo.rpc.model.ModuleModel; import org.apache.dubbo.rpc.model.ProviderModel; -import org.apache.dubbo.rpc.model.ScopeModel; import org.apache.dubbo.rpc.model.ServiceDescriptor; import org.apache.dubbo.rpc.support.RpcUtils; @@ -136,17 +134,7 @@ public class DecodeableRpcInvocation extends RpcInvocation implements Codec, Dec ClassLoader originClassLoader = Thread.currentThread().getContextClassLoader(); try { - ScopeModel scopeModel = channel.getUrl().getScopeModel(); - if (scopeModel instanceof ModuleModel) { - scopeModel = scopeModel.getParent(); - } else { - scopeModel = ApplicationModel.defaultModel(); - } - String serializationSecurityCheck = ConfigurationUtils.getSystemConfiguration( - scopeModel).getString(SERIALIZATION_SECURITY_CHECK_KEY, "true"); - - - if (Boolean.parseBoolean(serializationSecurityCheck)) { + if (Boolean.parseBoolean(System.getProperty(SERIALIZATION_SECURITY_CHECK_KEY, "true"))) { CodecSupport.checkSerialization(frameworkModel.getServiceRepository(), path, version, serializationType); } Object[] args = DubboCodec.EMPTY_OBJECT_ARRAY; diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java index 254b99c4ee..f6f08ab3ec 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/decode/DubboTelnetDecodeTest.java @@ -16,9 +16,6 @@ */ package org.apache.dubbo.rpc.protocol.dubbo.decode; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.embedded.EmbeddedChannel; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.extension.ExtensionLoader; import org.apache.dubbo.common.url.component.ServiceConfigURL; @@ -41,6 +38,10 @@ import org.apache.dubbo.rpc.model.ModuleServiceRepository; import org.apache.dubbo.rpc.protocol.dubbo.DecodeableRpcInvocation; import org.apache.dubbo.rpc.protocol.dubbo.DubboCodec; import org.apache.dubbo.rpc.protocol.dubbo.support.DemoService; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.embedded.EmbeddedChannel; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -77,13 +78,13 @@ class DubboTelnetDecodeTest { // disable org.apache.dubbo.remoting.transport.CodecSupport.checkSerialization to avoid error: // java.io.IOException: Service org.apache.dubbo.rpc.protocol.dubbo.support.DemoService with version 0.0.0 not found, invocation rejected. - ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration().overwriteCache(SERIALIZATION_SECURITY_CHECK_KEY, "false"); + System.setProperty(SERIALIZATION_SECURITY_CHECK_KEY, "false"); } @AfterAll public static void teardown() { FrameworkModel.defaultModel().destroy(); - ApplicationModel.defaultModel().getModelEnvironment().getSystemConfiguration().clearCache(); + System.clearProperty(SERIALIZATION_SECURITY_CHECK_KEY); } @@ -100,26 +101,25 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler(null, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - if (checkDubboDecoded(msg)) { - dubbo.incrementAndGet(); - } - return getDefaultFuture(); - } - })))); + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + if (checkDubboDecoded(msg)) { + dubbo.incrementAndGet(); + } + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(dubboByteBuf); } catch (Exception e) { @@ -148,7 +148,6 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler((msg) -> { @@ -156,19 +155,19 @@ class DubboTelnetDecodeTest { telnet.incrementAndGet(); } }, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - return getDefaultFuture(); - } - })))); + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(telnetByteBuf); } catch (Exception e) { @@ -193,13 +192,13 @@ class DubboTelnetDecodeTest { * | telnet(incomplete) | * +--------------------------------------------------+ *

- *

+ * * Second ByteBuf: * +--------------------------++----------------------+ * | telnet(the remaining) || dubbo(complete) | * +--------------------------++----------------------+ - * || - * Magic Code + * || + * Magic Code * * @throws InterruptedException */ @@ -212,7 +211,6 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler((msg) -> { @@ -220,23 +218,23 @@ class DubboTelnetDecodeTest { telnetDubbo.incrementAndGet(); } }, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - if (checkDubboDecoded(msg)) { - telnetDubbo.incrementAndGet(); - } + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + if (checkDubboDecoded(msg)) { + telnetDubbo.incrementAndGet(); + } - return getDefaultFuture(); - } - })))); + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(telnetByteBuf); ch.writeInbound(Unpooled.wrappedBuffer(Unpooled.wrappedBuffer("\n".getBytes()), dubboByteBuf)); @@ -267,7 +265,7 @@ class DubboTelnetDecodeTest { * | telnet(incomplete) | * +--------------------------------------------------+ *

- *

+ * * Second ByteBuf (secondByteBuf): * +--------------------------------------------------+ * | telnet(the remaining) | telnet(complete) | @@ -285,7 +283,6 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler((msg) -> { @@ -293,19 +290,19 @@ class DubboTelnetDecodeTest { telnetTelnet.incrementAndGet(); } }, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - return getDefaultFuture(); - } - })))); + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(firstByteBuf); ch.writeInbound(secondByteBuf); @@ -339,8 +336,8 @@ class DubboTelnetDecodeTest { * +-------------------------++-----------------------+ * | dubbo(the remaining) || dubbo(complete) | * +-------------------------++-----------------------+ - * || - * Magic Code + * || + * Magic Code * * @throws InterruptedException */ @@ -357,26 +354,25 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler(null, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - if (checkDubboDecoded(msg)) { - dubboDubbo.incrementAndGet(); - } - return getDefaultFuture(); - } - })))); + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + if (checkDubboDecoded(msg)) { + dubboDubbo.incrementAndGet(); + } + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(firstDubboByteBuf); ch.writeInbound(secondDubboByteBuf); @@ -425,7 +421,6 @@ class DubboTelnetDecodeTest { try { Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo"); URL url = new ServiceConfigURL("dubbo", "localhost", 22226); - url = url.setScopeModel(ApplicationModel.defaultModel().newModule()); NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler()); MockHandler mockHandler = new MockHandler((msg) -> { @@ -433,22 +428,22 @@ class DubboTelnetDecodeTest { dubboTelnet.incrementAndGet(); } }, - new MultiMessageHandler( - new DecodeHandler( - new HeaderExchangeHandler(new ExchangeHandlerAdapter() { - @Override - public CompletableFuture reply(ExchangeChannel channel, Object msg) { - if (checkDubboDecoded(msg)) { - dubboTelnet.incrementAndGet(); - } - return getDefaultFuture(); - } - })))); + new MultiMessageHandler( + new DecodeHandler( + new HeaderExchangeHandler(new ExchangeHandlerAdapter() { + @Override + public CompletableFuture reply(ExchangeChannel channel, Object msg) { + if (checkDubboDecoded(msg)) { + dubboTelnet.incrementAndGet(); + } + return getDefaultFuture(); + } + })))); ch = new LocalEmbeddedChannel(); ch.pipeline() - .addLast("decoder", adapter.getDecoder()) - .addLast("handler", mockHandler); + .addLast("decoder", adapter.getDecoder()) + .addLast("handler", mockHandler); ch.writeInbound(firstDubboByteBuf); ch.writeInbound(secondByteBuf); @@ -501,13 +496,13 @@ class DubboTelnetDecodeTest { if (msg instanceof DecodeableRpcInvocation) { DecodeableRpcInvocation invocation = (DecodeableRpcInvocation) msg; if ("sayHello".equals(invocation.getMethodName()) - && invocation.getParameterTypes().length == 1 - && String.class.equals(invocation.getParameterTypes()[0]) - && invocation.getArguments().length == 1 - && "dubbo".equals(invocation.getArguments()[0]) - && DemoService.class.getName().equals(invocation.getAttachment("path")) - && DemoService.class.getName().equals(invocation.getAttachment("interface")) - && "0.0.0".equals(invocation.getAttachment("version"))) { + && invocation.getParameterTypes().length == 1 + && String.class.equals(invocation.getParameterTypes()[0]) + && invocation.getArguments().length == 1 + && "dubbo".equals(invocation.getArguments()[0]) + && DemoService.class.getName().equals(invocation.getAttachment("path")) + && DemoService.class.getName().equals(invocation.getAttachment("interface")) + && "0.0.0".equals(invocation.getAttachment("version"))) { return true; } } diff --git a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java index ce0baccd02..cca8697030 100644 --- a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java +++ b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/DefaultHessian2FactoryInitializer.java @@ -24,7 +24,7 @@ public class DefaultHessian2FactoryInitializer extends AbstractHessian2FactoryIn @Override protected SerializerFactory createSerializerFactory() { Hessian2SerializerFactory hessian2SerializerFactory = new Hessian2SerializerFactory(); - hessian2SerializerFactory.setAllowNonSerializable(Boolean.parseBoolean(ALLOW_NON_SERIALIZABLE)); + hessian2SerializerFactory.setAllowNonSerializable(Boolean.parseBoolean(System.getProperty("dubbo.hessian.allowNonSerializable", "false"))); hessian2SerializerFactory.getClassFactory().allow("org.apache.dubbo.*"); return hessian2SerializerFactory; } diff --git a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java index 2095587b4e..842888cf1b 100644 --- a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java +++ b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/dubbo/Hessian2FactoryInitializer.java @@ -27,9 +27,7 @@ import com.alibaba.com.caucho.hessian.io.SerializerFactory; @SPI(value = "default", scope = ExtensionScope.FRAMEWORK) public interface Hessian2FactoryInitializer { String ALLOW = System.getProperty("dubbo.application.hessian2.allow"); - String DENY = System.getProperty("dubbo.application.hessian2.deny"); - String WHITELIST = System.getProperty("dubbo.application.hessian2.whitelist"); String ALLOW_NON_SERIALIZABLE = System.getProperty("dubbo.hessian.allowNonSerializable", "false");