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 4836dc8..8faf8e8 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 @@ -274,8 +274,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi final LongAdder writeRequestsCount = new LongAdder(); // Number of requests blocked by memstore size. - private final LongAdder blockedRequestsCount = new LongAdder(); - + private final AtomicLong blockedRequestsCount = new AtomicLong(0L); + private int blockedMsgInterval; + static final int DEFAULT_BLOCKED_MSG_INTERVAL = 100; // Compaction LongAdders final AtomicLong compactionsFinished = new AtomicLong(0L); final AtomicLong compactionsFailed = new AtomicLong(0L); @@ -808,6 +809,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi } else { this.regionUnassigner = null; } + + this.blockedMsgInterval = conf.getInt("hbase.hregion.blocked.msginterval", + DEFAULT_BLOCKED_MSG_INTERVAL); } void setHTableSpecificConf() { @@ -1284,7 +1288,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi @Override public long getBlockedRequestsCount() { - return blockedRequestsCount.sum(); + return blockedRequestsCount.get(); } @Override @@ -3867,15 +3871,20 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi if (this.getRegionInfo().isMetaRegion()) return; if (this.memstoreDataSize.get() > this.blockingMemStoreSize) { - blockedRequestsCount.increment(); + long tmpBlockedRequestsCount = blockedRequestsCount.incrementAndGet(); requestFlush(); - throw new RegionTooBusyException("Above memstore limit, " + - "regionName=" + (this.getRegionInfo() == null ? "unknown" : - this.getRegionInfo().getRegionNameAsString()) + - ", server=" + (this.getRegionServerServices() == null ? "unknown" : - this.getRegionServerServices().getServerName()) + - ", memstoreSize=" + memstoreDataSize.get() + - ", blockingMemStoreSize=" + blockingMemStoreSize); + String msg = "Above memstore limit, " + + "regionName=" + (this.getRegionInfo() == null ? "unknown" : + this.getRegionInfo().getRegionNameAsString()) + + ", server=" + (this.getRegionServerServices() == null ? "unknown" : + this.getRegionServerServices().getServerName()) + + ", memstoreSize=" + memstoreDataSize.get() + + ", blockingMemStoreSize=" + blockingMemStoreSize; + if (tmpBlockedRequestsCount == 1 || + tmpBlockedRequestsCount % blockedMsgInterval == 0) { + LOG.warn(msg); + } + throw new RegionTooBusyException(msg); } }