You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2015/04/09 22:59:16 UTC
[11/50] [abbrv] hbase git commit: HBASE-13412 Region split decisions
should have jitter
HBASE-13412 Region split decisions should have jitter
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b6756b39
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b6756b39
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b6756b39
Branch: refs/heads/hbase-12439
Commit: b6756b39c2ff5675f96a6e82dc4d68ec437f01c4
Parents: 9ac3c5f
Author: Elliott Clark <ec...@apache.org>
Authored: Mon Apr 6 10:22:32 2015 -0700
Committer: Elliott Clark <ec...@apache.org>
Committed: Tue Apr 7 17:20:19 2015 -0700
----------------------------------------------------------------------
.../ConstantSizeRegionSplitPolicy.java | 6 ++++++
.../regionserver/TestRegionSplitPolicy.java | 19 +++++++++++++------
2 files changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/b6756b39/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java
index 2459ae6..66ef712 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java
@@ -23,6 +23,8 @@ import org.apache.hadoop.hbase.HBaseInterfaceAudience;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HTableDescriptor;
+import java.util.Random;
+
/**
* A {@link RegionSplitPolicy} implementation which splits a region
* as soon as any of its store files exceeds a maximum configurable
@@ -34,6 +36,8 @@ import org.apache.hadoop.hbase.HTableDescriptor;
*/
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)
public class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
+ private static final Random RANDOM = new Random();
+
private long desiredMaxFileSize;
@Override
@@ -48,6 +52,8 @@ public class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
this.desiredMaxFileSize = conf.getLong(HConstants.HREGION_MAX_FILESIZE,
HConstants.DEFAULT_MAX_FILE_SIZE);
}
+ double jitter = conf.getDouble("hbase.hregion.max.filesize.jitter", 0.25D);
+ this.desiredMaxFileSize += (long)(desiredMaxFileSize * (RANDOM.nextFloat() - 0.5D) * jitter);
}
@Override
http://git-wip-us.apache.org/repos/asf/hbase/blob/b6756b39/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java
index 6a234bb..9cb2b44 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java
@@ -110,14 +110,21 @@ public class TestRegionSplitPolicy {
// now be no longer be splittable since split size has gone up.
regions.add(mockRegion);
assertFalse(policy.shouldSplit());
- // Quadruple (2 squared) the store size and make sure its just over; verify it'll split
- Mockito.doReturn((flushSize * 2 * 2 * 2) + 1).when(mockStore).getSize();
+ // make sure its just over; verify it'll split
+ Mockito.doReturn((long)(maxSplitSize * 1.025 + 1)).when(mockStore).getSize();
assertTrue(policy.shouldSplit());
// Finally assert that even if loads of regions, we'll split at max size
- assertEquals(maxSplitSize, policy.getSizeToCheck(1000));
+ assertWithinJitter(maxSplitSize, policy.getSizeToCheck(1000));
// Assert same is true if count of regions is zero.
- assertEquals(maxSplitSize, policy.getSizeToCheck(0));
+ assertWithinJitter(maxSplitSize, policy.getSizeToCheck(0));
+ }
+
+ private void assertWithinJitter(long maxSplitSize, long sizeToCheck) {
+ assertTrue("Size greater than lower bound of jitter",
+ (long)(maxSplitSize * 0.75) <= sizeToCheck);
+ assertTrue("Size less than upper bound of jitter",
+ (long)(maxSplitSize * 1.25) >= sizeToCheck);
}
@Test
@@ -129,13 +136,13 @@ public class TestRegionSplitPolicy {
ConstantSizeRegionSplitPolicy policy =
(ConstantSizeRegionSplitPolicy)RegionSplitPolicy.create(
mockRegion, conf);
- assertEquals(1234L, policy.getDesiredMaxFileSize());
+ assertWithinJitter(1234L, policy.getDesiredMaxFileSize());
// If specified in HTD, should use that
htd.setMaxFileSize(9999L);
policy = (ConstantSizeRegionSplitPolicy)RegionSplitPolicy.create(
mockRegion, conf);
- assertEquals(9999L, policy.getDesiredMaxFileSize());
+ assertWithinJitter(9999L, policy.getDesiredMaxFileSize());
}
/**