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 <jhq0...@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);