You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2013/06/22 17:39:10 UTC
svn commit: r1495745 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java
test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java
Author: jxiang
Date: Sat Jun 22 15:39:09 2013
New Revision: 1495745
URL: http://svn.apache.org/r1495745
Log:
HBASE-8787 Merged region endkey is incorrect if one region has null endkey
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java?rev=1495745&r1=1495744&r2=1495745&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java Sat Jun 22 15:39:09 2013
@@ -410,10 +410,9 @@ public class RegionMergeTransaction {
startKey = b.getStartKey();
}
// Choose the bigger as end key
- if (a.getComparator().matchingRows(a.getEndKey(), 0, a.getEndKey().length,
- HConstants.EMPTY_BYTE_ARRAY, 0, HConstants.EMPTY_BYTE_ARRAY.length)
- || a.getComparator().compareRows(a.getEndKey(), 0,
- a.getEndKey().length, b.getEndKey(), 0, b.getEndKey().length) > 0) {
+ if (Bytes.equals(a.getEndKey(), HConstants.EMPTY_BYTE_ARRAY)
+ || (!Bytes.equals(b.getEndKey(), HConstants.EMPTY_BYTE_ARRAY)
+ && Bytes.compareTo(a.getEndKey(), b.getEndKey()) > 0)) {
endKey = a.getEndKey();
} else {
endKey = b.getEndKey();
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java?rev=1495745&r1=1495744&r2=1495745&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java Sat Jun 22 15:39:09 2013
@@ -344,6 +344,43 @@ public class TestRegionMergeTransaction
assertTrue(TEST_UTIL.getTestFileSystem().exists(mergedRegionDir));
}
+ @Test
+ public void testMeregedRegionBoundary() {
+ byte[] tableName = Bytes.toBytes("testMeregedRegionBoundary");
+ byte[] a = Bytes.toBytes("a");
+ byte[] b = Bytes.toBytes("b");
+ byte[] z = Bytes.toBytes("z");
+ HRegionInfo r1 = new HRegionInfo(tableName);
+ HRegionInfo r2 = new HRegionInfo(tableName, a, z);
+ HRegionInfo m = RegionMergeTransaction.getMergedRegionInfo(r1, r2);
+ assertTrue(Bytes.equals(m.getStartKey(), r1.getStartKey())
+ && Bytes.equals(m.getEndKey(), r1.getEndKey()));
+
+ r1 = new HRegionInfo(tableName, null, a);
+ r2 = new HRegionInfo(tableName, a, z);
+ m = RegionMergeTransaction.getMergedRegionInfo(r1, r2);
+ assertTrue(Bytes.equals(m.getStartKey(), r1.getStartKey())
+ && Bytes.equals(m.getEndKey(), r2.getEndKey()));
+
+ r1 = new HRegionInfo(tableName, null, a);
+ r2 = new HRegionInfo(tableName, z, null);
+ m = RegionMergeTransaction.getMergedRegionInfo(r1, r2);
+ assertTrue(Bytes.equals(m.getStartKey(), r1.getStartKey())
+ && Bytes.equals(m.getEndKey(), r2.getEndKey()));
+
+ r1 = new HRegionInfo(tableName, a, z);
+ r2 = new HRegionInfo(tableName, z, null);
+ m = RegionMergeTransaction.getMergedRegionInfo(r1, r2);
+ assertTrue(Bytes.equals(m.getStartKey(), r1.getStartKey())
+ && Bytes.equals(m.getEndKey(), r2.getEndKey()));
+
+ r1 = new HRegionInfo(tableName, a, b);
+ r2 = new HRegionInfo(tableName, b, z);
+ m = RegionMergeTransaction.getMergedRegionInfo(r1, r2);
+ assertTrue(Bytes.equals(m.getStartKey(), r1.getStartKey())
+ && Bytes.equals(m.getEndKey(), r2.getEndKey()));
+ }
+
/**
* Exception used in this class only.
*/