You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/03/26 04:44:53 UTC

[shardingsphere] branch master updated: Fixed the bug that the order of multiple sharding keys in the Hint strategy (#9818)

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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 80ce4a4  Fixed the bug that the order of multiple sharding keys in the Hint strategy (#9818)
80ce4a4 is described below

commit 80ce4a4b01e648550fa375f27bb828bf1788b1ec
Author: passone <61...@qq.com>
AuthorDate: Fri Mar 26 12:44:14 2021 +0800

    Fixed the bug that the order of multiple sharding keys in the Hint strategy (#9818)
    
    * Fixed the defect that the order of multiple sharding keys in the Hint strategy
    
    * Update HintManager junit test
---
 .../shardingsphere/infra/hint/HintManager.java     |  6 +--
 .../shardingsphere/infra/hint/HintManagerTest.java | 63 +++++++++++++---------
 2 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/HintManager.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/HintManager.java
index 33157df..9febb38 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/HintManager.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/HintManager.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.infra.hint;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
@@ -34,9 +34,9 @@ public final class HintManager implements AutoCloseable {
     
     private static final ThreadLocal<HintManager> HINT_MANAGER_HOLDER = new ThreadLocal<>();
     
-    private final Multimap<String, Comparable<?>> databaseShardingValues = HashMultimap.create();
+    private final Multimap<String, Comparable<?>> databaseShardingValues = ArrayListMultimap.create();
     
-    private final Multimap<String, Comparable<?>> tableShardingValues = HashMultimap.create();
+    private final Multimap<String, Comparable<?>> tableShardingValues = ArrayListMultimap.create();
     
     private boolean databaseShardingOnly;
     
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/HintManagerTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/HintManagerTest.java
index 938fb73..e5e2a89 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/HintManagerTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/HintManagerTest.java
@@ -19,13 +19,16 @@ package org.apache.shardingsphere.infra.hint;
 
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 public final class HintManagerTest {
-    
+
     @Test(expected = IllegalStateException.class)
     public void assertGetInstanceTwice() {
         try {
@@ -35,7 +38,7 @@ public final class HintManagerTest {
             HintManager.clear();
         }
     }
-    
+
     @Test
     public void assertSetDatabaseShardingValue() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -43,59 +46,65 @@ public final class HintManagerTest {
             hintManager.setDatabaseShardingValue(3);
             assertTrue(HintManager.isDatabaseShardingOnly());
             assertThat(HintManager.getDatabaseShardingValues("").size(), is(1));
-            assertTrue(HintManager.getDatabaseShardingValues("").contains(3));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getDatabaseShardingValues(""));
+            assertThat(shardingValues.get(0), is(3));
         }
     }
-    
+
     @Test
     public void assertAddDatabaseShardingValue() {
         try (HintManager hintManager = HintManager.getInstance()) {
             hintManager.addDatabaseShardingValue("logicTable", 1);
             hintManager.addDatabaseShardingValue("logicTable", 3);
             assertThat(HintManager.getDatabaseShardingValues("logicTable").size(), is(2));
-            assertTrue(HintManager.getDatabaseShardingValues("logicTable").contains(1));
-            assertTrue(HintManager.getDatabaseShardingValues("logicTable").contains(3));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getDatabaseShardingValues("logicTable"));
+            assertThat(shardingValues.get(0), is(1));
+            assertThat(shardingValues.get(1), is(3));
         }
     }
-    
+
     @Test
     public void assertAddTableShardingValue() {
         try (HintManager hintManager = HintManager.getInstance()) {
             hintManager.addTableShardingValue("logicTable", 1);
             hintManager.addTableShardingValue("logicTable", 3);
             assertThat(HintManager.getTableShardingValues("logicTable").size(), is(2));
-            assertTrue(HintManager.getTableShardingValues("logicTable").contains(1));
-            assertTrue(HintManager.getTableShardingValues("logicTable").contains(3));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getTableShardingValues("logicTable"));
+            assertThat(shardingValues.get(0), is(1));
+            assertThat(shardingValues.get(1), is(3));
         }
     }
-    
+
     @Test
     public void assertGetDatabaseShardingValuesWithoutLogicTable() {
         try (HintManager hintManager = HintManager.getInstance()) {
             hintManager.setDatabaseShardingValue(1);
             assertThat(HintManager.getDatabaseShardingValues().size(), is(1));
-            assertTrue(HintManager.getDatabaseShardingValues().contains(1));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getDatabaseShardingValues());
+            assertThat(shardingValues.get(0), is(1));
         }
     }
-    
+
     @Test
     public void assertGetDatabaseShardingValuesWithLogicTable() {
         try (HintManager hintManager = HintManager.getInstance()) {
             hintManager.addDatabaseShardingValue("logic_table", 1);
             assertThat(HintManager.getDatabaseShardingValues("logic_table").size(), is(1));
-            assertTrue(HintManager.getDatabaseShardingValues("logic_table").contains(1));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getDatabaseShardingValues("logic_table"));
+            assertThat(shardingValues.get(0), is(1));
         }
     }
