From 5e4dc4252b4b40c5f0caefc30456dfdde2cc9cdd Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 7 Jul 2021 16:47:26 +0800 Subject: [PATCH 1/4] disable telnet by default --- .../dubbo/remoting/telnet/support/TelnetHandlerAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java index 95eb57540e8..8fb0ab0f3fd 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/telnet/support/TelnetHandlerAdapter.java @@ -67,7 +67,7 @@ public String telnet(Channel channel, String message) throws RemotingException { } else { buf.append("Command: "); buf.append(command); - buf.append(" disabled"); + buf.append(" disabled for security reasons, please enable support by listing the commands through 'telnet'"); } } else { buf.append("Unsupported command: "); @@ -86,7 +86,7 @@ public String telnet(Channel channel, String message) throws RemotingException { private boolean commandEnabled(URL url, String command) { String supportCommands = url.getParameter(TELNET); if (StringUtils.isEmpty(supportCommands)) { - return true; + return false; } String[] commands = COMMA_SPLIT_PATTERN.split(supportCommands); for (String c : commands) { From 3b976bd69b0f5be2f1ace3a9bbeddab5bfbba2fa Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Wed, 7 Jul 2021 17:52:13 +0800 Subject: [PATCH 2/4] fix ut --- .../dubbo/rpc/cluster/support/MergeableClusterInvokerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/MergeableClusterInvokerTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/MergeableClusterInvokerTest.java index 975eee6e84b..c22c540f4cf 100644 --- a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/MergeableClusterInvokerTest.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/support/MergeableClusterInvokerTest.java @@ -22,6 +22,7 @@ import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; +import org.apache.dubbo.rpc.RpcInvocation; import org.apache.dubbo.rpc.cluster.Directory; import org.junit.jupiter.api.Assertions; @@ -92,7 +93,7 @@ public void setUp() throws Exception { directory = mock(Directory.class); firstInvoker = mock(Invoker.class); secondInvoker = mock(Invoker.class); - invocation = mock(Invocation.class); + invocation = mock(RpcInvocation.class); } From 71ea109359ff729c8acfceb85621f36e19801e4e Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 8 Jul 2021 12:10:13 +0800 Subject: [PATCH 3/4] fix ut, reset resources --- .../java/org/apache/dubbo/common/config/Environment.java | 5 +++++ .../org/apache/dubbo/common/extension/ExtensionLoader.java | 2 ++ .../apache/dubbo/config/utils/ReferenceConfigCacheTest.java | 2 ++ 3 files changed, 9 insertions(+) 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 cfc1b0139e6..18c6eef715a 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 @@ -197,6 +197,7 @@ public void setDynamicConfiguration(DynamicConfiguration dynamicConfiguration) { public void destroy() throws IllegalStateException { clearExternalConfigs(); clearAppExternalConfigs(); + clearDynamicConfiguration(); } public PropertiesConfiguration getPropertiesConfiguration() { @@ -230,4 +231,8 @@ public void clearAppExternalConfigs() { this.appExternalConfiguration.clear(); this.appExternalConfigurationMap.clear(); } + + public void clearDynamicConfiguration() { + this.dynamicConfiguration = null; + } } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java index d85a34cf1b3..359f2e502bb 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java @@ -206,6 +206,8 @@ public static void destroyAll() { } } }); + EXTENSION_INSTANCES.clear(); + EXTENSION_LOADERS.clear(); } private static ClassLoader findClassLoader() { diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java index 055daff03ab..7d79f22dd32 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ReferenceConfigCacheTest.java @@ -18,6 +18,7 @@ import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.RegistryConfig; +import org.apache.dubbo.config.bootstrap.DubboBootstrap; import org.apache.dubbo.config.utils.service.FooService; import org.junit.jupiter.api.BeforeEach; @@ -33,6 +34,7 @@ public class ReferenceConfigCacheTest { public void setUp() throws Exception { MockReferenceConfig.setCounter(0); ReferenceConfigCache.CACHE_HOLDER.clear(); + DubboBootstrap.reset(); } @Test From cd5a5da50321576a332a0c2fac7295b0a50510ee Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Thu, 8 Jul 2021 16:33:44 +0800 Subject: [PATCH 4/4] fix ut, reset resources --- .../dubbo/config/DubboShutdownHook.java | 19 +++++++++++++------ .../config/bootstrap/DubboBootstrap.java | 18 ++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java index df2a295a91d..9efdc5fabab 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/DubboShutdownHook.java @@ -33,7 +33,6 @@ /** * The shutdown hook thread to do the clean up stuff. * This is a singleton in order to ensure there is only one shutdown hook registered. - * Because {@link ApplicationShutdownHooks} use {@link java.util.IdentityHashMap} * to store the shutdown hooks. */ public class DubboShutdownHook extends Thread { @@ -52,7 +51,7 @@ public class DubboShutdownHook extends Thread { /** * Has it already been destroyed or not? */ - private static final AtomicBoolean destroyed = new AtomicBoolean(false); + private final AtomicBoolean destroyed = new AtomicBoolean(false); private final EventDispatcher eventDispatcher = EventDispatcher.getDefaultExtension(); @@ -90,6 +89,7 @@ private void callback() { */ public void register() { if (registered.compareAndSet(false, true)) { + destroyed.set(false); DubboShutdownHook dubboShutdownHook = getDubboShutdownHook(); Runtime.getRuntime().addShutdownHook(dubboShutdownHook); dispatch(new DubboShutdownHookRegisteredEvent(dubboShutdownHook)); @@ -113,6 +113,10 @@ public void unregister() { public void doDestroy() { // dispatch the DubboDestroyedEvent @since 2.7.5 dispatch(new DubboServiceDestroyedEvent(this)); + if (destroyed.compareAndSet(false, true)) { + AbstractRegistryFactory.destroyAll(); + destroyProtocols(); + } } private void dispatch(Event event) { @@ -124,10 +128,7 @@ public boolean getRegistered() { } public static void destroyAll() { - if (destroyed.compareAndSet(false, true)) { - AbstractRegistryFactory.destroyAll(); - destroyProtocols(); - } + getDubboShutdownHook().doDestroy(); } /** @@ -146,4 +147,10 @@ public static void destroyProtocols() { } } } + + public static void reset() { + getDubboShutdownHook().destroyed.set(false); + getDubboShutdownHook().unregister(); + } + } diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java index 8bf3c9defc2..b5928c11521 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/bootstrap/DubboBootstrap.java @@ -876,6 +876,7 @@ private void initMetadataService() { */ public DubboBootstrap start() { if (started.compareAndSet(false, true)) { + destroyed.set(false); ready.set(false); initialize(); if (logger.isInfoEnabled()) { @@ -1258,16 +1259,15 @@ private ServiceInstance createServiceInstance(String serviceName, String host, i public void destroy() { if (destroyLock.tryLock()) { try { - if (started.compareAndSet(true, false) - && destroyed.compareAndSet(false, true)) { - - unregisterServiceInstance(); - unexportMetadataService(); - unexportServices(); - unreferServices(); + if (destroyed.compareAndSet(false, true)) { + if (started.compareAndSet(true, false)) { + unregisterServiceInstance(); + unexportMetadataService(); + unexportServices(); + unreferServices(); + } destroyRegistries(); - destroyServiceDiscoveries(); destroyExecutorRepository(); clear(); @@ -1279,6 +1279,7 @@ public void destroy() { DubboShutdownHook.destroyAll(); } finally { + initialized.set(false); destroyLock.unlock(); } } @@ -1428,6 +1429,7 @@ public static void reset() { */ @Deprecated public static void reset(boolean destroy) { + DubboShutdownHook.reset(); if (destroy) { if (instance != null) { instance.destroy();