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 {
}