From 93d146924aed71886bae14845c8ee280bd24aa04 Mon Sep 17 00:00:00 2001 From: aamingaa <49740762+aamingaa@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:20:48 +0800 Subject: [PATCH] feat: generic timeout (#11677) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: generic timeout * feat: generic timeout * feat: fix ut * feat: change to default * feat: test verify method * feat: test verify method * Update dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java change to assertFalse Co-authored-by: Albumen Kevin * Update dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java assertFalse Co-authored-by: Albumen Kevin * feat: fix ut。。。 * feat: fix ut。。。 * feat: testVerifyMethod * feat: testVerifyMethod * feat: fix msg --------- Co-authored-by: Albumen Kevin --- .../dubbo/config/AbstractInterfaceConfig.java | 14 +++++++++-- .../dubbo/config/AbstractReferenceConfig.java | 5 ++++ .../config/AbstractInterfaceConfigTest.java | 24 +++++++++++++++++-- .../apache/dubbo/config/MethodConfigTest.java | 2 +- 4 files changed, 40 insertions(+), 5 deletions(-) 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 6fd828d998..aae01b667d 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 @@ -374,7 +374,7 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { } - private boolean verifyMethodConfig(MethodConfig methodConfig, Class interfaceClass, boolean ignoreInvalidMethodConfig) { + protected boolean verifyMethodConfig(MethodConfig methodConfig, Class interfaceClass, boolean ignoreInvalidMethodConfig) { String methodName = methodConfig.getName(); if (StringUtils.isEmpty(methodName)) { String msg = " name attribute is required! Please check: " + @@ -396,7 +396,12 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg); return false; } else { - throw new IllegalStateException(msg); + if (!isNeedCheckMethod()) { + msg = "Generic call: " + msg; + logger.warn(CONFIG_NO_METHOD_FOUND, "", "", msg); + } else { + throw new IllegalStateException(msg); + } } } return true; @@ -413,6 +418,11 @@ public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { return null; } + @Transient + protected boolean isNeedCheckMethod() { + return true; + } + private boolean hasArgumentConfigProps(Map configProperties, String methodName, int argIndex) { String argPrefix = methodName + "." + argIndex + "."; return ConfigurationUtils.hasSubProperties(configProperties, argPrefix); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java index 6ac7a43948..e659b10b6f 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractReferenceConfig.java @@ -183,6 +183,11 @@ public abstract class AbstractReferenceConfig extends AbstractInterfaceConfig { } } + @Override + protected boolean isNeedCheckMethod() { + return StringUtils.isEmpty(getGeneric()); + } + /** * @return * @deprecated instead, use the parameter scope to judge if it's in jvm, scope=local diff --git a/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java b/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java index a09ea89e21..44a330aad1 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/config/AbstractInterfaceConfigTest.java @@ -18,7 +18,6 @@ package org.apache.dubbo.config; import org.apache.dubbo.common.constants.CommonConstants; - import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -236,7 +235,28 @@ class AbstractInterfaceConfigTest { Assertions.assertEquals("scope", interfaceConfig.getScope()); } + @Test + void testVerifyMethod() { + InterfaceConfig2 interfaceConfig2 = new InterfaceConfig2(); + MethodConfig methodConfig = new MethodConfig(); + methodConfig.setTimeout(5000); + methodConfig.setName("sayHello"); + Class clazz = Greeting.class; + boolean verifyResult = interfaceConfig2.verifyMethodConfig(methodConfig, clazz, false); + Assertions.assertTrue(verifyResult); + + boolean verifyResult2 = interfaceConfig2.verifyMethodConfig(methodConfig, clazz, true); + Assertions.assertFalse(verifyResult2); + } + + public static class InterfaceConfig2 extends AbstractInterfaceConfig { + @Override + protected boolean isNeedCheckMethod() { + return false; + } + } + public static class InterfaceConfig extends AbstractInterfaceConfig { } -} \ No newline at end of file +} diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java index 7b137c5762..6588e58d58 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MethodConfigTest.java @@ -476,4 +476,4 @@ class MethodConfigTest { Map metaData = methodConfig.getMetaData(); Assertions.assertEquals(0, metaData.size(), "Expect empty metadata but found: "+metaData); } -} \ No newline at end of file +}