You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2021/12/11 10:46:10 UTC

[dubbo] 01/02: fix multip metadata cannot be initialized

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

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

commit c32b75fb550ee088e6d7ea630960cb0931c92b5f
Author: ken.lj <ke...@gmail.com>
AuthorDate: Sat Dec 11 18:44:43 2021 +0800

    fix multip metadata cannot be initialized
---
 .../apache/dubbo/config/deploy/DefaultApplicationDeployer.java   | 4 +++-
 .../org/apache/dubbo/metadata/report/MetadataReportInstance.java | 9 ++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

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 c535209..4ee9433 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
@@ -278,14 +278,16 @@ public class DefaultApplicationDeployer extends AbstractDeployer<ApplicationMode
         }
 
         MetadataReportInstance metadataReportInstance = applicationModel.getBeanFactory().getBean(MetadataReportInstance.class);
+        List<MetadataReportConfig> validMetadataReportConfigs = new ArrayList<>(metadataReportConfigs.size());
         for (MetadataReportConfig metadataReportConfig : metadataReportConfigs) {
             ConfigValidationUtils.validateMetadataConfig(metadataReportConfig);
             if (!metadataReportConfig.isValid()) {
                 logger.info("Ignore invalid metadata-report config: " + metadataReportConfig);
                 continue;
             }
-            metadataReportInstance.init(metadataReportConfig);
+            validMetadataReportConfigs.add(metadataReportConfig);
         }
+        metadataReportInstance.init(validMetadataReportConfigs);
         if (!metadataReportInstance.inited()) {
             throw new IllegalStateException(String.format("%s MetadataConfigs found, but none of them is valid.", metadataReportConfigs.size()));
         }
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 bbb8d49..be4664d 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
@@ -24,6 +24,7 @@ import org.apache.dubbo.metadata.report.support.NopMetadataReport;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -62,7 +63,7 @@ public class MetadataReportInstance implements Disposable {
         this.nopMetadataReport = new NopMetadataReport();
     }
 
-    public void init(MetadataReportConfig config) {
+    public void init(List<MetadataReportConfig> metadataReportConfigs) {
         if (!init.compareAndSet(false, true)) {
             return;
         }
@@ -73,6 +74,12 @@ public class MetadataReportInstance implements Disposable {
         }
 
         MetadataReportFactory metadataReportFactory = applicationModel.getExtensionLoader(MetadataReportFactory.class).getAdaptiveExtension();
+        for (MetadataReportConfig metadataReportConfig : metadataReportConfigs) {
+            init(metadataReportConfig, metadataReportFactory);
+        }
+    }
+
+    private void init(MetadataReportConfig config, MetadataReportFactory metadataReportFactory) {
         URL url = config.toUrl();
         if (METADATA_REPORT_KEY.equals(url.getProtocol())) {
             String protocol = url.getParameter(METADATA_REPORT_KEY, DEFAULT_DIRECTORY);