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:37:23 UTC
[hbase] 02/02: 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 branch-2.4
in repository https://gitbox.apache.org/repos/asf/hbase.git
commit 9c01d043541a8cff7eedfdfd789bbcf0fef2ae4a
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>
---
.../throttle/StoreHotnessProtector.java | 33 +++++++++++++---------
1 file changed, 19 insertions(+), 14 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 f75fb3c..4cf0b59 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
@@ -108,6 +108,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());
@@ -119,19 +121,19 @@ public class StoreHotnessProtector {
//we need to try to add #preparePutCount at first because preparePutToStoreMap will be
//cleared when changing the configuration.
- preparePutToStoreMap.putIfAbsent(e.getKey(), new AtomicInteger());
- AtomicInteger preparePutCounter = preparePutToStoreMap.get(e.getKey());
- if (preparePutCounter == null) {
- preparePutCounter = new AtomicInteger();
- preparePutToStoreMap.putIfAbsent(e.getKey(), preparePutCounter);
- }
- int preparePutCount = preparePutCounter.incrementAndGet();
- if (store.getCurrentParallelPutCount() > this.parallelPutToStoreThreadLimit
- || preparePutCount > this.parallelPreparePutToStoreThreadLimit) {
+ int preparePutCount = preparePutToStoreMap
+ .computeIfAbsent(e.getKey(), key -> new AtomicInteger())
+ .incrementAndGet();
+ 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
@@ -140,13 +142,16 @@ public class StoreHotnessProtector {
}
}
- if (tooBusyStore != null) {
+ if (aboveParallelThreadLimit || aboveParallelPrePutLimit) {
String msg =
"StoreTooBusy," + this.region.getRegionInfo().getRegionNameAsString() + ":" + tooBusyStore
- + " Above parallelPutToStoreThreadLimit(" + this.parallelPutToStoreThreadLimit + ")";
- if (LOG.isTraceEnabled()) {
- LOG.trace(msg);
- }
+ + " Above "
+ + (aboveParallelThreadLimit ? "parallelPutToStoreThreadLimit("
+ + this.parallelPutToStoreThreadLimit + ")" : "")
+ + (aboveParallelThreadLimit && aboveParallelPrePutLimit ? " or " : "")
+ + (aboveParallelPrePutLimit ? "parallelPreparePutToStoreThreadLimit("
+ + this.parallelPreparePutToStoreThreadLimit + ")" : "");
+ LOG.trace(msg);
throw new RegionTooBusyException(msg);
}
}