You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2021/03/15 21:13:02 UTC

[hbase] branch master updated: HBASE-25660 Print split policy in use on Region open (as well as split policy vitals) (#3044)

This is an automated email from the ASF dual-hosted git repository.

stack pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 630f47e   HBASE-25660 Print split policy in use on Region open (as well as split policy vitals) (#3044)
630f47e is described below

commit 630f47e4ec72d3f540abd6a7c61456d8e3250178
Author: Michael Stack <sa...@users.noreply.github.com>
AuthorDate: Mon Mar 15 14:10:37 2021 -0700

     HBASE-25660 Print split policy in use on Region open (as well as split policy vitals) (#3044)
    
    Add a toString to all split policy implementations listing name and
     vitals. Use this toString in the Region open message. Ditto for flush
     policy for the Region.
    
     Signed-off-by: Huaxiang Sun<hu...@apache.org>
---
 .../hbase/regionserver/BusyRegionSplitPolicy.java   |  8 +++++++-
 .../regionserver/ConstantSizeRegionSplitPolicy.java | 21 ++++++++++++---------
 .../DelimitedKeyPrefixRegionSplitPolicy.java        |  6 ++++++
 .../hbase/regionserver/FlushAllStoresPolicy.java    |  7 +++++--
 .../hbase/regionserver/FlushLargeStoresPolicy.java  |  5 +++++
 .../apache/hadoop/hbase/regionserver/HRegion.java   |  3 ++-
 .../IncreasingToUpperBoundRegionSplitPolicy.java    |  6 ++++++
 .../regionserver/KeyPrefixRegionSplitPolicy.java    |  6 ++++++
 .../hbase/regionserver/SteppingSplitPolicy.java     |  7 +++++--
 9 files changed, 54 insertions(+), 15 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java
index d51d294..edfded6 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java
@@ -20,10 +20,10 @@ package org.apache.hadoop.hbase.regionserver;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
+import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 
 /**
  * This class represents a split policy which makes the split decision based
@@ -61,6 +61,12 @@ public class BusyRegionSplitPolicy extends IncreasingToUpperBoundRegionSplitPoli
   private float blockedRate;
 
   @Override
+  public String toString() {
+    return "BusyRegionSplitPolicy{" + "maxBlockedRequests=" + maxBlockedRequests + ", minAge="
+      + minAge + ", aggregationWindow=" + aggregationWindow + ", " + super.toString() + '}';
+  }
+
+  @Override
   protected void configureForRegion(final HRegion region) {
     super.configureForRegion(region);
     this.region = region;
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 1f22dc4..92b5ed8 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
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -17,14 +17,13 @@
  */
 package org.apache.hadoop.hbase.regionserver;
 
-import java.util.Random;
-
+import java.util.concurrent.ThreadLocalRandom;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hadoop.hbase.client.TableDescriptor;
 import org.apache.hadoop.hbase.procedure2.util.StringUtils;
+import org.apache.yetus.audience.InterfaceAudience;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,13 +40,17 @@ import org.slf4j.LoggerFactory;
 public class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
   private static final Logger LOG =
     LoggerFactory.getLogger(ConstantSizeRegionSplitPolicy.class);
-  private static final Random RANDOM = new Random();
-
   private long desiredMaxFileSize;
   private double jitterRate;
   protected boolean overallHRegionFiles;
 
   @Override
+  public String toString() {
+    return "ConstantSizeRegionSplitPolicy{" + "desiredMaxFileSize=" + desiredMaxFileSize
+      + ", jitterRate=" + jitterRate + '}';
+  }
+
+  @Override
   protected void configureForRegion(HRegion region) {
     super.configureForRegion(region);
     Configuration conf = getConf();
@@ -62,9 +65,9 @@ public class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
     this.overallHRegionFiles = conf.getBoolean(HConstants.OVERALL_HREGION_FILES,
       HConstants.DEFAULT_OVERALL_HREGION_FILES);
     double jitter = conf.getDouble("hbase.hregion.max.filesize.jitter", 0.25D);
-    this.jitterRate = (RANDOM.nextFloat() - 0.5D) * jitter;
+    this.jitterRate = (ThreadLocalRandom.current().nextFloat() - 0.5D) * jitter;
     long jitterValue = (long) (this.desiredMaxFileSize * this.jitterRate);
-    // make sure the long value won't overflow with jitter
+    // Default jitter is ~12% +/-. Make sure the long value won't overflow with jitter
     if (this.jitterRate > 0 && jitterValue > (Long.MAX_VALUE - this.desiredMaxFileSize)) {
       this.desiredMaxFileSize = Long.MAX_VALUE;
     } else {
@@ -100,7 +103,7 @@ public class ConstantSizeRegionSplitPolicy extends RegionSplitPolicy {
       }
       if (sumSize > sizeToCheck) {
         LOG.debug("ShouldSplit because region size is big enough "
-            + "size={}, sizeToCheck={}{}", StringUtils.humanSize(sumSize),
+            + "sumSize={}, sizeToCheck={}", StringUtils.humanSize(sumSize),
           StringUtils.humanSize(sizeToCheck));
         return true;
       }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java
index 8bafaf5..d6a3b7e 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java
@@ -48,6 +48,12 @@ public class DelimitedKeyPrefixRegionSplitPolicy extends IncreasingToUpperBoundR
   private byte[] delimiter = null;
 
   @Override
+  public String toString() {
+    return "DelimitedKeyPrefixRegionSplitPolicy{" + "delimiter=" + Bytes.toStringBinary(delimiter) +
+      ", " + super.toString() + '}';
+  }
+
+  @Override
   protected void configureForRegion(HRegion region) {
     super.configureForRegion(region);
     // read the prefix length from the table descriptor
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushAllStoresPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushAllStoresPolicy.java
index 97a04f0..712113c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushAllStoresPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushAllStoresPolicy.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -26,10 +26,13 @@ import org.apache.yetus.audience.InterfaceAudience;
  */
 @InterfaceAudience.Private
 public class FlushAllStoresPolicy extends FlushPolicy {
+  @Override
+  public String toString() {
+    return "FlushAllStoresPolicy";
+  }
 
   @Override
   public Collection<HStore> selectStoresToFlush() {
     return region.stores.values();
   }
-
 }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.java
index 4da1857..8e3c4af 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.java
@@ -43,6 +43,11 @@ public abstract class FlushLargeStoresPolicy extends FlushPolicy {
 
   protected long flushSizeLowerBound = -1;
 
+  @Override
+  public String toString() {
+    return "FlushLargeStoresPolicy{" + "flushSizeLowerBound=" + flushSizeLowerBound + '}';
+  }
+
   protected void setFlushSizeLowerBounds(HRegion region) {
     int familyNumber = region.getTableDescriptor().getColumnFamilyCount();
     // For multiple families, lower bound is the "average flush size" by default
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 57943b3..a07bb15 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -1091,7 +1091,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi
       }
     }
 
-    LOG.info("Opened {}; next sequenceid={}", this.getRegionInfo().getShortNameToLog(), nextSeqId);
+    LOG.info("Opened {}; next sequenceid={}; {}, {}",
+      this.getRegionInfo().getShortNameToLog(), nextSeqId, this.splitPolicy, this.flushPolicy);
 
     // A region can be reopened if failed a split; reset flags
     this.closing.set(false);
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java
index 72e8853..97f9851 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java
@@ -50,6 +50,12 @@ public class IncreasingToUpperBoundRegionSplitPolicy extends ConstantSizeRegionS
   protected long initialSize;
 
   @Override
+  public String toString() {
+    return "IncreasingToUpperBoundRegionSplitPolicy{" + "initialSize=" + initialSize +
+      ", " + super.toString() + '}';
+  }
+
+  @Override
   protected void configureForRegion(HRegion region) {
     super.configureForRegion(region);
     Configuration conf = getConf();
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java
index 660da57..29c7d11 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java
@@ -41,6 +41,12 @@ public class KeyPrefixRegionSplitPolicy extends IncreasingToUpperBoundRegionSpli
   private int prefixLength = 0;
 
   @Override
+  public String toString() {
+    return "KeyPrefixRegionSplitPolicy{" + "prefixLength=" + prefixLength + ", " +
+      super.toString() + '}';
+  }
+
+  @Override
   protected void configureForRegion(HRegion region) {
     super.configureForRegion(region);
     prefixLength = 0;
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java
index 84973db..8343259 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java
@@ -21,6 +21,11 @@ import org.apache.yetus.audience.InterfaceAudience;
 
 @InterfaceAudience.Private
 public class SteppingSplitPolicy extends IncreasingToUpperBoundRegionSplitPolicy {
+  @Override
+  public String toString() {
+    return "SteppingSplitPolicysuper{" + super.toString() + "}";
+  }
+
   /**
    * @return flushSize * 2 if there's exactly one region of the table in question
    * found on this regionserver. Otherwise max file size.
@@ -31,6 +36,4 @@ public class SteppingSplitPolicy extends IncreasingToUpperBoundRegionSplitPolicy
   protected long getSizeToCheck(final int tableRegionsCount) {
     return tableRegionsCount == 1  ? this.initialSize : getDesiredMaxFileSize();
   }
-
-
 }