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 <[email protected]>
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);

Reply via email to