作者 crossoverJie

:recycle: Refactoring code.

@@ -33,11 +33,16 @@ public abstract class AbstractConsistentHash { @@ -33,11 +33,16 @@ public abstract class AbstractConsistentHash {
33 */ 33 */
34 protected abstract String getFirstNodeValue(String value); 34 protected abstract String getFirstNodeValue(String value);
35 35
36 - public void process(List<String> values){ 36 + public String process(List<String> values){
  37 + String key = values.get(0);
  38 + values.remove(0) ;
  39 +
37 for (String value : values) { 40 for (String value : values) {
38 add(hash(value), value); 41 add(hash(value), value);
39 } 42 }
40 sort(); 43 sort();
  44 +
  45 + return getFirstNodeValue(key) ;
41 } 46 }
42 47
43 /** 48 /**
@@ -12,12 +12,13 @@ import java.util.List; @@ -12,12 +12,13 @@ import java.util.List;
12 * @since JDK 1.8 12 * @since JDK 1.8
13 */ 13 */
14 public class ConsistentHashHandle implements RouteHandle { 14 public class ConsistentHashHandle implements RouteHandle {
15 -  
16 -  
17 - 15 + private AbstractConsistentHash hash = new SortArrayMapConsistentHash() ;
18 16
19 @Override 17 @Override
20 public String routeServer(List<String> values) { 18 public String routeServer(List<String> values) {
21 - return null; 19 + String key = values.get(0);
  20 + values.remove(0) ;
  21 + hash.process(values);
  22 + return "";
22 } 23 }
23 } 24 }
@@ -14,18 +14,18 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash { @@ -14,18 +14,18 @@ public class SortArrayMapConsistentHash extends AbstractConsistentHash {
14 private SortArrayMap sortArrayMap = new SortArrayMap(); 14 private SortArrayMap sortArrayMap = new SortArrayMap();
15 15
16 @Override 16 @Override
17 - protected void add(long key, String value) { 17 + public void add(long key, String value) {
18 sortArrayMap.add(key, value); 18 sortArrayMap.add(key, value);
19 } 19 }
20 20
21 @Override 21 @Override
22 - protected void sort() { 22 + public void sort() {
23 sortArrayMap.sort(); 23 sortArrayMap.sort();
24 sortArrayMap.print(); 24 sortArrayMap.print();
25 } 25 }
26 26
27 @Override 27 @Override
28 - protected String getFirstNodeValue(String value) { 28 + public String getFirstNodeValue(String value) {
29 long hash = super.hash(value); 29 long hash = super.hash(value);
30 System.out.println("value=" + value + " hash = " + hash); 30 System.out.println("value=" + value + " hash = " + hash);
31 return sortArrayMap.firstNodeValue(hash); 31 return sortArrayMap.firstNodeValue(hash);
@@ -14,12 +14,12 @@ public class TreeMapConsistentHash extends AbstractConsistentHash { @@ -14,12 +14,12 @@ public class TreeMapConsistentHash extends AbstractConsistentHash {
14 private TreeMap<Long,String> treeMap = new TreeMap<Long, String>() ; 14 private TreeMap<Long,String> treeMap = new TreeMap<Long, String>() ;
15 15
16 @Override 16 @Override
17 - protected void add(long key, String value) { 17 + public void add(long key, String value) {
18 treeMap.put(key, value); 18 treeMap.put(key, value);
19 } 19 }
20 20
21 @Override 21 @Override
22 - protected String getFirstNodeValue(String value) { 22 + public String getFirstNodeValue(String value) {
23 long hash = super.hash(value); 23 long hash = super.hash(value);
24 System.out.println("value=" + value + " hash = " + hash); 24 System.out.println("value=" + value + " hash = " + hash);
25 SortedMap<Long, String> last = treeMap.tailMap(hash); 25 SortedMap<Long, String> last = treeMap.tailMap(hash);
1 package com.crossoverjie.cim.common.route.algorithm.consistenthash; 1 package com.crossoverjie.cim.common.route.algorithm.consistenthash;
2 2
  3 +import org.junit.Assert;
3 import org.junit.Test; 4 import org.junit.Test;
4 5
5 import java.util.ArrayList; 6 import java.util.ArrayList;
@@ -14,13 +15,14 @@ public class SortArrayMapConsistentHashTest { @@ -14,13 +15,14 @@ public class SortArrayMapConsistentHashTest {
14 AbstractConsistentHash map = new SortArrayMapConsistentHash() ; 15 AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
15 16
16 List<String> strings = new ArrayList<String>(); 17 List<String> strings = new ArrayList<String>();
  18 + strings.add("zhangsan") ;
17 for (int i = 0; i < 10; i++) { 19 for (int i = 0; i < 10; i++) {
18 strings.add("127.0.0." + i) ; 20 strings.add("127.0.0." + i) ;
19 } 21 }
20 - map.process(strings); 22 + String process = map.process(strings);
  23 + System.out.println(process);
  24 + Assert.assertEquals("127.0.0.8",process);
21 25
22 - String firstNodeValue = map.getFirstNodeValue("zhangsan");  
23 - System.out.println(firstNodeValue);  
24 } 26 }
25 27
26 @Test 28 @Test
@@ -28,12 +30,28 @@ public class SortArrayMapConsistentHashTest { @@ -28,12 +30,28 @@ public class SortArrayMapConsistentHashTest {
28 AbstractConsistentHash map = new SortArrayMapConsistentHash() ; 30 AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
29 31
30 List<String> strings = new ArrayList<String>(); 32 List<String> strings = new ArrayList<String>();
  33 + strings.add("zhangsan2");
31 for (int i = 0; i < 10; i++) { 34 for (int i = 0; i < 10; i++) {
32 strings.add("127.0.0." + i) ; 35 strings.add("127.0.0." + i) ;
33 } 36 }
34 - map.process(strings); 37 + String process = map.process(strings);
  38 + System.out.println(process);
35 39
36 - String firstNodeValue = map.getFirstNodeValue("zhangsan2");  
37 - System.out.println(firstNodeValue); 40 + Assert.assertEquals("127.0.0.4",process);
  41 + }
  42 +
  43 + @Test
  44 + public void getFirstNodeValue3() {
  45 + AbstractConsistentHash map = new SortArrayMapConsistentHash() ;
  46 +
  47 + List<String> strings = new ArrayList<String>();
  48 + strings.add("1551253899106") ;
  49 + for (int i = 0; i < 10; i++) {
  50 + strings.add("127.0.0." + i) ;
  51 + }
  52 + String process = map.process(strings);
  53 +
  54 + System.out.println(process);
  55 + Assert.assertEquals("127.0.0.6",process);
38 } 56 }
39 } 57 }
1 package com.crossoverjie.cim.common.route.algorithm.consistenthash; 1 package com.crossoverjie.cim.common.route.algorithm.consistenthash;
2 2
  3 +import org.junit.Assert;
3 import org.junit.Test; 4 import org.junit.Test;
4 5
5 import java.util.ArrayList; 6 import java.util.ArrayList;
@@ -12,13 +13,13 @@ public class TreeMapConsistentHashTest { @@ -12,13 +13,13 @@ public class TreeMapConsistentHashTest {
12 AbstractConsistentHash map = new TreeMapConsistentHash() ; 13 AbstractConsistentHash map = new TreeMapConsistentHash() ;
13 14
14 List<String> strings = new ArrayList<String>(); 15 List<String> strings = new ArrayList<String>();
  16 + strings.add("zhangsan") ;
15 for (int i = 0; i < 10; i++) { 17 for (int i = 0; i < 10; i++) {
16 strings.add("127.0.0." + i) ; 18 strings.add("127.0.0." + i) ;
17 } 19 }
18 - map.process(strings);  
19 -  
20 - String firstNodeValue = map.getFirstNodeValue("zhangsan");  
21 - System.out.println(firstNodeValue); 20 + String process = map.process(strings);
  21 + System.out.println(process);
  22 + Assert.assertEquals("127.0.0.8",process);
22 } 23 }
23 24
24 25
@@ -28,12 +29,29 @@ public class TreeMapConsistentHashTest { @@ -28,12 +29,29 @@ public class TreeMapConsistentHashTest {
28 AbstractConsistentHash map = new TreeMapConsistentHash() ; 29 AbstractConsistentHash map = new TreeMapConsistentHash() ;
29 30
30 List<String> strings = new ArrayList<String>(); 31 List<String> strings = new ArrayList<String>();
  32 + strings.add("zhangsan2");
  33 + for (int i = 0; i < 10; i++) {
  34 + strings.add("127.0.0." + i) ;
  35 + }
  36 + String process = map.process(strings);
  37 + System.out.println(process);
  38 +
  39 + Assert.assertEquals("127.0.0.4",process);
  40 + }
  41 +
  42 +
  43 + @Test
  44 + public void getFirstNodeValue3() {
  45 + AbstractConsistentHash map = new TreeMapConsistentHash() ;
  46 +
  47 + List<String> strings = new ArrayList<String>();
  48 + strings.add("1551253899106") ;
31 for (int i = 0; i < 10; i++) { 49 for (int i = 0; i < 10; i++) {
32 strings.add("127.0.0." + i) ; 50 strings.add("127.0.0." + i) ;
33 } 51 }
34 - map.process(strings); 52 + String process = map.process(strings);
35 53
36 - String firstNodeValue = map.getFirstNodeValue("zhangsan2");  
37 - System.out.println(firstNodeValue); 54 + System.out.println(process);
  55 + Assert.assertEquals("127.0.0.6",process);
38 } 56 }
39 } 57 }