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

albumenj 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 59ab2da  [3.0] Fix MetadataService referProxy error #9190 (#9191)
59ab2da is described below

commit 59ab2da9e4e0009d65d847f3d2e5aea47cb2b34d
Author: Gong Dewei <[email protected]>
AuthorDate: Wed Nov 3 11:18:02 2021 +0800

    [3.0] Fix MetadataService referProxy error #9190 (#9191)
    
    * Fix MetadataService referProxy error #9190
    
    * Fix registry-api tests
---
 .../registry/client/metadata/MetadataUtils.java    |  5 ++--
 .../StandardMetadataServiceURLBuilder.java         | 10 +++----
 .../client/metadata/MetadataUtilsTest.java         | 31 +++++++---------------
 .../StandardMetadataServiceURLBuilderTest.java     | 11 +++++---
 4 files changed, 23 insertions(+), 34 deletions(-)

diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
index 4fe171b..1192e36 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataUtils.java
@@ -28,7 +28,6 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.model.ScopeModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
 
 import java.util.List;
 import java.util.Map;
@@ -78,7 +77,7 @@ public class MetadataUtils {
 
     private static MetadataService referProxy(String key, ServiceInstance 
instance) {
         MetadataServiceURLBuilder builder;
-        ExtensionLoader<MetadataServiceURLBuilder> loader = 
instance.getOrDefaultApplicationModel()
+        ExtensionLoader<MetadataServiceURLBuilder> loader = 
instance.getApplicationModel()
             .getExtensionLoader(MetadataServiceURLBuilder.class);
 
         Map<String, String> metadata = instance.getMetadata();
@@ -97,7 +96,7 @@ public class MetadataUtils {
         }
 
         // Simply rely on the first metadata url, as stated in 
MetadataServiceURLBuilder.
-        ScopeModel scopeModel = 
ScopeModelUtil.getOrDefaultApplicationModel(instance.getApplicationModel());
+        ScopeModel scopeModel = instance.getApplicationModel();
         Protocol protocol = 
scopeModel.getExtensionLoader(Protocol.class).getAdaptiveExtension();
         Invoker<MetadataService> invoker = 
protocol.refer(MetadataService.class, urls.get(0));
         metadataServiceInvokers.put(key, invoker);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
index d1b88f0..fe78551 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilder.java
@@ -25,7 +25,6 @@ import org.apache.dubbo.metadata.MetadataService;
 import org.apache.dubbo.registry.client.ServiceInstance;
 import org.apache.dubbo.remoting.Constants;
 import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.ScopeModelAware;
 
 import java.util.Collections;
 import java.util.List;
@@ -49,17 +48,18 @@ import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
  * @see MetadataService
  * @since 2.7.5
  */
-public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuilder, ScopeModelAware {
+public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuilder {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     public static final String NAME = "standard";
 
     private ApplicationModel applicationModel;
+    private Integer metadataServicePort;
 
-    @Override
-    public void setApplicationModel(ApplicationModel applicationModel) {
+    public StandardMetadataServiceURLBuilder(ApplicationModel 
applicationModel) {
         this.applicationModel = applicationModel;
+        metadataServicePort = 
applicationModel.getCurrentConfig().getMetadataServicePort();
     }
 
     /**
@@ -109,7 +109,7 @@ public class StandardMetadataServiceURLBuilder implements 
MetadataServiceURLBuil
     }
 
     private URL generateUrlWithoutMetadata(String serviceName, String host, 
Integer instancePort) {
-        Integer port = 
ApplicationModel.defaultModel().getCurrentConfig().getMetadataServicePort();
+        Integer port = metadataServicePort;
         if (port == null || port < 1) {
             logger.warn("Metadata Service Port is not provided, since DNS is 
not able to negotiate the metadata port " +
                     "between Provider and Consumer, will try to use instance 
port as the default metadata port.");
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataUtilsTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataUtilsTest.java
index 4deabae..46eb7c3 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataUtilsTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataUtilsTest.java
@@ -26,12 +26,10 @@ import org.apache.dubbo.rpc.Invoker;
 import org.apache.dubbo.rpc.Protocol;
 import org.apache.dubbo.rpc.ProxyFactory;
 import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.model.ScopeModelUtil;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
 import java.io.IOException;
@@ -41,7 +39,6 @@ import java.util.Map;
 import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils.EXPORTED_SERVICES_REVISION_PROPERTY_NAME;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
@@ -81,7 +78,7 @@ public class MetadataUtilsTest {
         
when(serviceInstance.getServiceName()).thenReturn(DemoService.class.getName());
         when(serviceInstance.getMetadata()).thenReturn(metadata);
         when(serviceInstance.getAddress()).thenReturn("127.0.0.1");
-        
when(serviceInstance.getApplicationModel()).thenReturn(ApplicationModel.defaultModel());
+        when(serviceInstance.getHost()).thenReturn("127.0.0.1");
 
         String key = 
"org.apache.dubbo.registry.integration.DemoService##127.0.0.1##1";
         
Assertions.assertFalse(MetadataUtils.metadataServiceProxies.containsKey(key));
@@ -101,7 +98,7 @@ public class MetadataUtilsTest {
         Invoker<Object> invoker = mock(Invoker.class);
         MetadataService metadataService = mock(MetadataService.class);
 
-        
when(serviceInstance.getOrDefaultApplicationModel()).thenReturn(applicationModel);
+        
when(serviceInstance.getApplicationModel()).thenReturn(applicationModel);
 
         ExtensionLoader<Protocol> protocolExtensionLoader = 
mock(ExtensionLoader.class);
         
when(protocolExtensionLoader.getAdaptiveExtension()).thenReturn(protocol);
@@ -115,16 +112,11 @@ public class MetadataUtilsTest {
         when(protocol.refer(any(), any())).thenReturn(invoker);
         when(proxyFactory.getProxy(invoker)).thenReturn(metadataService);
 
-        try (MockedStatic<ScopeModelUtil> scopeModelUtilMockedStatic = 
mockStatic(ScopeModelUtil.class)) {
-            scopeModelUtilMockedStatic
-                .when(() -> 
ScopeModelUtil.getOrDefaultApplicationModel(serviceInstance.getApplicationModel()))
-                .thenReturn(applicationModel);
-            MetadataUtils.getMetadataServiceProxy(serviceInstance);
+        MetadataUtils.getMetadataServiceProxy(serviceInstance);
 
-            Assertions.assertEquals(1, 
MetadataUtils.getMetadataServiceProxies().size());
-            Assertions.assertEquals(1, 
MetadataUtils.getMetadataServiceInvokers().size());
-            Assertions.assertEquals(metadataService, 
MetadataUtils.getMetadataServiceProxy(serviceInstance));
-        }
+        Assertions.assertEquals(1, 
MetadataUtils.getMetadataServiceProxies().size());
+        Assertions.assertEquals(1, 
MetadataUtils.getMetadataServiceInvokers().size());
+        Assertions.assertEquals(metadataService, 
MetadataUtils.getMetadataServiceProxy(serviceInstance));
 
         MetadataUtils.destroyMetadataServiceProxy(serviceInstance);
         ApplicationModel.defaultModel().destroy();
@@ -139,7 +131,7 @@ public class MetadataUtilsTest {
         
when(serviceInstance.getServiceName()).thenReturn(DemoService.class.getName());
         when(serviceInstance.getMetadata()).thenReturn(metadata);
         when(serviceInstance.getAddress()).thenReturn("127.0.0.1");
-        
when(serviceInstance.getApplicationModel()).thenReturn(ApplicationModel.defaultModel());
+        when(serviceInstance.getHost()).thenReturn("127.0.0.1");
 
         String key = 
"org.apache.dubbo.registry.integration.DemoService##127.0.0.1##1";
         
Assertions.assertFalse(MetadataUtils.metadataServiceProxies.containsKey(key));
@@ -153,7 +145,7 @@ public class MetadataUtilsTest {
 
         ApplicationModel applicationModel = 
spy(ApplicationModel.defaultModel());
         
applicationModel.getApplicationConfigManager().setApplication(applicationConfig);
-        
when(serviceInstance.getOrDefaultApplicationModel()).thenReturn(applicationModel);
+        
when(serviceInstance.getApplicationModel()).thenReturn(applicationModel);
 
         Protocol protocol = mock(Protocol.class);
         ProxyFactory proxyFactory = mock(ProxyFactory.class);
@@ -172,12 +164,7 @@ public class MetadataUtilsTest {
         when(protocol.refer(any(), any())).thenReturn(invoker);
         when(proxyFactory.getProxy(invoker)).thenReturn(metadataService);
 
-        try (MockedStatic<ScopeModelUtil> scopeModelUtilMockedStatic = 
mockStatic(ScopeModelUtil.class)) {
-            scopeModelUtilMockedStatic
-                .when(() -> 
ScopeModelUtil.getOrDefaultApplicationModel(serviceInstance.getApplicationModel()))
-                .thenReturn(applicationModel);
-            MetadataUtils.getMetadataServiceProxy(serviceInstance);
-        }
+        MetadataUtils.getMetadataServiceProxy(serviceInstance);
 
         MetadataUtils.destroyMetadataServiceProxy(serviceInstance);
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java
index 22e5832..d69a6dd 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/StandardMetadataServiceURLBuilderTest.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.registry.client.metadata;
 
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.metadata.MetadataService;
 import org.apache.dubbo.registry.client.DefaultServiceInstance;
@@ -24,20 +25,17 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+
 import java.util.List;
 
 import static 
org.apache.dubbo.registry.client.metadata.MetadataServiceURLBuilderTest.serviceInstance;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.Mockito.spy;
 
 /**
  * {@link StandardMetadataServiceURLBuilder} Test
  */
 public class StandardMetadataServiceURLBuilderTest {
 
-    private StandardMetadataServiceURLBuilder builder = new 
StandardMetadataServiceURLBuilder();
-
-
     @BeforeAll
     public static void setUp() {
         ApplicationConfig applicationConfig = new ApplicationConfig("demo");
@@ -52,6 +50,10 @@ public class StandardMetadataServiceURLBuilderTest {
 
     @Test
     public void testBuild() {
+        ExtensionLoader<MetadataServiceURLBuilder> loader = 
ApplicationModel.defaultModel()
+            .getExtensionLoader(MetadataServiceURLBuilder.class);
+        MetadataServiceURLBuilder builder = 
loader.getExtension(StandardMetadataServiceURLBuilder.NAME);
+
         // test generateUrlWithoutMetadata
         List<URL> urls = builder.build(new DefaultServiceInstance("test", 
"127.0.0.1", 8080, ApplicationModel.defaultModel()));
         assertEquals(1, urls.size());
@@ -66,6 +68,7 @@ public class StandardMetadataServiceURLBuilderTest {
         
assertEquals(url.getParameters().get("getAndListenInstanceMetadata.1.callback"),
 "true");
         assertEquals(url.getParameters().get("reconnect"), "false");
         assertEquals(url.getParameters().get("timeout"), "5000");
+        assertEquals(url.getApplicationModel(), 
ApplicationModel.defaultModel());
 
         // test generateWithMetadata
         urls = builder.build(serviceInstance);

Reply via email to