From a4e0189ed6f13c6714ecc2ecbc73a7be8ea103ee Mon Sep 17 00:00:00 2001 From: huazhongming Date: Thu, 30 Nov 2023 17:42:01 +0800 Subject: [PATCH 01/10] Fix spotless check style failed for generated triple sources (#13440) Signed-off-by: crazyhzm --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index 6ea32aa8db..0b2fe0fde5 100644 --- a/pom.xml +++ b/pom.xml @@ -894,6 +894,9 @@ src/main/java/org/apache/dubbo/aot/generate/MemberCategory.java src/main/java/org/apache/dubbo/metrics/aggregate/DubboMergingDigest.java src/main/java/org/apache/dubbo/metrics/aggregate/DubboAbstractTDigest.java + **/TripleWrapper.java + **/com/google/rpc/** + **/io/grpc/** ${palantirJavaFormat.version} From b38a2815a1d6615cb24c138248ac391c6480e093 Mon Sep 17 00:00:00 2001 From: huazhongming Date: Thu, 30 Nov 2023 19:08:59 +0800 Subject: [PATCH 02/10] Fix spotless check style failed for generated xds sources (#13444) Signed-off-by: crazyhzm --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 0b2fe0fde5..c88a5d75f9 100644 --- a/pom.xml +++ b/pom.xml @@ -897,6 +897,7 @@ **/TripleWrapper.java **/com/google/rpc/** **/io/grpc/** + **/istio/** ${palantirJavaFormat.version} From 6dfddbfb2b32029272499735598cbcd80035c319 Mon Sep 17 00:00:00 2001 From: namelessssssssssss <100946116+namelessssssssssss@users.noreply.github.com> Date: Thu, 30 Nov 2023 19:19:29 +0800 Subject: [PATCH 03/10] Fix issue of metadata only registred to one nacos namespace (3.2.x) (#13439) * Fix nacos metadata namespace * Fix code style --------- Co-authored-by: nameless --- .../dubbo/metadata/MetadataConstants.java | 2 ++ .../report/MetadataReportInstance.java | 18 ++++++++++++++---- .../support/AbstractMetadataReportFactory.java | 6 +++++- .../nacos/NacosMetadataReportFactory.java | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataConstants.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataConstants.java index 8b808d7b24..d4e0f33e2d 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataConstants.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/MetadataConstants.java @@ -28,4 +28,6 @@ public interface MetadataConstants { String REPORT_CONSUMER_URL_KEY = "report-consumer-definition"; String PATH_SEPARATOR = "/"; + + String NAMESPACE_KEY = "namespace"; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java index 3fd14dff0b..ded589b471 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/MetadataReportInstance.java @@ -19,6 +19,7 @@ package org.apache.dubbo.metadata.report; import org.apache.dubbo.common.URL; import org.apache.dubbo.common.URLBuilder; import org.apache.dubbo.common.resource.Disposable; +import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.MetadataReportConfig; import org.apache.dubbo.metadata.report.support.NopMetadataReport; import org.apache.dubbo.rpc.model.ApplicationModel; @@ -35,6 +36,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_METADATA import static org.apache.dubbo.common.constants.CommonConstants.PORT_KEY; import static org.apache.dubbo.common.constants.CommonConstants.REGISTRY_LOCAL_FILE_CACHE_ENABLED; import static org.apache.dubbo.common.utils.StringUtils.isEmpty; +import static org.apache.dubbo.metadata.MetadataConstants.NAMESPACE_KEY; import static org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT_KEY; /** @@ -102,18 +104,26 @@ public class MetadataReportInstance implements Disposable { url = url.addParameterIfAbsent( REGISTRY_LOCAL_FILE_CACHE_ENABLED, String.valueOf(applicationModel.getCurrentConfig().getEnableFileCache())); - String relatedRegistryId = isEmpty(config.getRegistry()) - ? (isEmpty(config.getId()) ? DEFAULT_KEY : config.getId()) - : config.getRegistry(); // RegistryConfig registryConfig = applicationModel.getConfigManager().getRegistry(relatedRegistryId) // .orElseThrow(() -> new IllegalStateException("Registry id " + relatedRegistryId + " does not // exist.")); MetadataReport metadataReport = metadataReportFactory.getMetadataReport(url); if (metadataReport != null) { - metadataReports.put(relatedRegistryId, metadataReport); + metadataReports.put(getRelatedRegistryId(config, url), metadataReport); } } + private String getRelatedRegistryId(MetadataReportConfig config, URL url) { + String relatedRegistryId = isEmpty(config.getRegistry()) + ? (isEmpty(config.getId()) ? DEFAULT_KEY : config.getId()) + : config.getRegistry(); + String namespace = url.getParameter(NAMESPACE_KEY); + if (!StringUtils.isEmpty(namespace)) { + relatedRegistryId += ":" + namespace; + } + return relatedRegistryId; + } + public Map getMetadataReports(boolean checked) { return metadataReports; } diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java index e0d156773d..7f1770291f 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactory.java @@ -50,7 +50,7 @@ public abstract class AbstractMetadataReportFactory implements MetadataReportFac @Override public MetadataReport getMetadataReport(URL url) { url = url.setPath(MetadataReport.class.getName()).removeParameters(EXPORT_KEY, REFER_KEY); - String key = url.toServiceString(); + String key = toMetadataReportKey(url); MetadataReport metadataReport = serviceStoreMap.get(key); if (metadataReport != null) { @@ -88,6 +88,10 @@ public abstract class AbstractMetadataReportFactory implements MetadataReportFac } } + protected String toMetadataReportKey(URL url) { + return url.toServiceString(); + } + @Override public void destroy() { lock.lock(); diff --git a/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportFactory.java b/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportFactory.java index a858a0a1b1..338b4067b7 100644 --- a/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportFactory.java +++ b/dubbo-metadata/dubbo-metadata-report-nacos/src/main/java/org/apache/dubbo/metadata/store/nacos/NacosMetadataReportFactory.java @@ -17,9 +17,12 @@ package org.apache.dubbo.metadata.store.nacos; import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.metadata.report.MetadataReport; import org.apache.dubbo.metadata.report.support.AbstractMetadataReportFactory; +import static org.apache.dubbo.metadata.MetadataConstants.NAMESPACE_KEY; + /** * metadata report factory impl for nacos */ @@ -28,4 +31,15 @@ public class NacosMetadataReportFactory extends AbstractMetadataReportFactory { protected MetadataReport createMetadataReport(URL url) { return new NacosMetadataReport(url); } + + @Override + protected String toMetadataReportKey(URL url) { + String namespace = url.getParameter(NAMESPACE_KEY); + if (!StringUtils.isEmpty(namespace)) { + return URL.valueOf(url.toServiceString()) + .addParameter(NAMESPACE_KEY, namespace) + .toString(); + } + return super.toMetadataReportKey(url); + } } From a343b6f86a5a0df6d48bf41db7431b04e950fd63 Mon Sep 17 00:00:00 2001 From: huazhongming Date: Thu, 30 Nov 2023 19:22:33 +0800 Subject: [PATCH 04/10] Fix spotless check style failed for generated auth sources (#13445) Signed-off-by: crazyhzm --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index c88a5d75f9..d9f80e7bc6 100644 --- a/pom.xml +++ b/pom.xml @@ -898,6 +898,7 @@ **/com/google/rpc/** **/io/grpc/** **/istio/** + **/org/apache/dubbo/auth/v1alpha1/** ${palantirJavaFormat.version} From f1632c33ad31d7de427a88ea4a4f829650f91cb5 Mon Sep 17 00:00:00 2001 From: crazyhzm Date: Thu, 30 Nov 2023 19:56:30 +0800 Subject: [PATCH 05/10] Fix spotless check style failed for generated demo sources Signed-off-by: crazyhzm --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index d9f80e7bc6..ca665d9637 100644 --- a/pom.xml +++ b/pom.xml @@ -899,6 +899,7 @@ **/io/grpc/** **/istio/** **/org/apache/dubbo/auth/v1alpha1/** + **/demo/hello/** ${palantirJavaFormat.version} From 841ddb6e1f82d01f41a2c2a009de15a818c472be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:49:38 +0800 Subject: [PATCH 06/10] Bump com.diffplug.spotless:spotless-maven-plugin from 2.40.0 to 2.41.0 (#13416) Bumps [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) from 2.40.0 to 2.41.0. - [Changelog](https://github.com/diffplug/spotless/blob/main/CHANGES.md) - [Commits](https://github.com/diffplug/spotless/compare/lib/2.40.0...lib/2.41.0) --- updated-dependencies: - dependency-name: com.diffplug.spotless:spotless-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: huazhongming --- dubbo-build-tools/pom.xml | 2 +- dubbo-dependencies-bom/pom.xml | 2 +- .../dubbo-dependencies-zookeeper-curator5/pom.xml | 2 +- dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml | 2 +- dubbo-dependencies/pom.xml | 2 +- dubbo-distribution/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dubbo-build-tools/pom.xml b/dubbo-build-tools/pom.xml index a3826c7aba..01a524e352 100644 --- a/dubbo-build-tools/pom.xml +++ b/dubbo-build-tools/pom.xml @@ -23,7 +23,7 @@ true - 2.40.0 + 2.41.0 check 1.0.0 2.38.0 diff --git a/dubbo-dependencies-bom/pom.xml b/dubbo-dependencies-bom/pom.xml index fd7fa4e541..d2eed9173d 100644 --- a/dubbo-dependencies-bom/pom.xml +++ b/dubbo-dependencies-bom/pom.xml @@ -188,7 +188,7 @@ 2.0 1.5.0 1.23.0 - 2.40.0 + 2.41.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 0a89a2a215..beff816c91 100644 --- a/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml +++ b/dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml @@ -35,7 +35,7 @@ 1.5.0 5.1.0 3.8.1 - 2.40.0 + 2.41.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 da5c2d41d9..81eb83034b 100644 --- a/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml +++ b/dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml @@ -35,7 +35,7 @@ 1.5.0 4.3.0 3.4.14 - 2.40.0 + 2.41.0 check 1.0.0 2.38.0 diff --git a/dubbo-dependencies/pom.xml b/dubbo-dependencies/pom.xml index 441adfdb68..735560b9de 100644 --- a/dubbo-dependencies/pom.xml +++ b/dubbo-dependencies/pom.xml @@ -32,7 +32,7 @@ - 2.40.0 + 2.41.0 check 1.0.0 2.38.0 diff --git a/dubbo-distribution/pom.xml b/dubbo-distribution/pom.xml index 4b1b641e71..e02cbc62e1 100644 --- a/dubbo-distribution/pom.xml +++ b/dubbo-distribution/pom.xml @@ -28,7 +28,7 @@ pom - 2.40.0 + 2.41.0 check 1.0.0 2.38.0 diff --git a/pom.xml b/pom.xml index ca665d9637..70e569a2ce 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ 1.2.2 3.22.3 1.54.0 - 2.40.0 + 2.41.0 check 1.0.0 2.38.0 From d552cfca51a07765b080a84b8bddd044a694bc98 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Fri, 1 Dec 2023 10:25:03 +0800 Subject: [PATCH 07/10] Fix generic invoke failed for triple (#13442) --- .../dubbo/rpc/protocol/tri/TripleInvoker.java | 25 ++++++------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleInvoker.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleInvoker.java index 76b26247cb..32789bb0d5 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleInvoker.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TripleInvoker.java @@ -24,7 +24,6 @@ import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.stream.StreamObserver; import org.apache.dubbo.common.threadpool.ThreadlessExecutor; -import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.remoting.api.connection.AbstractConnectionClient; import org.apache.dubbo.rpc.AppResponse; import org.apache.dubbo.rpc.AsyncRpcResult; @@ -143,12 +142,12 @@ public class TripleInvoker extends AbstractInvoker { ConsumerModel consumerModel = (ConsumerModel) (invocation.getServiceModel() != null ? invocation.getServiceModel() : getUrl().getServiceModel()); ServiceDescriptor serviceDescriptor = consumerModel.getServiceModel(); - final MethodDescriptor methodDescriptor; - boolean genericCall = RpcUtils.isGenericCall( - ReflectUtils.getDesc(invocation.getParameterTypes()), invocation.getMethodName()); - if (!genericCall) { - methodDescriptor = serviceDescriptor.getMethod(invocation.getMethodName(), invocation.getParameterTypes()); - } else { + MethodDescriptor methodDescriptor = + serviceDescriptor.getMethod(invocation.getMethodName(), invocation.getParameterTypes()); + if (methodDescriptor == null + && RpcUtils.isGenericCall( + ((RpcInvocation) invocation).getParameterTypesDesc(), invocation.getMethodName())) { + // Only reach when server generic methodDescriptor = ServiceDescriptorInternalCache.genericService() .getMethod(invocation.getMethodName(), invocation.getParameterTypes()); } @@ -261,17 +260,7 @@ public class TripleInvoker extends AbstractInvoker { if (methodDescriptor instanceof StubMethodDescriptor) { pureArgument = invocation.getArguments()[0]; } else { - if (methodDescriptor.isGeneric()) { - Object[] args = new Object[3]; - args[0] = RpcUtils.getMethodName(invocation); - args[1] = Arrays.stream(RpcUtils.getParameterTypes(invocation)) - .map(Class::getName) - .toArray(String[]::new); - args[2] = RpcUtils.getArguments(invocation); - pureArgument = args; - } else { - pureArgument = invocation.getArguments(); - } + pureArgument = invocation.getArguments(); } result = new AsyncRpcResult(future, invocation); if (setFutureWhenSync || ((RpcInvocation) invocation).getInvokeMode() != InvokeMode.SYNC) { From 6e9f3370985eb174ab693ded243fe4fcd62e3639 Mon Sep 17 00:00:00 2001 From: suncairong163 <105478245+suncairong163@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:28:05 +0800 Subject: [PATCH 08/10] Feature/20231114 dubbo 3.2 rest proxy double service method (#13357) * for proxy service method repeat check * for proxy service method repeat check * fix code format * fix code format * fix code format * fix code format * fix code format * fix code format * fix code format * fix code format * fix code format --------- Co-authored-by: huazhongming --- .../AbstractServiceRestMetadataResolver.java | 33 ++++++++++++++++--- .../rest/SpringMvcRestProtocolTest.java | 32 ++++++++++++++++++ 2 files changed, 60 insertions(+), 5 deletions(-) diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java index 0506d762b2..f62a16a71e 100644 --- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java +++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/rest/AbstractServiceRestMetadataResolver.java @@ -29,6 +29,8 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; @@ -207,20 +209,41 @@ public abstract class AbstractServiceRestMetadataResolver implements ServiceRest sort(declaredServiceMethods, MethodComparator.INSTANCE); sort(serviceMethods, MethodComparator.INSTANCE); + // prevent from repeat method (impl proxy) & leaving out method(interface proxy) + HashSet methodComparators = new HashSet<>(); + + // TODO Map key: method desc & value: Set for accelerate loop speed for (Method declaredServiceMethod : declaredServiceMethods) { for (Method serviceMethod : serviceMethods) { - if (overrides(serviceMethod, declaredServiceMethod)) { - serviceMethodsMap.put(serviceMethod, declaredServiceMethod); - // override method count > 1 - // // once method match ,break for decrease loop times - // break; + + if (!overrides(serviceMethod, declaredServiceMethod)) { + continue; } + + String methodDesc = getMethodDesc(serviceMethod); + + if (!methodComparators.add(methodDesc)) { + continue; + } + + serviceMethodsMap.put(serviceMethod, declaredServiceMethod); } } + // make them to be read-only return unmodifiableMap(serviceMethodsMap); } + /** + * For simple method desc + * + * @param serviceMethod + * @return + */ + private String getMethodDesc(Method serviceMethod) { + return serviceMethod.getName() + Arrays.toString(serviceMethod.getParameterTypes()); + } + private void putServiceMethodToMap(Map serviceMethodsMap, List declaredServiceMethods) { declaredServiceMethods.stream().forEach(method -> { diff --git a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/SpringMvcRestProtocolTest.java b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/SpringMvcRestProtocolTest.java index 478b0b39be..5eee6f267b 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/SpringMvcRestProtocolTest.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/SpringMvcRestProtocolTest.java @@ -47,6 +47,9 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.springframework.aop.framework.AdvisedSupport; +import org.springframework.aop.framework.AopProxy; +import org.springframework.aop.framework.ProxyCreatorSupport; import org.springframework.util.LinkedMultiValueMap; import static org.apache.dubbo.remoting.Constants.SERVER_KEY; @@ -393,6 +396,35 @@ public class SpringMvcRestProtocolTest { exporter.unexport(); } + @Test + void testProxyDoubleCheck() { + + ProxyCreatorSupport proxyCreatorSupport = new ProxyCreatorSupport(); + AdvisedSupport advisedSupport = new AdvisedSupport(); + advisedSupport.setTarget(getServerImpl()); + AopProxy aopProxy = proxyCreatorSupport.getAopProxyFactory().createAopProxy(advisedSupport); + Object proxy = aopProxy.getProxy(); + SpringRestDemoService server = (SpringRestDemoService) proxy; + + URL nettyUrl = this.registerProvider(exportUrl, server, SpringRestDemoService.class); + + Exporter exporter = getExport(nettyUrl, server); + + SpringRestDemoService demoService = this.proxy.getProxy(protocol.refer(SpringRestDemoService.class, nettyUrl)); + + Integer result = demoService.primitiveInt(1, 2); + Long resultLong = demoService.primitiveLong(1, 2l); + long resultByte = demoService.primitiveByte((byte) 1, 2l); + long resultShort = demoService.primitiveShort((short) 1, 2l, 1); + + assertThat(result, is(3)); + assertThat(resultShort, is(3l)); + assertThat(resultLong, is(3l)); + assertThat(resultByte, is(3l)); + + exporter.unexport(); + } + public static class TestExceptionMapper implements ExceptionHandler { @Override From 58fa12079578b7def49fe6c386c1bcce97f2123a Mon Sep 17 00:00:00 2001 From: xiaosheng Date: Mon, 4 Dec 2023 09:34:47 +0800 Subject: [PATCH 09/10] :bug: fix metrics servce level config bug (#13449) * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug --- .../metrics/data/MethodStatComposite.java | 5 ++--- .../dubbo/metrics/data/RtStatComposite.java | 4 +--- .../metrics/report/AbstractMetricsExport.java | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java index a06751553e..b9717a5b84 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java @@ -41,13 +41,11 @@ import java.util.concurrent.atomic.AtomicLong; * the key will not be displayed when exporting (to be optimized) */ public class MethodStatComposite extends AbstractMetricsExport { - private boolean serviceLevel; private final AtomicBoolean samplesChanged = new AtomicBoolean(true); public MethodStatComposite(ApplicationModel applicationModel) { super(applicationModel); - this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); } private final Map> methodNumStats = new ConcurrentHashMap<>(); @@ -70,7 +68,8 @@ public class MethodStatComposite extends AbstractMetricsExport { methodNumStats .get(wrapper) .computeIfAbsent( - new MethodMetric(getApplicationModel(), invocation, serviceLevel), k -> new AtomicLong(0L)); + new MethodMetric(getApplicationModel(), invocation, getServiceLevel()), + k -> new AtomicLong(0L)); samplesChanged.set(true); } diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java index 8ac99e1667..0a3001f2ec 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java @@ -50,13 +50,11 @@ import java.util.stream.Collectors; */ @SuppressWarnings({"rawtypes", "unchecked"}) public class RtStatComposite extends AbstractMetricsExport { - private boolean serviceLevel; private final AtomicBoolean samplesChanged = new AtomicBoolean(true); public RtStatComposite(ApplicationModel applicationModel) { super(applicationModel); - this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); } private final Map>> rtStats = new ConcurrentHashMap<>(); @@ -190,7 +188,7 @@ public class RtStatComposite extends AbstractMetricsExport { List actions; actions = new LinkedList<>(); for (LongContainer container : rtStats.get(registryOpType)) { - MethodMetric key = new MethodMetric(getApplicationModel(), invocation, serviceLevel); + MethodMetric key = new MethodMetric(getApplicationModel(), invocation, getServiceLevel()); Number current = (Number) container.get(key); if (current == null) { container.putIfAbsent(key, container.getInitFunc().apply(key)); diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java index 7ea0c64bd8..cb50129f89 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java @@ -16,6 +16,7 @@ */ package org.apache.dubbo.metrics.report; +import org.apache.dubbo.metrics.model.MethodMetric; import org.apache.dubbo.rpc.model.ApplicationModel; /** @@ -23,6 +24,8 @@ import org.apache.dubbo.rpc.model.ApplicationModel; */ public abstract class AbstractMetricsExport implements MetricsExport { + private volatile Boolean serviceLevel; + private final ApplicationModel applicationModel; public AbstractMetricsExport(ApplicationModel applicationModel) { @@ -36,4 +39,19 @@ public abstract class AbstractMetricsExport implements MetricsExport { public String getAppName() { return getApplicationModel().getApplicationName(); } + + protected boolean getServiceLevel() { + initServiceLevelConfig(); + return this.serviceLevel; + } + + private void initServiceLevelConfig() { + if (serviceLevel == null) { + synchronized (this) { + if (serviceLevel == null) { + this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); + } + } + } + } } From 3e1310bea880add83510855a4506595ca488245e Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Mon, 4 Dec 2023 12:48:27 +0800 Subject: [PATCH 10/10] Fix TriRpcStatus not implements Serializable (#13453) * Fix TriRpcStatus not implements Serializable * Fix TriRpcStatus not implements Serializable --- .../src/main/java/org/apache/dubbo/rpc/TriRpcStatus.java | 4 +++- .../test/java/org/apache/dubbo/rpc/TriRpcStatusTest.java | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/TriRpcStatus.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/TriRpcStatus.java index abb5db671b..367cfc3491 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/TriRpcStatus.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/TriRpcStatus.java @@ -19,6 +19,8 @@ package org.apache.dubbo.rpc; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.remoting.TimeoutException; +import java.io.Serializable; + import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.QueryStringDecoder; import io.netty.handler.codec.http.QueryStringEncoder; @@ -35,7 +37,7 @@ import static org.apache.dubbo.rpc.RpcException.UNKNOWN_EXCEPTION; /** * See https://github.com/grpc/grpc/blob/master/doc/statuscodes.md */ -public class TriRpcStatus { +public class TriRpcStatus implements Serializable { public static final TriRpcStatus OK = fromCode(Code.OK); public static final TriRpcStatus UNKNOWN = fromCode(Code.UNKNOWN); diff --git a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/TriRpcStatusTest.java b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/TriRpcStatusTest.java index 0bbc325861..651e565488 100644 --- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/TriRpcStatusTest.java +++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/TriRpcStatusTest.java @@ -19,6 +19,8 @@ package org.apache.dubbo.rpc; import org.apache.dubbo.remoting.TimeoutException; import org.apache.dubbo.rpc.TriRpcStatus.Code; +import java.io.Serializable; + import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -214,4 +216,11 @@ class TriRpcStatusTest { Assertions.assertEquals(METHOD_NOT_FOUND, TriRpcStatus.triCodeToDubboCode(Code.UNIMPLEMENTED)); Assertions.assertEquals(UNKNOWN_EXCEPTION, TriRpcStatus.triCodeToDubboCode(Code.UNKNOWN)); } + + @Test + void testSerializable() { + TriRpcStatus status = TriRpcStatus.INTERNAL.withDescription("test"); + Assertions.assertInstanceOf(Serializable.class, status.asException()); + Assertions.assertInstanceOf(Serializable.class, status.asException().getStatus()); + } }