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 014ec2c..c7e51ff 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 @@ -576,10 +576,10 @@ public class HRegionFileSystem { * @throws IOException */ Path splitStoreFile(final HRegionInfo hri, final String familyName, final StoreFile f, - final byte[] splitRow, final boolean top, RegionSplitPolicy splitPolicy) + final byte[] splitRow, final boolean top, final boolean skipStoreFileRangeCheck) throws IOException { - if (splitPolicy == null || !splitPolicy.skipStoreFileRangeCheck()) { + if (!skipStoreFileRangeCheck) { // 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/SplitTransaction.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java index a21c19d..28a8556 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransaction.java @@ -20,10 +20,12 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; import java.util.List; +import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseInterfaceAudience; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.classification.InterfaceStability; +import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.PairOfSameType; /** @@ -232,4 +234,16 @@ public interface SplitTransaction { * @return region server services */ RegionServerServices getRegionServerServices(); + + /** + * @param family family name. + * @param sf store file to split. + * @param skipStoreFileRangeCheck whether to skip the StoreFile range check or not before creating + * reference files. + * @return pair of reference files after split. + * @throws IOException + */ + Pair splitStoreFile(final byte[] family, final StoreFile sf, + boolean skipStoreFileRangeCheck) throws IOException; + } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.java index 8695c77..43ea336 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.java @@ -630,16 +630,17 @@ public class SplitTransactionImpl implements SplitTransaction { return new Pair(created_a, created_b); } - private Pair splitStoreFile(final byte[] family, final StoreFile sf) - throws IOException { + @Override + public Pair splitStoreFile(final byte[] family, final StoreFile sf, + boolean skipStoreFileRangeCheck) throws IOException { HRegionFileSystem fs = this.parent.getRegionFileSystem(); String familyName = Bytes.toString(family); Path path_a = fs.splitStoreFile(this.hri_a, familyName, sf, this.splitrow, false, - this.parent.getSplitPolicy()); + skipStoreFileRangeCheck); Path path_b = fs.splitStoreFile(this.hri_b, familyName, sf, this.splitrow, true, - this.parent.getSplitPolicy()); + skipStoreFileRangeCheck); return new Pair(path_a, path_b); } @@ -662,7 +663,7 @@ public class SplitTransactionImpl implements SplitTransaction { } public Pair call() throws IOException { - return splitStoreFile(family, sf); + return splitStoreFile(family, sf, parent.getSplitPolicy().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 66f8cbc..5f153e9 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 @@ -1063,8 +1063,10 @@ 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().skipStoreFileRangeCheck()); assertNotNull(referencePath); } finally { TESTING_UTIL.deleteTable(tableName);