This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new d57ad31299 Migration bugfix & optimization (#11629)
d57ad31299 is described below

commit d57ad312994dc29d84ffc5b83768a784ae901d6c
Author: Mengyang Tang <[email protected]>
AuthorDate: Sat Feb 25 17:15:07 2023 +0800

    Migration bugfix & optimization (#11629)
    
    * Code optimize
    
    * Thread pool leak fix
    
    * Fix volatile problem
---
 .../DefaultMigrationAddressComparator.java         |  9 +--
 .../client/migration/MigrationInvoker.java         | 19 +++---
 .../client/migration/MigrationRuleHandler.java     | 14 ++---
 .../client/migration/MigrationRuleListener.java    | 72 +++++++++++-----------
 .../DefaultMigrationAddressComparatorTest.java     |  5 +-
 .../client/migration/MigrationInvokerTest.java     | 14 +++--
 .../client/migration/MigrationRuleHandlerTest.java |  8 +--
 .../client/migration/model/MigrationRuleTest.java  | 10 +--
 8 files changed, 73 insertions(+), 78 deletions(-)

diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
index b02f5209ec..72a5b590e4 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparator.java
@@ -42,7 +42,7 @@ public class DefaultMigrationAddressComparator implements 
MigrationAddressCompar
     public static final String OLD_ADDRESS_SIZE = "OLD_ADDRESS_SIZE";
     public static final String NEW_ADDRESS_SIZE = "NEW_ADDRESS_SIZE";
 
-    private ConcurrentMap<String, Map<String, Integer>> serviceMigrationData = 
new ConcurrentHashMap<>();
+    private final ConcurrentMap<String, Map<String, Integer>> 
serviceMigrationData = new ConcurrentHashMap<>();
 
     @Override
     public <T> boolean shouldMigrate(ClusterInvoker<T> newInvoker, 
ClusterInvoker<T> oldInvoker, MigrationRule rule) {
@@ -90,10 +90,7 @@ public class DefaultMigrationAddressComparator implements 
MigrationAddressCompar
             return false;
         }
 
-        if (((float) newAddressSize / (float) oldAddressSize) >= threshold) {
-            return true;
-        }
-        return false;
+        return ((float) newAddressSize / (float) oldAddressSize) >= threshold;
     }
 
     private <T> int getAddressSize(ClusterInvoker<T> invoker) {
@@ -115,6 +112,4 @@ public class DefaultMigrationAddressComparator implements 
MigrationAddressCompar
         }
         return "interface";
     }
-
-
 }
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
index 9fbe66fa0a..d9176f4c43 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationInvoker.java
@@ -49,17 +49,17 @@ import static 
org.apache.dubbo.registry.client.migration.model.MigrationStep.APP
 import static org.apache.dubbo.rpc.cluster.Constants.REFER_KEY;
 
 public class MigrationInvoker<T> implements MigrationClusterInvoker<T> {
-    private ErrorTypeAwareLogger logger = 
LoggerFactory.getErrorTypeAwareLogger(MigrationInvoker.class);
+    private final ErrorTypeAwareLogger logger = 
LoggerFactory.getErrorTypeAwareLogger(MigrationInvoker.class);
 
     private URL url;
-    private URL consumerUrl;
-    private Cluster cluster;
-    private Registry registry;
-    private Class<T> type;
-    private RegistryProtocol registryProtocol;
+    private final URL consumerUrl;
+    private final Cluster cluster;
+    private final Registry registry;
+    private final Class<T> type;
+    private final RegistryProtocol registryProtocol;
     private MigrationRuleListener migrationRuleListener;
-    private ConsumerModel consumerModel;
-    private FrameworkStatusReportService reportService;
+    private final ConsumerModel consumerModel;
+    private final FrameworkStatusReportService reportService;
 
     private volatile ClusterInvoker<T> invoker;
     private volatile ClusterInvoker<T> serviceDiscoveryInvoker;
@@ -77,6 +77,7 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
         this(null, null, registryProtocol, cluster, registry, type, url, 
consumerUrl);
     }
 
+    @SuppressWarnings("unchecked")
     public MigrationInvoker(ClusterInvoker<T> invoker,
                             ClusterInvoker<T> serviceDiscoveryInvoker,
                             RegistryProtocol registryProtocol,
@@ -249,6 +250,7 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
         calcPreferredInvoker(newRule);
     }
 
