You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zh...@apache.org on 2021/12/18 15:22:44 UTC

[hbase] branch master updated: HBASE-26580 The message of StoreTooBusy is confused (#3949)

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

zhangduo 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 d399799  HBASE-26580 The message of StoreTooBusy is confused (#3949)
d399799 is described below

commit d399799c29fa4d485e664508c4f5f671d3140763
Author: zhengzhuobinzzb <zh...@gmail.com>
AuthorDate: Sat Dec 18 23:22:14 2021 +0800

    HBASE-26580 The message of StoreTooBusy is confused (#3949)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
    Reviewed-by: Bryan Beaudreault <bb...@hubspot.com>
---
 .../regionserver/throttle/StoreHotnessProtector.java  | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.java
index b907aa6..7cb3a24 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.java
@@ -109,6 +109,8 @@ public class StoreHotnessProtector {
     }
 
     String tooBusyStore = null;
+    boolean aboveParallelThreadLimit = false;
+    boolean aboveParallelPrePutLimit = false;
 
     for (Map.Entry<byte[], List<Cell>> e : familyMaps.entrySet()) {
       Store store = this.region.getStore(e.getKey());
@@ -123,12 +125,16 @@ public class StoreHotnessProtector {
         int preparePutCount = preparePutToStoreMap
             .computeIfAbsent(e.getKey(), key -> new AtomicInteger())
             .incrementAndGet();
-        if (store.getCurrentParallelPutCount() > this.parallelPutToStoreThreadLimit
-            || preparePutCount > this.parallelPreparePutToStoreThreadLimit) {
+        boolean storeAboveThread =
+          store.getCurrentParallelPutCount() > this.parallelPutToStoreThreadLimit;
+        boolean storeAbovePrePut = preparePutCount > this.parallelPreparePutToStoreThreadLimit;
+        if (storeAboveThread || storeAbovePrePut) {
           tooBusyStore = (tooBusyStore == null ?
               store.getColumnFamilyName() :
               tooBusyStore + "," + store.getColumnFamilyName());
         }
+        aboveParallelThreadLimit |= storeAboveThread;
+        aboveParallelPrePutLimit |= storeAbovePrePut;
 
         if (LOG.isTraceEnabled()) {
           LOG.trace(store.getColumnFamilyName() + ": preparePutCount=" + preparePutCount
@@ -137,10 +143,15 @@ public class StoreHotnessProtector {
       }
     }
 
-    if (tooBusyStore != null) {
+    if (aboveParallelThreadLimit || aboveParallelPrePutLimit) {
       String msg =
           "StoreTooBusy," + this.region.getRegionInfo().getRegionNameAsString() + ":" + tooBusyStore
-              + " Above parallelPutToStoreThreadLimit(" + this.parallelPutToStoreThreadLimit + ")";
+              + " Above "
+              + (aboveParallelThreadLimit ? "parallelPutToStoreThreadLimit("
+              + this.parallelPutToStoreThreadLimit + ")" : "")
+              + (aboveParallelThreadLimit && aboveParallelPrePutLimit ? " or " : "")
+              + (aboveParallelPrePutLimit ? "parallelPreparePutToStoreThreadLimit("
+              + this.parallelPreparePutToStoreThreadLimit + ")" : "");
       LOG.trace(msg);
       throw new RegionTooBusyException(msg);
     }