You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2022/06/06 08:16:57 UTC

[dubbo] branch 3.0 updated: [3.0] Fix INIT rule being changed (#10119)

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

liujun 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 4689fefa96 [3.0] Fix INIT rule being changed (#10119)
4689fefa96 is described below

commit 4689fefa96ab75bb261ce33e0cd94402e54a9a71
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Mon Jun 6 16:16:29 2022 +0800

    [3.0] Fix INIT rule being changed (#10119)
---
 .../client/migration/MigrationRuleListener.java    |  4 ++--
 .../client/migration/model/MigrationRule.java      | 23 +++++++++++++++++++++-
 .../client/migration/MigrationRuleHandlerTest.java |  5 +++--
 .../migration/MigrationRuleListenerTest.java       |  2 +-
 4 files changed, 28 insertions(+), 6 deletions(-)

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 25dd4add57..c7cbb0363c 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
@@ -215,9 +215,9 @@ public class MigrationRuleListener implements RegistryProtocolListener, Configur
     }
 
     private MigrationRule parseRule(String rawRule) {
-        MigrationRule tmpRule = rule == null ? MigrationRule.INIT : rule;
+        MigrationRule tmpRule = rule == null ? MigrationRule.getInitRule() : rule;
         if (INIT.equals(rawRule)) {
-            tmpRule = MigrationRule.INIT;
+            tmpRule = MigrationRule.getInitRule();
         } else {
             try {
                 tmpRule = MigrationRule.parse(rawRule);
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
index 2c5dfea956..a3e50c3b6d 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/migration/model/MigrationRule.java
@@ -29,6 +29,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -75,7 +76,6 @@ import static org.apache.dubbo.registry.client.migration.MigrationRuleHandler.DU
  *    step: FORCE_INTERFACE
  */
 public class MigrationRule {
-    public static final MigrationRule INIT = new MigrationRule();
 
     private String key;
     private MigrationStep step;
@@ -89,6 +89,10 @@ public class MigrationRule {
     private transient Map<String, SubMigrationRule> interfaceRules;
     private transient Map<String, SubMigrationRule> applicationRules;
 
+    public static MigrationRule getInitRule() {
+        return new MigrationRule();
+    }
+
     @SuppressWarnings("unchecked")
     private static MigrationRule parseFromMap(Map<String, Object> map) {
         MigrationRule migrationRule = new MigrationRule();
@@ -387,4 +391,21 @@ public class MigrationRule {
         Yaml yaml = new Yaml(constructor);
         return yaml.dump(rule);
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        MigrationRule that = (MigrationRule) o;
+        return Objects.equals(key, that.key) && step == that.step && Objects.equals(threshold, that.threshold) && Objects.equals(proportion, that.proportion) && Objects.equals(delay, that.delay) && Objects.equals(force, that.force) && Objects.equals(interfaces, that.interfaces) && Objects.equals(applications, that.applications) && Objects.equals(interfaceRules, that.interfaceRules) && Objects.equals(applicationRules, that.applicationRules);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(key, step, threshold, proportion, delay, force, interfaces, applications, interfaceRules, applicationRules);
+    }
 }
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 66aec89130..b5ae5dd8c1 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
@@ -38,8 +38,9 @@ public class MigrationRuleHandlerTest {
         Mockito.when(invoker.migrateToForceApplicationInvoker(Mockito.any())).thenReturn(true);
         Mockito.when(invoker.migrateToForceInterfaceInvoker(Mockito.any())).thenReturn(true);
 
-        handler.doMigrate(MigrationRule.INIT);
-        Mockito.verify(invoker, Mockito.times(1)).migrateToApplicationFirstInvoker(MigrationRule.INIT);
+        MigrationRule initRule = MigrationRule.getInitRule();
+        handler.doMigrate(initRule);
+        Mockito.verify(invoker, Mockito.times(1)).migrateToApplicationFirstInvoker(initRule);
 
         MigrationRule rule = Mockito.mock(MigrationRule.class);
         Mockito.when(rule.getStep(url)).thenReturn(MigrationStep.FORCE_APPLICATION);
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
index be4b8ec1d8..72a0775fc1 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
@@ -129,7 +129,7 @@ public class MigrationRuleListenerTest {
         migrationRuleListener.getHandlers().put(migrationInvoker, handler);
         migrationRuleListener.onRefer(null, migrationInvoker, consumerURL, null);
         // check migration happened after invoker referred
-        Mockito.verify(handler, Mockito.times(1)).doMigrate(MigrationRule.INIT);
+        Mockito.verify(handler, Mockito.times(1)).doMigrate(MigrationRule.getInitRule());
 
         // check no delay tasks created for there's no local rule and no config center
         Assertions.assertNull(migrationRuleListener.localRuleMigrationFuture);