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