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

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


The following commit(s) were added to refs/heads/3.2 by this push:
     new 6dfddbfb2b Fix issue of metadata only registred to one nacos namespace 
(3.2.x) (#13439)
6dfddbfb2b is described below

commit 6dfddbfb2b32029272499735598cbcd80035c319
Author: namelessssssssssss 
<[email protected]>
AuthorDate: Thu Nov 30 19:19:29 2023 +0800

    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 <[email protected]>
---
 .../org/apache/dubbo/metadata/MetadataConstants.java   |  2 ++
 .../dubbo/metadata/report/MetadataReportInstance.java  | 18 ++++++++++++++----
 .../report/support/AbstractMetadataReportFactory.java  |  6 +++++-
 .../store/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,16 +104,24 @@ 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<String, MetadataReport> getMetadataReports(boolean checked) {
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);
+    }
 }

Reply via email to