-    
+
     @Test
     public void assertGetTableShardingValues() {
         try (HintManager hintManager = HintManager.getInstance()) {
             hintManager.addTableShardingValue("logic_table", 1);
             assertThat(HintManager.getTableShardingValues("logic_table").size(), is(1));
-            assertTrue(HintManager.getTableShardingValues("logic_table").contains(1));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getTableShardingValues("logic_table"));
+            assertThat(shardingValues.get(0), is(1));
         }
     }
-    
+
     @Test
     public void assertIsDatabaseShardingOnly() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -103,14 +112,14 @@ public final class HintManagerTest {
             assertTrue(HintManager.isDatabaseShardingOnly());
         }
     }
-    
+
     @Test
     public void assertIsDatabaseShardingOnlyWithoutSet() {
         HintManager hintManager = HintManager.getInstance();
         hintManager.close();
         assertFalse(HintManager.isDatabaseShardingOnly());
     }
-    
+
     @Test
     public void assertAddDatabaseShardingValueOnlyDatabaseSharding() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -119,10 +128,11 @@ public final class HintManagerTest {
             hintManager.addDatabaseShardingValue("logic_table", 2);
             assertFalse(HintManager.isDatabaseShardingOnly());
             assertThat(HintManager.getDatabaseShardingValues("logic_table").size(), is(1));
-            assertTrue(HintManager.getDatabaseShardingValues("logic_table").contains(2));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getDatabaseShardingValues("logic_table"));
+            assertThat(shardingValues.get(0), is(2));
         }
     }
-    
+
     @Test
     public void assertAddTableShardingValueOnlyDatabaseSharding() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -131,10 +141,11 @@ public final class HintManagerTest {
             hintManager.addTableShardingValue("logic_table", 2);
             assertFalse(HintManager.isDatabaseShardingOnly());
             assertThat(HintManager.getTableShardingValues("logic_table").size(), is(1));
-            assertTrue(HintManager.getTableShardingValues("logic_table").contains(2));
+            List<Comparable<?>> shardingValues = new ArrayList<>(HintManager.getTableShardingValues("logic_table"));
+            assertThat(shardingValues.get(0), is(2));
         }
     }
-    
+
     @Test
     public void assertSetPrimaryRouteOnly() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -142,7 +153,7 @@ public final class HintManagerTest {
             assertTrue(HintManager.isWriteRouteOnly());
         }
     }
-    
+
     @Test
     public void assertIsPrimaryRouteOnly() {
         try (HintManager hintManager = HintManager.getInstance()) {
@@ -150,14 +161,14 @@ public final class HintManagerTest {
             assertTrue(HintManager.isWriteRouteOnly());
         }
     }
-    
+
     @Test
     public void assertIsPrimaryRouteOnlyWithoutSet() {
         HintManager hintManager = HintManager.getInstance();
         hintManager.close();
         assertFalse(HintManager.isWriteRouteOnly());
     }
-    
+
     @Test
     public void assertClose() {
         HintManager hintManager = HintManager.getInstance();
@@ -168,3 +179,5 @@ public final class HintManagerTest {
         assertTrue(HintManager.getTableShardingValues("logic_table").isEmpty());
     }
 }
+
+