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 6c8eadb..6088ef5 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 @@ -578,7 +578,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. if (top) { 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 22bdccb..d08f7b2 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 @@ -134,8 +134,17 @@ public abstract class RegionSplitPolicy extends Configured { * to decide, whether to skip the the StoreFile range check or not. * @return whether to skip the StoreFile range check or not */ + @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(); + } } 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 9a7b6e6..73d4622 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 @@ -1273,6 +1273,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 regions = awaitTableRegions(tableName); @@ -1280,6 +1281,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.flush(true); @@ -1287,8 +1289,13 @@ public class TestSplitTransactionOnCluster { Collection 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); @@ -1709,8 +1716,12 @@ public class TestSplitTransactionOnCluster { } @Override - public boolean skipStoreFileRangeCheck() { - return true; + public boolean skipStoreFileRangeCheck(String familyName) { + if(familyName.startsWith("i_")) { + return true; + } else { + return false; + } } } }