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:47 UTC

svn commit: r1495746 - in /hbase/branches/0.95/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:46 2013
New Revision: 1495746

URL: http://svn.apache.org/r1495746
Log:
HBASE-8787 Merged region endkey is incorrect if one region has null endkey

Modified:
    hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java
    hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java

Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java?rev=1495746&r1=1495745&r2=1495746&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java Sat Jun 22 15:39:46 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/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java?rev=1495746&r1=1495745&r2=1495746&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java (original)
+++ hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransaction.java Sat Jun 22 15:39:46 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.
    */