HBASE-26580 The message of StoreTooBusy is confused (#3949)
Signed-off-by: Duo Zhang <zhangduo@apache.org> Reviewed-by: Bryan Beaudreault <bbeaudreault@hubspot.com>
This commit is contained in:
parent
ef3854225a
commit
e28ccf092b
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue