From b3ce0c747803320563bddf9a33a70bc3e8503287 Mon Sep 17 00:00:00 2001 From: meiyi Date: Tue, 11 Dec 2018 14:56:04 +0800 Subject: [PATCH] HBASE-21578 Fix wrong throttling exception for capacity unit --- .../hbase/quotas/RpcThrottlingException.java | 23 +++++++++++++++++++--- .../hadoop/hbase/quotas/TimeBasedLimiter.java | 8 ++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/quotas/RpcThrottlingException.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/quotas/RpcThrottlingException.java index 9baf91f..72c29d8 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/quotas/RpcThrottlingException.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/quotas/RpcThrottlingException.java @@ -29,13 +29,15 @@ public class RpcThrottlingException extends HBaseIOException { @InterfaceAudience.Public public enum Type { NumRequestsExceeded, RequestSizeExceeded, NumReadRequestsExceeded, NumWriteRequestsExceeded, - WriteSizeExceeded, ReadSizeExceeded, + WriteSizeExceeded, ReadSizeExceeded, RequestCapacityUnitExceeded, ReadCapacityUnitExceeded, + WriteCapacityUnitExceeded } private static final String[] MSG_TYPE = new String[] { "number of requests exceeded", "request size limit exceeded", - "number of read requests exceeded", "number of write requests exceeded", - "write size limit exceeded", "read size limit exceeded", }; + "number of read requests exceeded", "number of write requests exceeded", + "write size limit exceeded", "read size limit exceeded", "request capacity unit exceeded", + "read capacity unit exceeded", "write capacity unit exceeded" }; private static final String MSG_WAIT = " - wait "; @@ -100,6 +102,21 @@ public class RpcThrottlingException extends HBaseIOException { throwThrottlingException(Type.ReadSizeExceeded, waitInterval); } + public static void throwRequestCapacityUnitExceeded(final long waitInterval) + throws RpcThrottlingException { + throwThrottlingException(Type.RequestCapacityUnitExceeded, waitInterval); + } + + public static void throwReadCapacityUnitExceeded(final long waitInterval) + throws RpcThrottlingException { + throwThrottlingException(Type.ReadCapacityUnitExceeded, waitInterval); + } + + public static void throwWriteCapacityUnitExceeded(final long waitInterval) + throws RpcThrottlingException { + throwThrottlingException(Type.WriteCapacityUnitExceeded, waitInterval); + } + private static void throwThrottlingException(final Type type, final long waitInterval) throws RpcThrottlingException { String msg = MSG_TYPE[type.ordinal()] + MSG_WAIT + StringUtils.formatTime(waitInterval); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java index 771eed1..6b5349f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java @@ -148,7 +148,7 @@ public class TimeBasedLimiter implements QuotaLimiter { reqSizeLimiter.waitInterval(estimateWriteSize + estimateReadSize)); } if (!reqCapacityUnitLimiter.canExecute(estimateWriteCapacityUnit + estimateReadCapacityUnit)) { - RpcThrottlingException.throwRequestSizeExceeded( + RpcThrottlingException.throwRequestCapacityUnitExceeded( reqCapacityUnitLimiter.waitInterval(estimateWriteCapacityUnit + estimateReadCapacityUnit)); } @@ -161,7 +161,7 @@ public class TimeBasedLimiter implements QuotaLimiter { writeSizeLimiter.waitInterval(estimateWriteSize)); } if (!writeCapacityUnitLimiter.canExecute(estimateWriteCapacityUnit)) { - RpcThrottlingException.throwWriteSizeExceeded( + RpcThrottlingException.throwWriteCapacityUnitExceeded( writeCapacityUnitLimiter.waitInterval(estimateWriteCapacityUnit)); } } @@ -175,8 +175,8 @@ public class TimeBasedLimiter implements QuotaLimiter { readSizeLimiter.waitInterval(estimateReadSize)); } if (!readCapacityUnitLimiter.canExecute(estimateReadCapacityUnit)) { - RpcThrottlingException - .throwWriteSizeExceeded(readCapacityUnitLimiter.waitInterval(estimateReadCapacityUnit)); + RpcThrottlingException.throwReadCapacityUnitExceeded( + readCapacityUnitLimiter.waitInterval(estimateReadCapacityUnit)); } } } -- 2.7.4