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