This is an automated email from the ASF dual-hosted git repository.

liujun pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new ce0e60d  Fix 9806, check metadata protocol (#9820)
ce0e60d is described below

commit ce0e60d3d458d7f8aa8f1aa3e6dc56f1ed6b7f7c
Author: ken.lj <[email protected]>
AuthorDate: Fri Mar 25 11:00:20 2022 +0800

    Fix 9806, check metadata protocol (#9820)
---
 .../apache/dubbo/config/MetadataReportConfig.java  |  3 ++-
 .../config/deploy/DefaultApplicationDeployer.java  |  4 ----
 .../dubbo/config/utils/ConfigValidationUtils.java  | 19 +++++++++++-----
 .../dubbo/config/MetadataReportConfigTest.java     |  2 +-
 .../config/utils/ConfigValidationUtilsTest.java    | 26 ++++++++++++++++++++++
 5 files changed, 43 insertions(+), 11 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
index dbb58b6..2b63748 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/config/MetadataReportConfig.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import static 
org.apache.dubbo.common.constants.CommonConstants.CYCLE_REPORT_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.PROTOCOL_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.REPORT_DEFINITION_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.REPORT_METADATA_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.RETRY_PERIOD_KEY;
@@ -152,7 +153,7 @@ public class MetadataReportConfig extends AbstractConfig {
         // Normalize the parameters
         map.putAll(convert(map, null));
         // put the protocol of URL as the "metadata"
-        map.put("metadata", url.getProtocol());
+        map.put("metadata", isEmpty(url.getProtocol()) ? map.get(PROTOCOL_KEY) 
: url.getProtocol());
         return new ServiceConfigURL("metadata", url.getUsername(), 
url.getPassword(), url.getHost(),
                 url.getPort(), url.getPath(), 
map).setScopeModel(getScopeModel());
 
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
index b255f8d..2d13f58 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java
@@ -284,10 +284,6 @@ public class DefaultApplicationDeployer extends 
AbstractDeployer<ApplicationMode
         List<MetadataReportConfig> validMetadataReportConfigs = new 
ArrayList<>(metadataReportConfigs.size());
         for (MetadataReportConfig metadataReportConfig : 
metadataReportConfigs) {
             ConfigValidationUtils.validateMetadataConfig(metadataReportConfig);
-            if (!metadataReportConfig.isValid()) {
-                logger.warn("Ignore invalid metadata-report config: " + 
metadataReportConfig);
-                continue;
-            }
             validMetadataReportConfigs.add(metadataReportConfig);
         }
         metadataReportInstance.init(validMetadataReportConfigs);
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
index d14661c..5e81a63 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java
@@ -109,6 +109,8 @@ import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PROTO
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.SERVICE_REGISTRY_PROTOCOL;
 import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
+import static org.apache.dubbo.common.utils.StringUtils.isEmpty;
+import static org.apache.dubbo.common.utils.StringUtils.isNotEmpty;
 import static org.apache.dubbo.config.Constants.ARCHITECTURE;
 import static org.apache.dubbo.config.Constants.CONTEXTPATH_KEY;
 import static org.apache.dubbo.config.Constants.DUBBO_IP_TO_REGISTRY;
@@ -279,7 +281,7 @@ public class ConfigValidationUtils {
     }
 
     private static boolean isValidRegisterMode(String mode) {
-        return StringUtils.isNotEmpty(mode)
+        return isNotEmpty(mode)
             && (DEFAULT_REGISTER_MODE_INTERFACE.equalsIgnoreCase(mode)
             || DEFAULT_REGISTER_MODE_INSTANCE.equalsIgnoreCase(mode)
             || DEFAULT_REGISTER_MODE_ALL.equalsIgnoreCase(mode)
@@ -500,6 +502,13 @@ public class ConfigValidationUtils {
         if (metadataReportConfig == null) {
             return;
         }
+
+        String address = metadataReportConfig.getAddress();
+        String protocol = metadataReportConfig.getProtocol();
+
+        if ((isEmpty(address) || !address.contains("://")) && 
isEmpty(protocol)) {
+            throw new IllegalArgumentException("Please specify valid protocol 
or address for metadata report " + address);
+        }
     }
 
     public static void validateMetricsConfig(MetricsConfig metricsConfig) {
@@ -582,7 +591,7 @@ public class ConfigValidationUtils {
         checkMethodName("name", config.getName());
 
         String mock = config.getMock();
-        if (StringUtils.isNotEmpty(mock)) {
+        if (isNotEmpty(mock)) {
             if (mock.startsWith(RETURN_PREFIX) || mock.startsWith(THROW_PREFIX 
+ " ")) {
                 checkLength(MOCK_KEY, mock);
             } else if (mock.startsWith(FAIL_PREFIX) || 
mock.startsWith(FORCE_PREFIX)) {
@@ -599,12 +608,12 @@ public class ConfigValidationUtils {
 
     private static String getRegistryProtocolType(URL url) {
         String registryProtocol = url.getParameter("registry-protocol-type");
-        return StringUtils.isNotEmpty(registryProtocol) ? registryProtocol : 
REGISTRY_PROTOCOL;
+        return isNotEmpty(registryProtocol) ? registryProtocol : 
REGISTRY_PROTOCOL;
     }
 
     public static void checkExtension(ScopeModel scopeModel, Class<?> type, 
String property, String value) {
         checkName(property, value);
-        if (StringUtils.isNotEmpty(value)
+        if (isNotEmpty(value)
             && !scopeModel.getExtensionLoader(type).hasExtension(value)) {
             throw new IllegalStateException("No such extension " + value + " 
for " + property + "/" + type.getName());
         }
@@ -624,7 +633,7 @@ public class ConfigValidationUtils {
 
     public static void checkMultiExtension(ScopeModel scopeModel, 
List<Class<?>> types, String property, String value) {
         checkMultiName(property, value);
-        if (StringUtils.isNotEmpty(value)) {
+        if (isNotEmpty(value)) {
             String[] values = value.split("\\s*[,]+\\s*");
             for (String v : values) {
                 if (v.startsWith(REMOVE_VALUE_PREFIX)) {
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MetadataReportConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MetadataReportConfigTest.java
index 463f383..18ee25f 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MetadataReportConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/MetadataReportConfigTest.java
@@ -31,7 +31,7 @@ public class MetadataReportConfigTest {
         metadataReportConfig.setFile("file");
         assertThat(metadataReportConfig.getFile(), equalTo("file"));
 
-        metadataReportConfig.setAddress("127.0.0.1:2181");
+        metadataReportConfig.setAddress("file://dir-to-file");
         URL url = metadataReportConfig.toUrl();
         assertThat(url.getParameter("file"), equalTo("file"));
 
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java
index dabdb7a..8112d5c 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.config.utils;
 
 import org.apache.dubbo.config.AbstractInterfaceConfig;
+import org.apache.dubbo.config.MetadataReportConfig;
 import org.apache.dubbo.config.api.Greeting;
 import org.apache.dubbo.config.mock.GreetingMock1;
 import org.apache.dubbo.config.mock.GreetingMock2;
@@ -56,6 +57,31 @@ public class ConfigValidationUtilsTest {
         });
     }
 
+    @Test
+    public void testValidateMetadataConfig() {
+        MetadataReportConfig config = new MetadataReportConfig();
+        config.setAddress("protocol://ip:host");
+        try {
+            ConfigValidationUtils.validateMetadataConfig(config);
+        } catch (Exception e) {
+            Assertions.fail("valid config expected.");
+        }
+
+        config.setAddress("ip:host");
+        config.setProtocol("protocol");
+        try {
+            ConfigValidationUtils.validateMetadataConfig(config);
+        } catch (Exception e) {
+            Assertions.fail("valid config expected.");
+        }
+
+        config.setAddress("ip:host");
+        config.setProtocol(null);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> {
+            ConfigValidationUtils.validateMetadataConfig(config);
+        });
+    }
+
     public static class InterfaceConfig extends AbstractInterfaceConfig {
 
     }

Reply via email to