diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java index fd78604..914fdf0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java @@ -63,11 +63,13 @@ import org.apache.hadoop.hbase.quotas.QuotaExceededException; import org.apache.hadoop.hbase.regionserver.HRegionFileSystem; import org.apache.hadoop.hbase.regionserver.HStore; import org.apache.hadoop.hbase.regionserver.HStoreFile; +import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy; import org.apache.hadoop.hbase.regionserver.StoreFileInfo; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.FSUtils; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.util.ReflectionUtils; import org.apache.hadoop.hbase.util.Threads; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; @@ -592,6 +594,10 @@ public class SplitTableRegionProcedure // Split each store file. final TableDescriptor htd = env.getMasterServices().getTableDescriptors().get(getTableName()); + RegionSplitPolicy splitPolicy = null; + if(htd.getRegionSplitPolicyClassName() != null) { + splitPolicy = ReflectionUtils.newInstance(RegionSplitPolicy.getSplitPolicyClass(htd, conf), conf); + } for (Map.Entry>e: files.entrySet()) { byte [] familyName = Bytes.toBytes(e.getKey()); final ColumnFamilyDescriptor hcd = htd.getColumnFamily(familyName); @@ -601,7 +607,7 @@ public class SplitTableRegionProcedure for (StoreFileInfo storeFileInfo: storeFiles) { StoreFileSplitter sfs = new StoreFileSplitter(regionFs, familyName, new HStoreFile(mfs.getFileSystem(), - storeFileInfo, conf, cacheConf, hcd.getBloomFilterType(), true)); + storeFileInfo, conf, cacheConf, hcd.getBloomFilterType(), true), splitPolicy); futures.add(threadPool.submit(sfs)); } } @@ -661,8 +667,8 @@ public class SplitTableRegionProcedure } } - private Pair splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) - throws IOException { + private Pair splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf, + RegionSplitPolicy splitPolicy) throws IOException { if (LOG.isDebugEnabled()) { LOG.debug("pid=" + getProcId() + " splitting started for store file: " + sf.getPath() + " for region: " + getParentRegion().getShortNameToLog()); @@ -671,9 +677,9 @@ public class SplitTableRegionProcedure final byte[] splitRow = getSplitRow(); final String familyName = Bytes.toString(family); final Path path_first = - regionFs.splitStoreFile(this.daughter_1_RI, familyName, sf, splitRow, false, null); + regionFs.splitStoreFile(this.daughter_1_RI, familyName, sf, splitRow, false, splitPolicy); final Path path_second = - regionFs.splitStoreFile(this.daughter_2_RI, familyName, sf, splitRow, true, null); + regionFs.splitStoreFile(this.daughter_2_RI, familyName, sf, splitRow, true, splitPolicy); if (LOG.isDebugEnabled()) { LOG.debug("pid=" + getProcId() + " splitting complete for store file: " + sf.getPath() + " for region: " + getParentRegion().getShortNameToLog()); @@ -689,22 +695,24 @@ public class SplitTableRegionProcedure private final HRegionFileSystem regionFs; private final byte[] family; private final HStoreFile sf; - + private final RegionSplitPolicy splitPolicy; /** * Constructor that takes what it needs to split * @param regionFs the file system * @param family Family that contains the store file * @param sf which file */ - public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) { + public StoreFileSplitter(HRegionFileSystem regionFs, byte[] family, HStoreFile sf, + RegionSplitPolicy splitPolicy) { this.regionFs = regionFs; this.sf = sf; this.family = family; + this.splitPolicy = splitPolicy; } @Override public Pair call() throws IOException { - return splitStoreFile(regionFs, family, sf); + return splitStoreFile(regionFs, family, sf, this.splitPolicy); } } 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 3155379..72c71a1 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 @@ -138,7 +138,6 @@ 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 * @param familyName - * @return whether to skip the StoreFile range check or not */ protected boolean skipStoreFileRangeCheck(String familyName) { return false;