diff --git a/README.md b/README.md index 320551d4ad..7e1d6569bf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Apache Dubbo Project [![Build and Test For PR](https://github.com/apache/dubbo/actions/workflows/build-and-test-pr.yml/badge.svg)](https://github.com/apache/dubbo/actions/workflows/build-and-test-pr.yml) -[![Codecov](https://codecov.io/gh/apache/dubbo/branch/3.2/graph/badge.svg)](https://codecov.io/gh/apache/dubbo) +[![Codecov](https://codecov.io/gh/apache/dubbo/branch/3.3/graph/badge.svg)](https://codecov.io/gh/apache/dubbo) ![Maven](https://img.shields.io/maven-central/v/org.apache.dubbo/dubbo.svg) ![License](https://img.shields.io/github/license/alibaba/dubbo.svg) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/apache/dubbo.svg)](http://isitmaintained.com/project/apache/dubbo "Average time to resolve an issue") @@ -86,9 +86,9 @@ See [CONTRIBUTING](https://github.com/apache/dubbo/blob/master/CONTRIBUTING.md) * Fix bugs reported on [issues](https://github.com/apache/dubbo/issues), and send us a pull request. * Review the existing [pull request](https://github.com/apache/dubbo/pulls). * Improve the [website](https://github.com/apache/dubbo-website), typically we need - * blog post - * translation on documentation - * use cases around the integration of Dubbo in enterprise systems. + * blog post + * translation on documentation + * use cases around the integration of Dubbo in enterprise systems. * Improve the [dubbo-admin/dubbo-monitor](https://github.com/apache/dubbo-admin). * Contribute to the projects listed in [ecosystem](https://github.com/dubbo). * Other forms of contribution not explicitly enumerated above. diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java index cfae48fe79..7e74a769fe 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java @@ -23,7 +23,6 @@ import org.apache.dubbo.common.compiler.support.AdaptiveCompiler; import org.apache.dubbo.common.config.ConfigurationUtils; import org.apache.dubbo.common.config.Environment; import org.apache.dubbo.common.config.InmemoryConfiguration; -import org.apache.dubbo.common.utils.Assert; import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.ConfigUtils; @@ -284,23 +283,6 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } } - /** - * @deprecated After metrics config is refactored. - * This method should no longer use and will be deleted in the future. - */ - @Deprecated - protected void appendMetricsCompatible(Map map) { - MetricsConfig metricsConfig = getConfigManager().getMetrics().orElse(null); - if (metricsConfig != null) { - String protocol = Optional.ofNullable(metricsConfig.getProtocol()).orElse(PROTOCOL_PROMETHEUS); - if (!StringUtils.isEquals(protocol, PROTOCOL_PROMETHEUS)) { - Assert.notEmptyString(metricsConfig.getPort(), "Metrics port cannot be null"); - map.put("metrics.protocol", protocol); - map.put("metrics.port", metricsConfig.getPort()); - } - } - } - /** * To obtain the method list in the port, use reflection when in native mode and javassist otherwise. * diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java index 9588bf70f2..5a56ed40ea 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MetricsConfig.java @@ -84,12 +84,6 @@ public class MetricsConfig extends AbstractConfig { */ private Integer collectorSyncPeriod; - /** - * Deprecated: This parameter should no longer be used and will be removed in the future. - */ - @Deprecated - private String port; - /** * Configuration for Prometheus metrics collection. */ @@ -182,14 +176,6 @@ public class MetricsConfig extends AbstractConfig { this.enableRegistry = enableRegistry; } - public String getPort() { - return port; - } - - public void setPort(String port) { - this.port = port; - } - public PrometheusConfig getPrometheus() { return prometheus; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java b/dubbo-common/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java index 2da24303cb..adf70e16cf 100755 --- a/dubbo-common/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/metadata/definition/builder/DefaultTypeBuilder.java @@ -32,15 +32,18 @@ import java.util.Map; public final class DefaultTypeBuilder { public static TypeDefinition build(Class clazz, Map typeCache) { - final String canonicalName = clazz.getCanonicalName(); + String className = clazz.getCanonicalName(); + if (className == null) { + className = clazz.getName(); + } // Try to get a cached definition - TypeDefinition td = typeCache.get(canonicalName); + TypeDefinition td = typeCache.get(className); if (td != null) { return td; } - td = new TypeDefinition(canonicalName); - typeCache.put(canonicalName, td); + td = new TypeDefinition(className); + typeCache.put(className, td); // Primitive type if (!JaketConfigurationUtils.needAnalyzing(clazz)) { diff --git a/dubbo-common/src/test/java/org/apache/dubbo/metadata/definition/DefaultTypeBuilderTest.java b/dubbo-common/src/test/java/org/apache/dubbo/metadata/definition/DefaultTypeBuilderTest.java new file mode 100644 index 0000000000..74a691227c --- /dev/null +++ b/dubbo-common/src/test/java/org/apache/dubbo/metadata/definition/DefaultTypeBuilderTest.java @@ -0,0 +1,44 @@ +/* + * 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.dubbo.metadata.definition; + +import org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder; +import org.apache.dubbo.rpc.model.FrameworkModel; + +import java.util.HashMap; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class DefaultTypeBuilderTest { + @Test + void testInnerClass() { + TypeDefinitionBuilder.initBuilders(FrameworkModel.defaultModel()); + + Assertions.assertEquals( + String.class.getName(), + DefaultTypeBuilder.build(String.class, new HashMap<>()).getType()); + + DefaultTypeBuilderTest innerObject = new DefaultTypeBuilderTest() {}; + Assertions.assertEquals( + DefaultTypeBuilderTest.class.getName() + "$1", + DefaultTypeBuilder.build(innerObject.getClass(), new HashMap<>()) + .getType()); + + TypeDefinitionBuilder.BUILDERS = null; + } +} diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml index 107d69ce8b..961e03a405 100644 --- a/dubbo-config/dubbo-config-api/pom.xml +++ b/dubbo-config/dubbo-config-api/pom.xml @@ -242,7 +242,7 @@ org.testcontainers testcontainers - 1.19.3 + 1.19.4 test diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java index 68afe87120..cca118bbfa 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ReferenceConfig.java @@ -445,7 +445,6 @@ public class ReferenceConfig extends ReferenceConfigBase { AbstractConfig.appendParameters(map, getModule()); AbstractConfig.appendParameters(map, consumer); AbstractConfig.appendParameters(map, this); - appendMetricsCompatible(map); String hostToRegistry = ConfigUtils.getSystemProperty(DUBBO_IP_TO_REGISTRY); if (StringUtils.isEmpty(hostToRegistry)) { diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java index d870a50a86..4b13e2dcfc 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ServiceConfig.java @@ -683,7 +683,6 @@ public class ServiceConfig extends ServiceConfigBase { AbstractConfig.appendParameters(map, provider); AbstractConfig.appendParameters(map, protocolConfig); AbstractConfig.appendParameters(map, this); - appendMetricsCompatible(map); // append params with method configs, if (CollectionUtils.isNotEmpty(getMethods())) { diff --git a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd index 7477b12ecc..32f67add22 100644 --- a/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd +++ b/dubbo-config/dubbo-config-spring/src/main/resources/META-INF/dubbo.xsd @@ -1109,12 +1109,6 @@ - - - - - - diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index c29f3ba38d..a6e9e9a22e 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -95,7 +95,7 @@ 3.30.2-GA 1.14.11 3.2.10.Final - 4.1.104.Final + 4.1.106.Final 4.5.14 4.4.16 1.2.83 @@ -166,9 +166,9 @@ 2.2.7 1.2.0 - 1.19.3 + 1.19.4 3.2.13 - 1.6.12 + 1.6.13 1.1.10.5 1.70 @@ -180,7 +180,7 @@ 2.0 1.6.0 1.25.0 - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 diff --git a/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml b/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml index 7af1e8961c..2e6cf66a48 100644 --- a/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml +++ b/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml @@ -36,7 +36,7 @@ 1.7.36 5.1.0 3.8.3 - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 diff --git a/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml b/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml index 6361bebc19..5bc75c6540 100644 --- a/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml +++ b/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml @@ -36,7 +36,7 @@ 1.7.36 4.3.0 3.4.14 - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 diff --git a/dubbo-dependencies/pom.xml b/dubbo-dependencies/pom.xml index feb18276b3..585c25fc95 100644 --- a/dubbo-dependencies/pom.xml +++ b/dubbo-dependencies/pom.xml @@ -32,7 +32,7 @@ - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 diff --git a/dubbo-distribution/pom.xml b/dubbo-distribution/pom.xml index 9e2adecb9b..e3d4ca1a88 100644 --- a/dubbo-distribution/pom.xml +++ b/dubbo-distribution/pom.xml @@ -28,7 +28,7 @@ pom - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/pu/AbstractPortUnificationServer.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/pu/AbstractPortUnificationServer.java index c2b564b324..e456ef9766 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/pu/AbstractPortUnificationServer.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/api/pu/AbstractPortUnificationServer.java @@ -18,7 +18,6 @@ package org.apache.dubbo.remoting.api.pu; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.extension.ExtensionLoader; -import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.remoting.ChannelHandler; import org.apache.dubbo.remoting.RemotingException; import org.apache.dubbo.remoting.api.WireProtocol; @@ -29,12 +28,18 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.stream.Collectors; import static org.apache.dubbo.common.constants.CommonConstants.COMMA_SEPARATOR; import static org.apache.dubbo.common.constants.CommonConstants.EXT_PROTOCOL; public abstract class AbstractPortUnificationServer extends AbstractServer { - private final List protocols; + + /** + * extension name -> activate WireProtocol + */ + private final Map protocols; /* protocol name --> URL object @@ -52,20 +57,19 @@ public abstract class AbstractPortUnificationServer extends AbstractServer { public AbstractPortUnificationServer(URL url, ChannelHandler handler) throws RemotingException { super(url, handler); ExtensionLoader loader = url.getOrDefaultFrameworkModel().getExtensionLoader(WireProtocol.class); - List extProtocols = new ArrayList<>(); - // load main protocol - extProtocols.add(loader.getExtension(url.getProtocol())); + Map protocols = extensionLoader.getActivateExtension(url, new String[0]).stream() + .collect(Collectors.toConcurrentMap(extensionLoader::getExtensionName, Function.identity())) // load extra protocols String extraProtocols = url.getParameter(EXT_PROTOCOL); if (StringUtils.isNotEmpty(extraProtocols)) { Arrays.stream(extraProtocols.split(COMMA_SEPARATOR)).forEach(p -> { - extProtocols.add(loader.getExtension(p)); + protocols.put(p, loader.getExtension(p)); }); } - this.protocols = extProtocols; + this.protocols = protocols; } - public List getProtocols() { + public Map getProtocols() { return protocols; } diff --git a/dubbo-remoting/dubbo-remoting-netty/src/main/java/org/apache/dubbo/remoting/transport/netty/NettyPortUnificationServer.java b/dubbo-remoting/dubbo-remoting-netty/src/main/java/org/apache/dubbo/remoting/transport/netty/NettyPortUnificationServer.java index 204009b9c1..822b9e1fb1 100644 --- a/dubbo-remoting/dubbo-remoting-netty/src/main/java/org/apache/dubbo/remoting/transport/netty/NettyPortUnificationServer.java +++ b/dubbo-remoting/dubbo-remoting-netty/src/main/java/org/apache/dubbo/remoting/transport/netty/NettyPortUnificationServer.java @@ -156,7 +156,7 @@ public class NettyPortUnificationServer extends AbstractPortUnificationServer { } catch (Throwable e) { logger.warn(TRANSPORT_FAILED_CLOSE, "", "", e.getMessage(), e); } - for (WireProtocol protocol : getProtocols()) { + for (WireProtocol protocol : getProtocols().values()) { protocol.close(); } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java index 3e2fd50657..6f3171363c 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyConnectionClient.java @@ -131,7 +131,8 @@ public class NettyConnectionClient extends AbstractConnectionClient { NettyConfigOperator operator = new NettyConfigOperator(nettyChannel, getChannelHandler()); protocol.configClientPipeline(getUrl(), operator, nettySslContextOperator); - ch.closeFuture().addListener(channelFuture -> doClose()); + // set null but do not close this client, it will be reconnect in the future + ch.closeFuture().addListener(channelFuture -> channel.set(null)); // TODO support Socks5 } }); @@ -150,9 +151,7 @@ public class NettyConnectionClient extends AbstractConnectionClient { current.close(); } this.channel.set(null); - if (!closePromise.isDone()) { - closePromise.setSuccess(null); - } + closePromise.setSuccess(null); } } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServer.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServer.java index eaaab27f71..4af9649fc7 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServer.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServer.java @@ -200,7 +200,7 @@ public class NettyPortUnificationServer extends AbstractPortUnificationServer { logger.warn(TRANSPORT_FAILED_CLOSE, "", "", e.getMessage(), e); } - for (WireProtocol protocol : getProtocols()) { + for (WireProtocol protocol : getProtocols().values()) { protocol.close(); } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServerHandler.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServerHandler.java index 4969cf1d2d..fe07a9e69a 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServerHandler.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyPortUnificationServerHandler.java @@ -30,6 +30,7 @@ import org.apache.dubbo.remoting.transport.netty4.ssl.SslContexts; import javax.net.ssl.SSLSession; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -51,14 +52,14 @@ public class NettyPortUnificationServerHandler extends ByteToMessageDecoder { private final URL url; private final ChannelHandler handler; private final boolean detectSsl; - private final List protocols; + private final Map protocols; private final Map urlMapper; private final Map handlerMapper; public NettyPortUnificationServerHandler( URL url, boolean detectSsl, - List protocols, + Map protocols, ChannelHandler handler, Map urlMapper, Map handlerMapper) { @@ -118,8 +119,11 @@ public class NettyPortUnificationServerHandler extends ByteToMessageDecoder { if (providerConnectionConfig != null && isSsl(in)) { enableSsl(ctx, providerConnectionConfig); } else { - for (final WireProtocol protocol : protocols) { + Set supportedProtocolNames = new HashSet<>(protocols.keySet()); + supportedProtocolNames.retainAll(urlMapper.keySet()); + for (final String name : supportedProtocolNames) { + WireProtocol protocol = protocols.get(name); in.markReaderIndex(); ChannelBuffer buf = new NettyBackedChannelBuffer(in); final ProtocolDetector.Result result = protocol.detector().detect(buf); @@ -128,11 +132,8 @@ public class NettyPortUnificationServerHandler extends ByteToMessageDecoder { case UNRECOGNIZED: continue; case RECOGNIZED: - String protocolName = url.getOrDefaultFrameworkModel() - .getExtensionLoader(WireProtocol.class) - .getExtensionName(protocol); - ChannelHandler localHandler = this.handlerMapper.getOrDefault(protocolName, handler); - URL localURL = this.urlMapper.getOrDefault(protocolName, url); + ChannelHandler localHandler = this.handlerMapper.getOrDefault(name, handler); + URL localURL = this.urlMapper.getOrDefault(name, url); channel.setUrl(localURL); NettyConfigOperator operator = new NettyConfigOperator(channel, localHandler); operator.setDetectResult(result); diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePingPongHandler.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePingPongHandler.java index b2134f330f..c767ee92ef 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePingPongHandler.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TriplePingPongHandler.java @@ -70,7 +70,9 @@ public class TriplePingPongHandler extends ChannelDuplexHandler { @Override public void run() { - ctx.close(); + if (ctx.channel().isActive()) { + ctx.close(); + } } } } diff --git a/pom.xml b/pom.xml index 4c4becbc1f..3fceda021e 100644 --- a/pom.xml +++ b/pom.xml @@ -147,7 +147,7 @@ 3.22.3 1.54.0 - 2.42.0 + 2.43.0 check 1.0.0 2.38.0 @@ -714,7 +714,7 @@ org.codehaus.mojo license-maven-plugin - 2.3.0 + 2.4.0 license-check