Repository: hbase
Updated Branches:
  refs/heads/0.98 368329dec -> 35e7870a4


HBASE-13431 Allow to skip store file range check based on column family while 
creating reference files in HRegionFileSystem#splitStoreFile(Rajeshbabu)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/fea9003e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/fea9003e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/fea9003e

Branch: refs/heads/0.98
Commit: fea9003e2a0204cdc0740d7dcc35dda53c30b159
Parents: 368329d
Author: Rajeshbabu Chintaguntla <[email protected]>
Authored: Wed Apr 29 09:40:24 2015 +0530
Committer: Andrew Purtell <[email protected]>
Committed: Mon May 11 16:12:34 2015 -0700

----------------------------------------------------------------------
 .../hbase/regionserver/HRegionFileSystem.java    |  2 +-
 .../hbase/regionserver/RegionSplitPolicy.java    | 10 ++++++++++
 .../TestSplitTransactionOnCluster.java           | 19 +++++++++++++++----
 3 files changed, 26 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/fea9003e/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
index e1412c0..f743a01 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java
@@ -567,7 +567,7 @@ public class HRegionFileSystem {
   Path splitStoreFile(final HRegionInfo hri, final String familyName, final 
StoreFile f,
       final byte[] splitRow, final boolean top, RegionSplitPolicy splitPolicy) 
throws IOException {
 
-    if (splitPolicy == null || !splitPolicy.skipStoreFileRangeCheck()) {
+    if (splitPolicy == null || 
!splitPolicy.skipStoreFileRangeCheck(familyName)) {
       // Check whether the split row lies in the range of the store file
       // If it is outside the range, return directly.
       try {

http://git-wip-us.apache.org/repos/asf/hbase/blob/fea9003e/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java
index 77611da..921d124 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java
@@ -133,9 +133,19 @@ public abstract class RegionSplitPolicy extends Configured 
{
    * the split reference even when the split row not lies in the range. This 
method can be used
    * to decide, whether to skip the the StoreFile range check or not.
    * @return whether to skip the StoreFile range check or not
+   * @deprecated Use {@link #skipStoreFileRangeCheck(String)}} instead
    */
+  @Deprecated
   protected boolean skipStoreFileRangeCheck() {
     return false;
   }
 
+  /**
+   * See {@link #skipStoreFileRangeCheck()} javadoc.
+   * @param familyName
+   * @return whether to skip the StoreFile range check or not
+   */
+  protected boolean skipStoreFileRangeCheck(String familyName) {
+    return skipStoreFileRangeCheck();
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/fea9003e/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
index 5254b77..999f188 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
@@ -1111,6 +1111,7 @@ public class TestSplitTransactionOnCluster {
     try {
       HTableDescriptor htd = new HTableDescriptor(tableName);
       htd.addFamily(new HColumnDescriptor("f"));
+      htd.addFamily(new HColumnDescriptor("i_f"));
       htd.setRegionSplitPolicyClassName(CustomSplitPolicy.class.getName());
       admin.createTable(htd);
       List<HRegion> regions = awaitTableRegions(tableName.toBytes());
@@ -1118,6 +1119,7 @@ public class TestSplitTransactionOnCluster {
       for(int i = 3;i<9;i++) {
         Put p = new Put(Bytes.toBytes("row"+i));
         p.add(Bytes.toBytes("f"), Bytes.toBytes("q"), 
Bytes.toBytes("value"+i));
+        p.add(Bytes.toBytes("i_f"), Bytes.toBytes("q"), 
Bytes.toBytes("value"+i));
         region.put(p);
       }
       region.flushcache();
@@ -1125,8 +1127,13 @@ public class TestSplitTransactionOnCluster {
       Collection<StoreFile> storefiles = store.getStorefiles();
       assertEquals(storefiles.size(), 1);
       assertFalse(region.hasReferences());
-      Path referencePath = 
region.getRegionFileSystem().splitStoreFile(region.getRegionInfo(), "f",
-        storefiles.iterator().next(), Bytes.toBytes("row1"), false, 
region.getSplitPolicy());
+      Path referencePath =
+          region.getRegionFileSystem().splitStoreFile(region.getRegionInfo(), 
"f",
+            storefiles.iterator().next(), Bytes.toBytes("row1"), false, 
region.getSplitPolicy());
+      assertNull(referencePath);
+      referencePath =
+          region.getRegionFileSystem().splitStoreFile(region.getRegionInfo(), 
"i_f",
+            storefiles.iterator().next(), Bytes.toBytes("row1"), false, 
region.getSplitPolicy());
       assertNotNull(referencePath);
     } finally {
       TESTING_UTIL.deleteTable(tableName);
@@ -1518,8 +1525,12 @@ public class TestSplitTransactionOnCluster {
     }
 
     @Override
-    public boolean skipStoreFileRangeCheck() {
-      return true;
+    public boolean skipStoreFileRangeCheck(String familyName) {
+      if(familyName.startsWith("i_")) {
+        return true;
+      } else {
+        return false;
+      }
     }
   }
 }

Reply via email to