diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSource.java index 6d72d85289aa..2407a7337015 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSource.java @@ -43,6 +43,7 @@ public interface ExceptionTrackingSource extends BaseSource { String EXCEPTIONS_CALL_QUEUE_TOO_BIG_DESC = "Call queue is full"; String EXCEPTIONS_QUOTA_EXCEEDED = "exceptions.quotaExceeded"; String EXCEPTIONS_RPC_THROTTLING = "exceptions.rpcThrottling"; + String EXCEPTIONS_CALL_DROPPED = "exceptions.callDropped"; void exception(); @@ -60,4 +61,5 @@ public interface ExceptionTrackingSource extends BaseSource { void callQueueTooBigException(); void quotaExceededException(); void rpcThrottlingException(); + void callDroppedException(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSourceImpl.java index 23dafad02a2e..d6dabadd8e87 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/metrics/ExceptionTrackingSourceImpl.java @@ -40,6 +40,7 @@ public class ExceptionTrackingSourceImpl extends BaseSourceImpl protected MutableFastCounter exceptionsCallQueueTooBig; protected MutableFastCounter exceptionsQuotaExceeded; protected MutableFastCounter exceptionsRpcThrottling; + protected MutableFastCounter exceptionsCallDropped; public ExceptionTrackingSourceImpl(String metricsName, String metricsDescription, String metricsContext, String metricsJmxContext) { @@ -72,6 +73,8 @@ public void init() { .newCounter(EXCEPTIONS_QUOTA_EXCEEDED, EXCEPTIONS_TYPE_DESC, 0L); this.exceptionsRpcThrottling = this.getMetricsRegistry() .newCounter(EXCEPTIONS_RPC_THROTTLING, EXCEPTIONS_TYPE_DESC, 0L); + this.exceptionsCallDropped = this.getMetricsRegistry() + .newCounter(EXCEPTIONS_CALL_DROPPED, EXCEPTIONS_TYPE_DESC, 0L); } @Override @@ -133,4 +136,9 @@ public void quotaExceededException() { public void rpcThrottlingException() { exceptionsRpcThrottling.incr(); } + + @Override + public void callDroppedException() { + exceptionsCallDropped.incr(); + } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java index 11773338869a..d79c8eb4f66a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.ipc; +import org.apache.hadoop.hbase.CallDroppedException; import org.apache.hadoop.hbase.CallQueueTooBigException; import org.apache.hadoop.hbase.MultiActionResultTooLarge; import org.apache.hadoop.hbase.NotServingRegionException; @@ -126,6 +127,8 @@ public void exception(Throwable throwable) { source.quotaExceededException(); } else if (throwable instanceof RpcThrottlingException) { source.rpcThrottlingException(); + } else if (throwable instanceof CallDroppedException) { + source.callDroppedException(); } else if (LOG.isDebugEnabled()) { LOG.debug("Unknown exception type", throwable); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestRpcMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestRpcMetrics.java index 2f99d2b65929..c50414d01ada 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestRpcMetrics.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestRpcMetrics.java @@ -19,6 +19,7 @@ import static org.junit.Assert.*; +import org.apache.hadoop.hbase.CallDroppedException; import org.apache.hadoop.hbase.CompatibilityFactory; import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.NotServingRegionException; @@ -143,11 +144,13 @@ public void testSourceMethods() { mrpc.exception(new RegionTooBusyException("Some region")); mrpc.exception(new OutOfOrderScannerNextException()); mrpc.exception(new NotServingRegionException()); + mrpc.exception(new CallDroppedException()); HELPER.assertCounter("exceptions.RegionMovedException", 1, serverSource); HELPER.assertCounter("exceptions.RegionTooBusyException", 1, serverSource); HELPER.assertCounter("exceptions.OutOfOrderScannerNextException", 1, serverSource); HELPER.assertCounter("exceptions.NotServingRegionException", 1, serverSource); - HELPER.assertCounter("exceptions", 5, serverSource); + HELPER.assertCounter("exceptions.callDropped", 1, serverSource); + HELPER.assertCounter("exceptions", 6, serverSource); } @Test diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftMetrics.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftMetrics.java index e362817a97dd..cf290bcb7085 100644 --- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftMetrics.java +++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift/ThriftMetrics.java @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.thrift; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.hbase.CallDroppedException; import org.apache.hadoop.hbase.CallQueueTooBigException; import org.apache.hadoop.hbase.CompatibilitySingletonFactory; import org.apache.hadoop.hbase.MultiActionResultTooLarge; @@ -152,6 +153,8 @@ public void exception(Throwable rawThrowable) { source.quotaExceededException(); } else if (throwable instanceof RpcThrottlingException) { source.rpcThrottlingException(); + } else if (throwable instanceof CallDroppedException) { + source.callDroppedException(); } else if (LOG.isDebugEnabled()) { LOG.debug("Unknown exception type", throwable); } diff --git a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java index 98f190b27c51..683884d0efdf 100644 --- a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java +++ b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift/ErrorThrowingGetObserver.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Optional; +import org.apache.hadoop.hbase.CallDroppedException; import org.apache.hadoop.hbase.CallQueueTooBigException; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.DoNotRetryIOException; @@ -85,6 +86,8 @@ public void preGetOp(ObserverContext e, throw new QuotaExceededException("Failing for test"); case RPC_THROTTLING: throw new RpcThrottlingException("Failing for test"); + case CALL_DROPPED: + throw new CallDroppedException("Failing for test"); default: throw new DoNotRetryIOException("Failing for test"); } @@ -102,7 +105,8 @@ public enum ErrorType { REGION_TOO_BUSY(ExceptionTrackingSource.EXCEPTIONS_BUSY_NAME), OUT_OF_ORDER_SCANNER_NEXT(ExceptionTrackingSource.EXCEPTIONS_OOO_NAME), QUOTA_EXCEEDED(ExceptionTrackingSource.EXCEPTIONS_QUOTA_EXCEEDED), - RPC_THROTTLING(ExceptionTrackingSource.EXCEPTIONS_RPC_THROTTLING); + RPC_THROTTLING(ExceptionTrackingSource.EXCEPTIONS_RPC_THROTTLING), + CALL_DROPPED(ExceptionTrackingSource.EXCEPTIONS_CALL_DROPPED); private final String metricName;