+    @SuppressWarnings("all")
     private void waitAddressNotify(MigrationRule newRule, CountDownLatch 
latch) {
         // wait and compare threshold
         int delay = newRule.getDelay(consumerUrl);
@@ -317,6 +319,7 @@ public class MigrationInvoker<T> implements 
MigrationClusterInvoker<T> {
             : (invoker != null && invoker.isAvailable()) || 
(serviceDiscoveryInvoker != null && serviceDiscoveryInvoker.isAvailable());
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public void destroy() {
         if (migrationRuleListener != null) {
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
index 334a180a43..920e1d65c2 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandler.java
@@ -30,10 +30,10 @@ public class MigrationRuleHandler<T> {
     public static final String DUBBO_SERVICEDISCOVERY_MIGRATION = 
"dubbo.application.migration.step";
     private static final ErrorTypeAwareLogger logger = 
LoggerFactory.getErrorTypeAwareLogger(MigrationRuleHandler.class);
 
-    private MigrationClusterInvoker<T> migrationInvoker;
-    private MigrationStep currentStep;
-    private Float currentThreshold = 0f;
-    private URL consumerURL;
+    private final MigrationClusterInvoker<T> migrationInvoker;
+    private volatile MigrationStep currentStep;
+    private volatile Float currentThreshold = 0f;
+    private final URL consumerURL;
 
     public MigrationRuleHandler(MigrationClusterInvoker<T> invoker, URL url) {
         this.migrationInvoker = invoker;
@@ -115,12 +115,6 @@ public class MigrationRuleHandler<T> {
         this.migrationInvoker.setMigrationRule(rule);
     }
 
-    private Float getMigrationThreshold(MigrationRule rule, Float threshold) {
-        Float configuredThreshold = rule.getThreshold(consumerURL);
-        threshold = configuredThreshold == null ? threshold : 
configuredThreshold;
-        return threshold;
-    }
-
     private void setCurrentStepAndThreshold(MigrationStep currentStep, Float 
currentThreshold) {
         if (currentThreshold != null) {
             this.currentThreshold = currentThreshold;
diff --git 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
index bc5c5a4876..02e877ca89 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/MigrationRuleListener.java
@@ -51,10 +51,10 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_THREAD_INTERRUPTED_EXCEPTION;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_PROPERTY_TYPE_MISMATCH;
-import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_THREAD_INTERRUPTED_EXCEPTION;
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.INTERNAL_ERROR;
+import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.REGISTRY_EMPTY_ADDRESS;
 import static org.apache.dubbo.common.constants.RegistryConstants.INIT;
 
 /**
@@ -75,7 +75,7 @@ public class MigrationRuleListener implements 
RegistryProtocolListener, Configur
     private static final int MIGRATION_DEFAULT_DELAY_TIME = 60000;
     private String ruleKey;
 
-    protected final ConcurrentMap<MigrationInvoker, MigrationRuleHandler> 
handlers = new ConcurrentHashMap<>();
+    protected final ConcurrentMap<MigrationInvoker<?>, 
MigrationRuleHandler<?>> handlers = new ConcurrentHashMap<>();
     protected final LinkedBlockingQueue<String> ruleQueue = new 
LinkedBlockingQueue<>();
 
     private final AtomicBoolean executorSubmit = new AtomicBoolean(false);
@@ -88,7 +88,7 @@ public class MigrationRuleListener implements 
RegistryProtocolListener, Configur
 
     private volatile String rawRule;
     private volatile MigrationRule rule;
-    private ModuleModel moduleModel;
+    private final ModuleModel moduleModel;
 
     public MigrationRuleListener(ModuleModel moduleModel) {
         this.moduleModel = moduleModel;
@@ -175,44 +175,44 @@ public class MigrationRuleListener implements 
RegistryProtocolListener, Configur
                         logger.info("Ignore duplicated rule");
                         continue;
                     }
+
+                    logger.info("Using the following migration rule to 
migrate:");
+                    logger.info(rule);
+
+                    setRawRule(rule);
+
+                    if (CollectionUtils.isEmptyMap(handlers)) {
+                        continue;
+                    }
+
+                    ExecutorService executorService = null;
                     try {
-                        logger.info("Using the following migration rule to 
migrate:");
-                        logger.info(rule);
-
-                        setRawRule(rule);
-
-                        if (CollectionUtils.isNotEmptyMap(handlers)) {
-                            ExecutorService executorService = 
Executors.newFixedThreadPool(100, new 
NamedThreadFactory("Dubbo-Invoker-Migrate"));
-                            List<Future<?>> migrationFutures = new 
ArrayList<>(handlers.size());
-                            handlers.forEach((_key, handler) -> {
-                                Future<?> future = executorService.submit(() 
-> {
-                                    handler.doMigrate(this.rule);
-                                });
-                                migrationFutures.add(future);
-                            });
-
-                            Throwable migrationException = null;
-                            for (Future<?> future : migrationFutures) {
-                                try {
-                                    future.get();
-                                } catch (InterruptedException ie) {
-                                    logger.warn(INTERNAL_ERROR, "unknown error 
in registry module", "", "Interrupted while waiting for migration async task to 
finish.");
-                                } catch (ExecutionException ee) {
-                                    migrationException = ee.getCause();
-                                }
-                            }
-                            if (migrationException != null) {
-                                logger.error(INTERNAL_ERROR, "unknown error in 
registry module", "", "Migration async task failed.", migrationException);
+                        executorService = 
Executors.newFixedThreadPool(Math.min(handlers.size(), 100), new 
NamedThreadFactory("Dubbo-Invoker-Migrate"));
+                        List<Future<?>> migrationFutures = new 
ArrayList<>(handlers.size());
+                        for (MigrationRuleHandler<?> handler : 
handlers.values()) {
+                            Future<?> future = executorService.submit(() -> 
handler.doMigrate(this.rule));
+                            migrationFutures.add(future);
+                        }
+
+                        for (Future<?> future : migrationFutures) {
+                            try {
+                                future.get();
+                            } catch (InterruptedException ie) {
+                                logger.warn(INTERNAL_ERROR, "unknown error in 
registry module", "", "Interrupted while waiting for migration async task to 
finish.");
+                            } catch (ExecutionException ee) {
+                                logger.error(INTERNAL_ERROR, "unknown error in 
registry module", "", "Migration async task failed.", ee.getCause());
                             }
-                            executorService.shutdown();
                         }
                     } catch (Throwable t) {
                         logger.error(INTERNAL_ERROR, "unknown error in 
registry module", "", "Error occurred when migration.", t);
+                    } finally {
+                        if (executorService != null) {
+                            executorService.shutdown();
+                        }
                     }
                 }
             });
         }
-
     }
 
     public void setRawRule(String rawRule) {
@@ -260,13 +260,11 @@ public class MigrationRuleListener implements 
RegistryProtocolListener, Configur
         if (localRuleMigrationFuture != null) {
             localRuleMigrationFuture.cancel(true);
         }
-        if (ruleManageExecutor != null) {
-            ruleManageExecutor.shutdown();
-        }
+        ruleManageExecutor.shutdown();
         ruleQueue.clear();
     }
 
-    public Map<MigrationInvoker, MigrationRuleHandler> getHandlers() {
+    public Map<MigrationInvoker<?>, MigrationRuleHandler<?>> getHandlers() {
         return handlers;
     }
 
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparatorTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparatorTest.java
index b6c43baa2c..f97f0b0c1a 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparatorTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/DefaultMigrationAddressComparatorTest.java
@@ -35,6 +35,7 @@ import static 
org.apache.dubbo.registry.client.migration.DefaultMigrationAddress
 
 class DefaultMigrationAddressComparatorTest {
 
+    @SuppressWarnings("all")
     @Test
     void test() {
         DefaultMigrationAddressComparator comparator = new 
DefaultMigrationAddressComparator();
@@ -69,13 +70,13 @@ class DefaultMigrationAddressComparatorTest {
 
         Mockito.when(oldInvoker.hasProxyInvokers()).thenReturn(true);
 
-        List<Invoker> newInvokerList = new LinkedList<>();
+        List<Invoker<?>> newInvokerList = new LinkedList<>();
         newInvokerList.add(Mockito.mock(Invoker.class));
         newInvokerList.add(Mockito.mock(Invoker.class));
         newInvokerList.add(Mockito.mock(Invoker.class));
         Mockito.when(newDirectory.getAllInvokers()).thenReturn(newInvokerList);
 
-        List<Invoker> oldInvokerList = new LinkedList<>();
+        List<Invoker<?>> oldInvokerList = new LinkedList<>();
         oldInvokerList.add(Mockito.mock(Invoker.class));
         oldInvokerList.add(Mockito.mock(Invoker.class));
         Mockito.when(oldDirectory.getAllInvokers()).thenReturn(oldInvokerList);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationInvokerTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationInvokerTest.java
index 5bed016013..fd5cf5d115 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationInvokerTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationInvokerTest.java
@@ -54,6 +54,7 @@ class MigrationInvokerTest {
         FrameworkModel.destroyAll();
     }
 
+    @SuppressWarnings("all")
     @Test
     void test() {
         RegistryProtocol registryProtocol = 
Mockito.mock(RegistryProtocol.class);
@@ -73,10 +74,10 @@ class MigrationInvokerTest {
         Mockito.when(invoker.hasProxyInvokers()).thenReturn(true);
         
Mockito.when(serviceDiscoveryInvoker.hasProxyInvokers()).thenReturn(true);
 
-        List<Invoker> invokers = new LinkedList<>();
+        List<Invoker<?>> invokers = new LinkedList<>();
         invokers.add(Mockito.mock(Invoker.class));
         invokers.add(Mockito.mock(Invoker.class));
-        List<Invoker> serviceDiscoveryInvokers = new LinkedList<>();
+        List<Invoker<?>> serviceDiscoveryInvokers = new LinkedList<>();
         serviceDiscoveryInvokers.add(Mockito.mock(Invoker.class));
         serviceDiscoveryInvokers.add(Mockito.mock(Invoker.class));
         Mockito.when(directory.getAllInvokers()).thenReturn(invokers);
@@ -96,7 +97,7 @@ class MigrationInvokerTest {
         Mockito.when(invoker.getUrl()).thenReturn(consumerURL);
         Mockito.when(serviceDiscoveryInvoker.getUrl()).thenReturn(consumerURL);
 
-        MigrationInvoker migrationInvoker = new 
MigrationInvoker(registryProtocol, null, null, DemoService.class, null, 
consumerURL);
+        MigrationInvoker<?> migrationInvoker = new 
MigrationInvoker<>(registryProtocol, null, null, DemoService.class, null, 
consumerURL);
 
         MigrationRule migrationRule = Mockito.mock(MigrationRule.class);
         Mockito.when(migrationRule.getForce(Mockito.any())).thenReturn(true);
@@ -225,6 +226,7 @@ class MigrationInvokerTest {
         Assertions.assertTrue(System.currentTimeMillis() - currentTimeMillis 
>= 2000);
     }
 
+    @SuppressWarnings("all")
     @Test
     void testDecide() {
         RegistryProtocol registryProtocol = 
Mockito.mock(RegistryProtocol.class);
@@ -244,10 +246,10 @@ class MigrationInvokerTest {
         Mockito.when(invoker.hasProxyInvokers()).thenReturn(true);
         
Mockito.when(serviceDiscoveryInvoker.hasProxyInvokers()).thenReturn(true);
 
-        List<Invoker> invokers = new LinkedList<>();
+        List<Invoker<?>> invokers = new LinkedList<>();
         invokers.add(Mockito.mock(Invoker.class));
         invokers.add(Mockito.mock(Invoker.class));
-        List<Invoker> serviceDiscoveryInvokers = new LinkedList<>();
+        List<Invoker<?>> serviceDiscoveryInvokers = new LinkedList<>();
         serviceDiscoveryInvokers.add(Mockito.mock(Invoker.class));
         serviceDiscoveryInvokers.add(Mockito.mock(Invoker.class));
         Mockito.when(directory.getAllInvokers()).thenReturn(invokers);
@@ -267,7 +269,7 @@ class MigrationInvokerTest {
         Mockito.when(invoker.getUrl()).thenReturn(consumerURL);
         Mockito.when(serviceDiscoveryInvoker.getUrl()).thenReturn(consumerURL);
 
-        MigrationInvoker migrationInvoker = new 
MigrationInvoker(registryProtocol, null, null, DemoService.class, null, 
consumerURL);
+        MigrationInvoker<?> migrationInvoker = new 
MigrationInvoker<>(registryProtocol, null, null, DemoService.class, null, 
consumerURL);
 
         MigrationRule migrationRule = Mockito.mock(MigrationRule.class);
         Mockito.when(migrationRule.getForce(Mockito.any())).thenReturn(true);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandlerTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandlerTest.java
index a98a4f4385..318da69cbe 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandlerTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleHandlerTest.java
@@ -28,12 +28,12 @@ import org.mockito.Mockito;
 class MigrationRuleHandlerTest {
     @Test
     void test() {
-        MigrationClusterInvoker invoker = 
Mockito.mock(MigrationClusterInvoker.class);
+        MigrationClusterInvoker<?> invoker = 
Mockito.mock(MigrationClusterInvoker.class);
         URL url = Mockito.mock(URL.class);
         Mockito.when(url.getDisplayServiceKey()).thenReturn("test");
         Mockito.when(url.getParameter(Mockito.any(), (String) 
Mockito.any())).thenAnswer(i->i.getArgument(1));
         
Mockito.when(url.getOrDefaultApplicationModel()).thenReturn(ApplicationModel.defaultModel());
-        MigrationRuleHandler handler = new MigrationRuleHandler(invoker, url);
+        MigrationRuleHandler<?> handler = new MigrationRuleHandler<>(invoker, 
url);
 
         
Mockito.when(invoker.migrateToForceApplicationInvoker(Mockito.any())).thenReturn(true);
         
Mockito.when(invoker.migrateToForceInterfaceInvoker(Mockito.any())).thenReturn(true);
@@ -61,7 +61,7 @@ class MigrationRuleHandlerTest {
         testMigrationWithStepUnchanged(rule, url, handler, invoker);
     }
 
-    private void testMigrationFailed(MigrationRule rule, URL url, 
MigrationRuleHandler handler, MigrationClusterInvoker invoker) {
+    private void testMigrationFailed(MigrationRule rule, URL url, 
MigrationRuleHandler<?> handler, MigrationClusterInvoker<?> invoker) {
         Assertions.assertEquals(MigrationStep.FORCE_INTERFACE, 
handler.getMigrationStep());
 
         
Mockito.when(invoker.migrateToForceApplicationInvoker(Mockito.any())).thenReturn(false);
@@ -72,7 +72,7 @@ class MigrationRuleHandlerTest {
         Assertions.assertEquals(MigrationStep.FORCE_INTERFACE, 
handler.getMigrationStep());
     }
 
-    private void testMigrationWithStepUnchanged(MigrationRule rule, URL url, 
MigrationRuleHandler handler, MigrationClusterInvoker invoker) {
+    private void testMigrationWithStepUnchanged(MigrationRule rule, URL url, 
MigrationRuleHandler<?> handler, MigrationClusterInvoker<?> invoker) {
         // set the same as
         Mockito.when(rule.getStep(url)).thenReturn(handler.getMigrationStep());
         handler.doMigrate(rule);
diff --git 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
index 79b20de724..e801688f7d 100644
--- 
a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
+++ 
b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
@@ -30,13 +30,15 @@ import java.util.Set;
 
 import static 
org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUSTER_TYPE_KEY;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 class MigrationRuleTest {
-    private static ServiceNameMapping mapping = mock(ServiceNameMapping.class);
+    private static final ServiceNameMapping mapping = 
mock(ServiceNameMapping.class);
 
     @Test
     void test_parse() {
@@ -87,14 +89,14 @@ class MigrationRuleTest {
         assertEquals(0.5f, migrationRule.getThreshold(url));
         assertEquals(30, migrationRule.getProportion(url));
         assertEquals(30, migrationRule.getDelay(url));
-        assertEquals(true, migrationRule.getForce(url));
+        assertTrue(migrationRule.getForce(url));
         assertEquals(MigrationStep.APPLICATION_FIRST, 
migrationRule.getStep(url));
 
         
Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.0");
         assertEquals(1.0f, migrationRule.getThreshold(url));
         assertEquals(60, migrationRule.getProportion(url));
         assertEquals(60, migrationRule.getDelay(url));
-        assertEquals(false, migrationRule.getForce(url));
+        assertFalse(migrationRule.getForce(url));
         assertEquals(MigrationStep.FORCE_APPLICATION, 
migrationRule.getStep(url));
 
         
Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.1");
@@ -107,7 +109,7 @@ class MigrationRuleTest {
         assertEquals(0.3f, migrationRule.getThreshold(url));
         assertEquals(20, migrationRule.getProportion(url));
         assertEquals(10, migrationRule.getDelay(url));
-        assertEquals(false, migrationRule.getForce(url));
+        assertFalse(migrationRule.getForce(url));
         assertEquals(MigrationStep.FORCE_INTERFACE, 
migrationRule.getStep(url));
         
when(mapping.getMapping(any(URL.class))).thenReturn(Collections.emptySet());
 

Reply via email to