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);