You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/11/04 09:01:53 UTC
[dubbo] branch 3.0 updated: cancel last retryFuture,
destory listener after each test (#9186)
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 502f565 cancel last retryFuture, destory listener after each test (#9186)
502f565 is described below
commit 502f565d3718b4bc36eee1a613b88650d6d1727f
Author: zrlw <zr...@sina.com>
AuthorDate: Thu Nov 4 17:01:44 2021 +0800
cancel last retryFuture, destory listener after each test (#9186)
---
.../listener/ServiceInstancesChangedListener.java | 4 +++
.../ServiceInstancesChangedListenerTest.java | 29 ++++++++++++++++------
2 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index faf8578..a41f537 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -155,6 +155,10 @@ public class ServiceInstancesChangedListener {
if (hasEmptyMetadata(newRevisionToMetadata)) {// retry every 10 seconds
if (retryPermission.tryAcquire()) {
+ if (retryFuture != null && !retryFuture.isDone()) {
+ // cancel last retryFuture because only one retryFuture will be canceled at destroy().
+ retryFuture.cancel(true);
+ }
retryFuture = scheduler.schedule(new AddressRefreshRetryTask(retryPermission, event.getServiceName()), 10_000L, TimeUnit.MILLISECONDS);
logger.warn("Address refresh try task submitted.");
}
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListenerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListenerTest.java
index 042a071..bfa36cd 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListenerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListenerTest.java
@@ -30,6 +30,7 @@ import org.apache.dubbo.registry.client.metadata.MetadataUtils;
import com.google.gson.Gson;
import org.hamcrest.Matchers;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.MethodOrderer;
@@ -108,6 +109,8 @@ public class ServiceInstancesChangedListenerTest {
static ServiceDiscovery serviceDiscovery;
+ ServiceInstancesChangedListener listener = null;
+
@BeforeAll
public static void setUp() {
List<Object> urlsSameRevision = new ArrayList<>();
@@ -154,6 +157,14 @@ public class ServiceInstancesChangedListenerTest {
serviceDiscovery = Mockito.mock(ServiceDiscovery.class);
}
+ @AfterEach
+ public void tearDown() {
+ if (listener != null) {
+ listener.destroy();
+ listener = null;
+ }
+ }
+
// 正常场景。单应用app1 通知地址基本流程,只做instance-metadata关联,没有metadata内容的解析
@Test
@Order(1)
@@ -161,7 +172,8 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
ServiceDiscovery serviceDiscovery = Mockito.mock(ServiceDiscovery.class);
- ServiceInstancesChangedListener spyListener = Mockito.spy(new ServiceInstancesChangedListener(serviceNames, serviceDiscovery));
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ ServiceInstancesChangedListener spyListener = Mockito.spy(listener);
Mockito.doReturn(metadataInfo_111).when(spyListener).getRemoteMetadata(eq("111"), Mockito.anyMap(), Mockito.any());
ServiceInstancesChangedEvent event = new ServiceInstancesChangedEvent("app1", app1Instances);
spyListener.onEvent(event);
@@ -189,7 +201,7 @@ public class ServiceInstancesChangedListenerTest {
public void testInstanceNotificationAndMetadataParse() {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
try (MockedStatic<MetadataUtils> mockedMetadataUtils = Mockito.mockStatic(MetadataUtils.class)) {
mockedMetadataUtils.when(() -> MetadataUtils.getMetadataServiceProxy(Mockito.any())).thenReturn(metadataService);
@@ -222,7 +234,7 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
serviceNames.add("app2");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
try (MockedStatic<MetadataUtils> mockedMetadataUtils = Mockito.mockStatic(MetadataUtils.class)) {
mockedMetadataUtils.when(() -> MetadataUtils.getMetadataServiceProxy(Mockito.any())).thenReturn(metadataService);
@@ -264,7 +276,7 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
serviceNames.add("app2");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
try (MockedStatic<MetadataUtils> mockedMetadataUtils = Mockito.mockStatic(MetadataUtils.class)) {
mockedMetadataUtils.when(() -> MetadataUtils.getMetadataServiceProxy(Mockito.any())).thenReturn(metadataService);
@@ -328,7 +340,7 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
serviceNames.add("app2");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
NotifyListener demoServiceListener = Mockito.mock(NotifyListener.class);
NotifyListener demoService2Listener = Mockito.mock(NotifyListener.class);
listener.addListenerAndNotify(service1 + ":dubbo", demoServiceListener);
@@ -377,7 +389,7 @@ public class ServiceInstancesChangedListenerTest {
public void testRevisionFailureOnStartup() {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
try (MockedStatic<MetadataUtils> mockedMetadataUtils = Mockito.mockStatic(MetadataUtils.class)) {
mockedMetadataUtils.when(() -> MetadataUtils.getMetadataServiceProxy(Mockito.any())).thenReturn(metadataService);
// notify app1 instance change
@@ -403,7 +415,7 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
serviceNames.add("app2");
- ServiceInstancesChangedListener listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
ConcurrentMap tmpProxyMap = MetadataUtils.metadataServiceProxies;
@@ -477,7 +489,8 @@ public class ServiceInstancesChangedListenerTest {
Set<String> serviceNames = new HashSet<>();
serviceNames.add("app1");
ServiceDiscovery serviceDiscovery = Mockito.mock(ServiceDiscovery.class);
- ServiceInstancesChangedListener spyListener = Mockito.spy(new ServiceInstancesChangedListener(serviceNames, serviceDiscovery));
+ listener = new ServiceInstancesChangedListener(serviceNames, serviceDiscovery);
+ ServiceInstancesChangedListener spyListener = Mockito.spy(listener);
Mockito.doReturn(null).when(spyListener).getRemoteMetadata(eq(null), Mockito.anyMap(), Mockito.any());
ServiceInstancesChangedEvent event = new ServiceInstancesChangedEvent("app1", app1InstancesWithNoRevision);
spyListener.onEvent(event);