This is an automated email from the ASF dual-hosted git repository.
gxcheng pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new d1864ae HBASE-22980 HRegionPartioner getPartition() method
incorrectly partitions the regions of the table. (#590)
d1864ae is described below
commit d1864ae8af3d26c1eeb300299d77640a27398425
Author: Shardul Singh <[email protected]>
AuthorDate: Wed Nov 6 19:37:44 2019 +0530
HBASE-22980 HRegionPartioner getPartition() method incorrectly partitions
the regions of the table. (#590)
Signed-off-by: Michael Stack <[email protected]>
Signed-off-by: Guangxu Cheng <[email protected]>
---
.../hadoop/hbase/mapred/HRegionPartitioner.java | 2 +-
.../hadoop/hbase/mapreduce/HRegionPartitioner.java | 2 +-
.../hbase/mapreduce/TestHRegionPartitioner.java | 24 ++++++++++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git
a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapred/HRegionPartitioner.java
b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapred/HRegionPartitioner.java
index b0674bf..7806258 100644
---
a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapred/HRegionPartitioner.java
+++
b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapred/HRegionPartitioner.java
@@ -82,7 +82,7 @@ implements Partitioner<ImmutableBytesWritable, V2> {
}
for (int i = 0; i < this.startKeys.length; i++){
if (Bytes.compareTo(region, this.startKeys[i]) == 0 ){
- if (i >= numPartitions-1){
+ if (i >= numPartitions){
// cover if we have less reduces then regions.
return (Integer.toString(i).hashCode()
& Integer.MAX_VALUE) % numPartitions;
diff --git
a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java
b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java
index b48ecf0..12f2e86 100644
---
a/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java
+++
b/hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java
@@ -89,7 +89,7 @@ implements Configurable {
}
for (int i = 0; i < this.startKeys.length; i++){
if (Bytes.compareTo(region, this.startKeys[i]) == 0 ){
- if (i >= numPartitions-1){
+ if (i >= numPartitions){
// cover if we have less reduces then regions.
return (Integer.toString(i).hashCode()
& Integer.MAX_VALUE) % numPartitions;
diff --git
a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java
b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java
index 562a009..2095b87 100644
---
a/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java
+++
b/hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.MetaTableAccessor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.testclassification.MapReduceTests;
@@ -77,4 +78,27 @@ public class TestHRegionPartitioner {
assertEquals(1, partitioner.getPartition(writable, 10L, 3));
assertEquals(0, partitioner.getPartition(writable, 10L, 1));
}
+
+ @Test
+ public void testHRegionPartitionerMoreRegions() throws Exception {
+
+ byte[][] families = { Bytes.toBytes("familyA"), Bytes.toBytes("familyB") };
+
+ TableName tableName = TableName.valueOf(name.getMethodName());
+ UTIL.createTable(tableName, families, 1, Bytes.toBytes("aa"),
Bytes.toBytes("cc"), 5);
+
+ Configuration configuration = UTIL.getConfiguration();
+ int numberOfRegions = MetaTableAccessor.getRegionCount(configuration,
tableName);
+ assertEquals(5, numberOfRegions);
+
+ HRegionPartitioner<Long, Long> partitioner = new HRegionPartitioner<>();
+ configuration.set(TableOutputFormat.OUTPUT_TABLE, name.getMethodName());
+ partitioner.setConf(configuration);
+
+ // Get some rowKey for the lastRegion
+ ImmutableBytesWritable writable = new
ImmutableBytesWritable(Bytes.toBytes("df"));
+
+ // getPartition should return 4 since number of partition = number of
reduces.
+ assertEquals(4, partitioner.getPartition(writable, 10L, 5));
+ }
}