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 dfd135eb95 Fix the problem of multiple namespaces in MetadataReport 
(#13971)
dfd135eb95 is described below

commit dfd135eb95d92ffc3519426b812e274f43b49e9d
Author: TomlongTK <[email protected]>
AuthorDate: Wed May 8 14:09:08 2024 +0800

    Fix the problem of multiple namespaces in MetadataReport (#13971)
    
    * Fix the problem of multiple namespaces in MetadataReport
    
    * refine
    
    * Remove registry config setting
    
    * Add some unit tests
    
    * Revert getId
    
    * Fix cache key
---
 .../src/main/java/org/apache/dubbo/common/URL.java |   4 +
 .../org/apache/dubbo/config/RegistryConfig.java    |   2 -
 .../test/java/org/apache/dubbo/common/URLTest.java |  18 +++
 .../config/deploy/DefaultApplicationDeployer.java  |   2 +-
 .../dubbo/config/utils/ConfigValidationUtils.java  |  10 ++
 .../dubbo/config/bootstrap/DubboBootstrapTest.java | 125 ++++++++++++++++++++-
 .../metadata/report/MetadataReportInstance.java    |  19 ++--
 .../support/AbstractMetadataReportFactory.java     |   7 +-
 .../support/AbstractMetadataReportFactoryTest.java |  22 ++++
 .../store/nacos/NacosMetadataReportFactory.java    |  14 ---
 .../registry/client/AbstractServiceDiscovery.java  |   2 +-
 11 files changed, 187 insertions(+), 38 deletions(-)

diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index eaf8ffd401..ca79d6480d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -1397,6 +1397,10 @@ public /*final**/ class URL implements Serializable {
         return buildString(true, false, true, true);
     }
 
+    public String toServiceString(String... parameters) {
+        return buildString(true, true, true, true, parameters);
+    }
+
     @Deprecated
     public String getServiceName() {
         return getServiceInterface();
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java 
b/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
index 294916c8b5..71c047ed38 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/config/RegistryConfig.java
@@ -28,7 +28,6 @@ import static 
org.apache.dubbo.common.constants.CommonConstants.EXTRA_KEYS_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.ENABLE_EMPTY_PROTECTION_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
-import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.common.constants.RemotingConstants.BACKUP_KEY;
 import static org.apache.dubbo.common.utils.PojoUtils.updatePropertyIfAbsent;
 
@@ -221,7 +220,6 @@ public class RegistryConfig extends AbstractConfig {
     }
 
     @Override
-    @Parameter(key = REGISTRY_CLUSTER_KEY)
     public String getId() {
         return super.getId();
     }
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java 
b/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
index ee03745d3d..eb8e12fb83 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
@@ -1132,4 +1132,22 @@ class URLTest {
         assertEquals(20881, url.getPort());
         assertEquals("apache", url.getParameter("name"));
     }
+
+    @Test
+    void testToServiceString() {
+        URL url = URL.valueOf(
+                
"zookeeper://10.20.130.230:4444/org.apache.dubbo.metadata.report.MetadataReport?version=1.0.0&application=vic&group=aaa");
+        assertEquals(
+                
"zookeeper://10.20.130.230:4444/aaa/org.apache.dubbo.metadata.report.MetadataReport:1.0.0",
+                url.toServiceString());
+    }
+
+    @Test
+    void testToServiceStringWithParameters() {
+        URL url = URL.valueOf(
+                
"zookeeper://10.20.130.230:4444/org.apache.dubbo.metadata.report.MetadataReport?version=1.0.0&application=vic&group=aaa&namespace=test");
+        assertEquals(
+                
"zookeeper://10.20.130.230:4444/aaa/org.apache.dubbo.metadata.report.MetadataReport:1.0.0?namespace=test",
+                url.toServiceString("namespace"));
+    }
 }
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 3051827ef5..f58c9c2b24 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
@@ -329,7 +329,7 @@ public class DefaultApplicationDeployer extends 
AbstractDeployer<ApplicationMode
             }
         }
         metadataReportInstance.init(validMetadataReportConfigs);
