@Override public void init() { partitionUtil = new PartitionUtil(count, length); initHashCode(); }
public void setPartitionLength(String partitionLength) { this.length = toIntArray(partitionLength); propertiesMap.put("partitionLength", partitionLength); }
@Test public void test() { PartitionByString rule = new PartitionByString(); String idVal = null; rule.setPartitionLength("512"); rule.setPartitionCount("2"); rule.init(); rule.setHashSlice("0:2"); // idVal = "0"; // Assert.assertEquals(true, 0 == rule.calculate(idVal)); // idVal = "45a"; // Assert.assertEquals(true, 1 == rule.calculate(idVal)); //last 4 rule = new PartitionByString(); rule.setPartitionLength("512"); rule.setPartitionCount("2"); rule.init(); //last 4 characters rule.setHashSlice("-4:0"); idVal = "aaaabbb0000"; Assert.assertEquals(true, 0 == rule.calculate(idVal)); idVal = "aaaabbb2359"; Assert.assertEquals(true, 0 == rule.calculate(idVal)); } }
private AbstractPartitionAlgorithm createFunction(String name, String clazz) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException { String lowerClass = clazz.toLowerCase(); switch (lowerClass) { case "hash": return new PartitionByLong(); case "stringhash": return new PartitionByString(); case "enum": return new PartitionByFileMap(); case "jumpstringhash": return new PartitionByJumpConsistentHash(); case "numberrange": return new AutoPartitionByLong(); case "patternrange": return new PartitionByPattern(); case "date": return new PartitionByDate(); default: Class<?> clz = Class.forName(clazz); //all function must be extend from AbstractPartitionAlgorithm if (!AbstractPartitionAlgorithm.class.isAssignableFrom(clz)) { throw new IllegalArgumentException("rule function must implements " + AbstractPartitionAlgorithm.class.getName() + ", name=" + name); } return (AbstractPartitionAlgorithm) clz.newInstance(); } }
public void setPartitionCount(String partitionCount) { this.count = toIntArray(partitionCount); propertiesMap.put("partitionCount", partitionCount); }