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; + } } } }