-        if (!metadataReportInstance.inited()) {
+        if (!metadataReportInstance.isInitialized()) {
             throw new IllegalStateException(String.format(
                     "%s MetadataConfigs found, but none of them is valid.", 
metadataReportConfigs.size()));
         }
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 696c12eb43..2ff8978fc9 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
@@ -82,6 +82,7 @@ import java.util.stream.Collectors;
 
 import static org.apache.dubbo.common.constants.CommonConstants.ANYHOST_VALUE;
 import static org.apache.dubbo.common.constants.CommonConstants.CLUSTER_KEY;
+import static 
org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;
 import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.DUBBO_MONITOR_ADDRESS;
 import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
@@ -108,6 +109,7 @@ import static 
org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGIST
 import static 
org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGISTER_MODE_INTERFACE;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.DUBBO_REGISTER_MODE_DEFAULT_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTER_MODE_KEY;
+import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
 import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_PROTOCOL;
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_TYPE_KEY;
@@ -217,6 +219,14 @@ public class ConfigValidationUtils {
                     if (!map.containsKey(PROTOCOL_KEY)) {
                         map.put(PROTOCOL_KEY, DUBBO_PROTOCOL);
                     }
+                    String registryCluster = config.getId();
+                    if (isEmpty(registryCluster)) {
+                        registryCluster = DEFAULT_KEY;
+                    }
+                    if (map.containsKey(CONFIG_NAMESPACE_KEY)) {
+                        registryCluster += ":" + map.get(CONFIG_NAMESPACE_KEY);
+                    }
+                    map.put(REGISTRY_CLUSTER_KEY, registryCluster);
                     List<URL> urls = UrlUtils.parseURLs(address, map);
 
                     for (URL url : urls) {
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
index df8a81224c..c419375ebe 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/bootstrap/DubboBootstrapTest.java
@@ -37,6 +37,8 @@ import 
org.apache.dubbo.config.metadata.ExporterDeployListener;
 import org.apache.dubbo.config.provider.impl.DemoServiceImpl;
 import org.apache.dubbo.config.utils.ConfigValidationUtils;
 import org.apache.dubbo.metadata.MetadataService;
+import org.apache.dubbo.metadata.report.MetadataReport;
+import org.apache.dubbo.metadata.report.MetadataReportInstance;
 import org.apache.dubbo.monitor.MonitorService;
 import org.apache.dubbo.registry.RegistryService;
 import org.apache.dubbo.rpc.Exporter;
@@ -50,10 +52,14 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
+import com.google.common.collect.Maps;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
@@ -61,10 +67,15 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
+import static 
org.apache.dubbo.common.constants.CommonConstants.CONFIG_NAMESPACE_KEY;
+import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.DUBBO_MONITOR_ADDRESS;
 import static 
org.apache.dubbo.common.constants.CommonConstants.REMOTE_METADATA_STORAGE_TYPE;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;
 import static 
org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SECONDS_KEY;
+import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_KEY;
+import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_KEY;
+import static 
org.apache.dubbo.metadata.MetadataConstants.REPORT_CONSUMER_URL_KEY;
 import static org.hamcrest.CoreMatchers.anything;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasEntry;
@@ -139,13 +150,29 @@ class DubboBootstrapTest {
 
     @Test
     void testLoadRegistries() {
-        SysProps.setProperty("dubbo.registry.address", "addr1");
-
         ServiceConfig serviceConfig = new ServiceConfig();
         serviceConfig.setInterface(DemoService.class);
         serviceConfig.setRef(new DemoServiceImpl());
         serviceConfig.setApplication(new 
ApplicationConfig("testLoadRegistries"));
 
+        String registryId = "nacosRegistry";
+        String namespace1 = "test";
+        RegistryConfig registryConfig = new RegistryConfig();
+        registryConfig.setId(registryId);
+        registryConfig.setAddress("nacos://addr1:8848");
+        Map<String, String> registryParamMap = Maps.newHashMap();
+        registryParamMap.put(CONFIG_NAMESPACE_KEY, namespace1);
+        registryConfig.setParameters(registryParamMap);
+
+        String namespace2 = "test2";
+        RegistryConfig registryConfig2 = new RegistryConfig();
+        registryConfig2.setAddress("polaris://addr1:9999");
+        Map<String, String> registryParamMap2 = Maps.newHashMap();
+        registryParamMap2.put(CONFIG_NAMESPACE_KEY, namespace2);
+        registryConfig2.setParameters(registryParamMap2);
+
+        serviceConfig.setRegistries(Arrays.asList(registryConfig, 
registryConfig2));
+
         // load configs from props
         DubboBootstrap.getInstance().initialize();
 
@@ -154,11 +181,28 @@ class DubboBootstrapTest {
         // 
ApplicationModel.defaultModel().getEnvironment().setDynamicConfiguration(new
         // CompositeDynamicConfiguration());
         List<URL> urls = ConfigValidationUtils.loadRegistries(serviceConfig, 
true);
-        Assertions.assertEquals(2, urls.size());
-        for (URL url : urls) {
+        Assertions.assertEquals(4, urls.size());
+
+        Map<String, List<URL>> urlsMap =
+                urls.stream().collect(Collectors.groupingBy(url -> 
url.getParameter(REGISTRY_KEY)));
+        Assertions.assertEquals(2, urlsMap.get("nacos").size());
+        for (URL url : urlsMap.get("nacos")) {
+            Assertions.assertTrue(url.getProtocol().contains("registry"));
+            Assertions.assertEquals("addr1:8848", url.getAddress());
+            Assertions.assertEquals(RegistryService.class.getName(), 
url.getPath());
+            Assertions.assertEquals(registryId + ":" + namespace1, 
url.getParameter(REGISTRY_CLUSTER_KEY));
+            
Assertions.assertTrue(url.getParameters().containsKey("timestamp"));
+            Assertions.assertTrue(url.getParameters().containsKey("pid"));
+            Assertions.assertTrue(url.getParameters().containsKey("registry"));
+            Assertions.assertTrue(url.getParameters().containsKey("dubbo"));
+        }
+
+        Assertions.assertEquals(2, urlsMap.get("polaris").size());
+        for (URL url : urlsMap.get("polaris")) {
             Assertions.assertTrue(url.getProtocol().contains("registry"));
-            Assertions.assertEquals("addr1:9090", url.getAddress());
+            Assertions.assertEquals("addr1:9999", url.getAddress());
             Assertions.assertEquals(RegistryService.class.getName(), 
url.getPath());
+            Assertions.assertEquals(DEFAULT_KEY + ":" + namespace2, 
url.getParameter(REGISTRY_CLUSTER_KEY));
             
Assertions.assertTrue(url.getParameters().containsKey("timestamp"));
             Assertions.assertTrue(url.getParameters().containsKey("pid"));
             Assertions.assertTrue(url.getParameters().containsKey("registry"));
@@ -166,6 +210,77 @@ class DubboBootstrapTest {
         }
     }
 
+    @Test
+    void testRegistryWithMetadataReport() {
+        ServiceConfig serviceConfig = new ServiceConfig();
+        serviceConfig.setInterface(DemoService.class);
+        serviceConfig.setRef(new DemoServiceImpl());
+
+        List<RegistryConfig> registryConfigs = new ArrayList<>();
+        List<MetadataReportConfig> metadataReportConfigs = new ArrayList<>();
+
+        String registryId = "nacosRegistry";
+        String namespace1 = "test";
+        RegistryConfig registryConfig = new RegistryConfig();
+        registryConfig.setId(registryId);
+        registryConfig.setAddress(zkServerAddress);
+        Map<String, String> registryParamMap = Maps.newHashMap();
+        registryParamMap.put(CONFIG_NAMESPACE_KEY, namespace1);
+        registryConfig.setParameters(registryParamMap);
+        registryConfigs.add(registryConfig);
+
+        MetadataReportConfig metadataReportConfig = new MetadataReportConfig();
+        metadataReportConfig.setRegistry(registryId);
+        metadataReportConfig.setAddress(registryConfig.getAddress());
+        Map<String, String> metadataParamMap = Maps.newHashMap();
+        metadataParamMap.put(CONFIG_NAMESPACE_KEY, namespace1);
+        metadataParamMap.put(REPORT_CONSUMER_URL_KEY, Boolean.TRUE.toString());
+        metadataReportConfig.setParameters(metadataParamMap);
+        metadataReportConfig.setReportMetadata(true);
+        metadataReportConfigs.add(metadataReportConfig);
+
+        String namespace2 = "test2";
+        RegistryConfig registryConfig2 = new RegistryConfig();
+        registryConfig2.setAddress(zkServerAddress);
+        Map<String, String> registryParamMap2 = Maps.newHashMap();
+        registryParamMap2.put(CONFIG_NAMESPACE_KEY, namespace2);
+        registryConfig2.setParameters(registryParamMap2);
+        registryConfigs.add(registryConfig2);
+
+        MetadataReportConfig metadataReportConfig2 = new 
MetadataReportConfig();
+        metadataReportConfig2.setAddress(registryConfig2.getAddress());
+        Map<String, String> metadataParamMap2 = Maps.newHashMap();
+        metadataParamMap2.put(CONFIG_NAMESPACE_KEY, namespace2);
+        metadataParamMap2.put(REPORT_CONSUMER_URL_KEY, 
Boolean.TRUE.toString());
+        metadataReportConfig2.setParameters(metadataParamMap2);
+        metadataReportConfig2.setReportMetadata(true);
+        metadataReportConfigs.add(metadataReportConfig2);
+
+        serviceConfig.setRegistries(registryConfigs);
+
+        DubboBootstrap.getInstance()
+                .application(new 
ApplicationConfig("testRegistryWithMetadataReport"))
+                .registries(registryConfigs)
+                .metadataReports(metadataReportConfigs)
+                .service(serviceConfig)
+                .protocol(new ProtocolConfig(CommonConstants.DUBBO_PROTOCOL, 
-1))
+                .start();
+
+        ApplicationModel applicationModel = 
DubboBootstrap.getInstance().getApplicationModel();
+        MetadataReportInstance metadataReportInstance =
+                
applicationModel.getBeanFactory().getBean(MetadataReportInstance.class);
+
+        Map<String, MetadataReport> metadataReports = 
metadataReportInstance.getMetadataReports(true);
+        Assertions.assertEquals(2, metadataReports.size());
+
+        List<URL> urls = ConfigValidationUtils.loadRegistries(serviceConfig, 
true);
+        Assertions.assertEquals(4, urls.size());
+
+        for (URL url : urls) {
+            
Assertions.assertTrue(metadataReports.containsKey(url.getParameter(REGISTRY_CLUSTER_KEY)));
+        }
+    }
+
     @Test
     void testLoadUserMonitor_address_only() {
         // -Ddubbo.monitor.address=monitor-addr:12080
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 ded589b471..59d2dcb874 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
@@ -54,7 +54,7 @@ import static 
org.apache.dubbo.metadata.report.support.Constants.METADATA_REPORT
  */
 public class MetadataReportInstance implements Disposable {
 
-    private AtomicBoolean init = new AtomicBoolean(false);
+    private final AtomicBoolean initialized = new AtomicBoolean(false);
     private String metadataType;
 
     // mapping of registry id to metadata report instance, registry instances 
will use this mapping to find related
@@ -69,7 +69,7 @@ public class MetadataReportInstance implements Disposable {
     }
 
     public void init(List<MetadataReportConfig> metadataReportConfigs) {
-        if (!init.compareAndSet(false, true)) {
+        if (!initialized.compareAndSet(false, true)) {
             return;
         }
 
@@ -114,9 +114,10 @@ public class MetadataReportInstance implements Disposable {
     }
 
     private String getRelatedRegistryId(MetadataReportConfig config, URL url) {
-        String relatedRegistryId = isEmpty(config.getRegistry())
-                ? (isEmpty(config.getId()) ? DEFAULT_KEY : config.getId())
-                : config.getRegistry();
+        String relatedRegistryId = config.getRegistry();
+        if (isEmpty(relatedRegistryId)) {
+            relatedRegistryId = DEFAULT_KEY;
+        }
         String namespace = url.getParameter(NAMESPACE_KEY);
         if (!StringUtils.isEmpty(namespace)) {
             relatedRegistryId += ":" + namespace;
@@ -144,15 +145,13 @@ public class MetadataReportInstance implements Disposable 
{
         return metadataType;
     }
 
-    public boolean inited() {
-        return init.get();
+    public boolean isInitialized() {
+        return initialized.get();
     }
 
     @Override
     public void destroy() {
-        metadataReports.forEach((_k, reporter) -> {
-            reporter.destroy();
-        });
+        metadataReports.forEach((k, reporter) -> reporter.destroy());
         metadataReports.clear();
     }
 }
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 7f1770291f..ecc34f1047 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
@@ -29,6 +29,7 @@ import java.util.concurrent.locks.ReentrantLock;
 import static org.apache.dubbo.common.constants.CommonConstants.CHECK_KEY;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_UNEXPECTED_EXCEPTION;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.PROXY_FAILED_EXPORT_SERVICE;
+import static org.apache.dubbo.metadata.MetadataConstants.NAMESPACE_KEY;
 
 public abstract class AbstractMetadataReportFactory implements 
MetadataReportFactory {
 
@@ -50,7 +51,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 = toMetadataReportKey(url);
+        String key = url.toServiceString(NAMESPACE_KEY);
 
         MetadataReport metadataReport = serviceStoreMap.get(key);
         if (metadataReport != null) {
@@ -88,10 +89,6 @@ 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-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
 
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
index f8c3dae0d9..d321a4ba92 100644
--- 
a/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
+++ 
b/dubbo-metadata/dubbo-metadata-api/src/test/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReportFactoryTest.java
@@ -145,4 +145,26 @@ class AbstractMetadataReportFactoryTest {
         MetadataReport metadataReport2 = 
metadataReportFactory.getMetadataReport(url2);
         Assertions.assertNotEquals(metadataReport1, metadataReport2);
     }
+
+    @Test
+    void testGetForSameNamespace() {
+        URL url1 = URL.valueOf("zookeeper://" + 
NetUtils.getLocalAddress().getHostName()
+                + 
":4444/org.apache.dubbo.TestService1?version=1.0.0&application=vic&namespace=test");
+        URL url2 = URL.valueOf("zookeeper://" + 
NetUtils.getLocalAddress().getHostName()
+                + 
":4444/org.apache.dubbo.TestService2?version=1.0.0&application=vic&namespace=test");
+        MetadataReport metadataReport1 = 
metadataReportFactory.getMetadataReport(url1);
+        MetadataReport metadataReport2 = 
metadataReportFactory.getMetadataReport(url2);
+        Assertions.assertEquals(metadataReport1, metadataReport2);
+    }
+
+    @Test
+    void testGetForDiffNamespace() {
+        URL url1 = URL.valueOf("zookeeper://" + 
NetUtils.getLocalAddress().getHostName()
+                + 
":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&namespace=test");
+        URL url2 = URL.valueOf("zookeeper://" + 
NetUtils.getLocalAddress().getHostName()
+                + 
":4444/org.apache.dubbo.TestService?version=1.0.0&application=vic&namespace=dev");
+        MetadataReport metadataReport1 = 
metadataReportFactory.getMetadataReport(url1);
+        MetadataReport metadataReport2 = 
metadataReportFactory.getMetadataReport(url2);
+        Assertions.assertNotEquals(metadataReport1, metadataReport2);
+    }
 }
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 338b4067b7..a858a0a1b1 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,12 +17,9 @@
 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
  */
@@ -31,15 +28,4 @@ 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);
-    }
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
index 341d8926f8..4877581321 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/AbstractServiceDiscovery.java
@@ -84,7 +84,7 @@ public abstract class AbstractServiceDiscovery implements 
ServiceDiscovery {
         this(applicationModel, applicationModel.getApplicationName(), 
registryURL);
         MetadataReportInstance metadataReportInstance =
                 
applicationModel.getBeanFactory().getBean(MetadataReportInstance.class);
-        metadataType = metadataReportInstance.getMetadataType();
+        this.metadataType = metadataReportInstance.getMetadataType();
         this.metadataReport = 
metadataReportInstance.getMetadataReport(registryURL.getParameter(REGISTRY_CLUSTER_KEY));
     }
 

Reply via email to