You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by pa...@apache.org on 2021/08/02 04:22:01 UTC
[hbase] branch branch-2 updated: HBASE-26154: Adds exception
metrics for QuotaExceededException and RpcThrottlingException (#3544)
This is an automated email from the ASF dual-hosted git repository.
pankajkumar pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push:
new aa3b07f HBASE-26154: Adds exception metrics for QuotaExceededException and RpcThrottlingException (#3544)
aa3b07f is described below
commit aa3b07f6bbbdc9cabd23f41ecd4a7c3ce7174565
Author: Bryan Beaudreault <bb...@hubspot.com>
AuthorDate: Mon Aug 2 00:21:34 2021 -0400
HBASE-26154: Adds exception metrics for QuotaExceededException and RpcThrottlingException (#3544)
Signed-off-by: Xiaolin Ha <ha...@apache.org>
Signed-off-by: Pankaj Kumar<pa...@apache.org>
---
.../hadoop/hbase/metrics/ExceptionTrackingSource.java | 4 ++++
.../hbase/metrics/ExceptionTrackingSourceImpl.java | 16 ++++++++++++++++
.../hadoop/hbase/test/MetricsAssertHelperImpl.java | 2 +-
.../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java | 12 ++++++++++++
.../org/apache/hadoop/hbase/thrift/ThriftMetrics.java | 11 +++++++++++
.../hadoop/hbase/thrift/ErrorThrowingGetObserver.java | 10 +++++++++-
6 files changed, 53 insertions(+), 2 deletions(-)
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 53d3d18..6d72d85 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
@@ -41,6 +41,8 @@ public interface ExceptionTrackingSource extends BaseSource {
"rest of the requests will have to be retried.";
String EXCEPTIONS_CALL_QUEUE_TOO_BIG = "exceptions.callQueueTooBig";
String EXCEPTIONS_CALL_QUEUE_TOO_BIG_DESC = "Call queue is full";
+ String EXCEPTIONS_QUOTA_EXCEEDED = "exceptions.quotaExceeded";
+ String EXCEPTIONS_RPC_THROTTLING = "exceptions.rpcThrottling";
void exception();
@@ -56,4 +58,6 @@ public interface ExceptionTrackingSource extends BaseSource {
void tooBusyException();
void multiActionTooLargeException();
void callQueueTooBigException();
+ void quotaExceededException();
+ void rpcThrottlingException();
}
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 3af27d8..23dafad 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
@@ -38,6 +38,8 @@ public class ExceptionTrackingSourceImpl extends BaseSourceImpl
protected MutableFastCounter exceptionsMoved;
protected MutableFastCounter exceptionsMultiTooLarge;
protected MutableFastCounter exceptionsCallQueueTooBig;
+ protected MutableFastCounter exceptionsQuotaExceeded;
+ protected MutableFastCounter exceptionsRpcThrottling;
public ExceptionTrackingSourceImpl(String metricsName, String metricsDescription,
String metricsContext, String metricsJmxContext) {
@@ -66,6 +68,10 @@ public class ExceptionTrackingSourceImpl extends BaseSourceImpl
.newCounter(EXCEPTIONS_MULTI_TOO_LARGE_NAME, EXCEPTIONS_MULTI_TOO_LARGE_DESC, 0L);
this.exceptionsCallQueueTooBig = this.getMetricsRegistry()
.newCounter(EXCEPTIONS_CALL_QUEUE_TOO_BIG, EXCEPTIONS_CALL_QUEUE_TOO_BIG_DESC, 0L);
+ this.exceptionsQuotaExceeded = this.getMetricsRegistry()
+ .newCounter(EXCEPTIONS_QUOTA_EXCEEDED, EXCEPTIONS_TYPE_DESC, 0L);
+ this.exceptionsRpcThrottling = this.getMetricsRegistry()
+ .newCounter(EXCEPTIONS_RPC_THROTTLING, EXCEPTIONS_TYPE_DESC, 0L);
}
@Override
@@ -117,4 +123,14 @@ public class ExceptionTrackingSourceImpl extends BaseSourceImpl
public void callQueueTooBigException() {
exceptionsCallQueueTooBig.incr();
}
+
+ @Override
+ public void quotaExceededException() {
+ exceptionsQuotaExceeded.incr();
+ }
+
+ @Override
+ public void rpcThrottlingException() {
+ exceptionsRpcThrottling.incr();
+ }
}
diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java
index c48cb80..83e25a6 100644
--- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java
+++ b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java
@@ -184,7 +184,7 @@ public class MetricsAssertHelperImpl implements MetricsAssertHelper {
@Override
public void assertCounter(String name, long expected, BaseSource source) {
long found = getCounter(name, source);
- assertEquals("Metrics Counters should be equal", (long) Long.valueOf(expected), found);
+ assertEquals(name + "(" + found + ") should be equal", (long) Long.valueOf(expected), found);
}
@Override
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 9d5373c..1177333 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
@@ -24,15 +24,21 @@ import org.apache.hadoop.hbase.MultiActionResultTooLarge;
import org.apache.hadoop.hbase.NotServingRegionException;
import org.apache.hadoop.hbase.RegionTooBusyException;
import org.apache.hadoop.hbase.UnknownScannerException;
+import org.apache.hadoop.hbase.quotas.QuotaExceededException;
+import org.apache.hadoop.hbase.quotas.RpcThrottlingException;
import org.apache.yetus.audience.InterfaceAudience;
import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
import org.apache.hadoop.hbase.exceptions.RegionMovedException;
import org.apache.hadoop.hbase.exceptions.ScannerResetException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
@InterfaceAudience.Private
public class MetricsHBaseServer {
+ private static final Logger LOG = LoggerFactory.getLogger(MetricsHBaseServer.class);
+
private MetricsHBaseServerSource source;
private MetricsHBaseServerWrapper serverWrapper;
@@ -116,6 +122,12 @@ public class MetricsHBaseServer {
source.multiActionTooLargeException();
} else if (throwable instanceof CallQueueTooBigException) {
source.callQueueTooBigException();
+ } else if (throwable instanceof QuotaExceededException) {
+ source.quotaExceededException();
+ } else if (throwable instanceof RpcThrottlingException) {
+ source.rpcThrottlingException();
+ } else if (LOG.isDebugEnabled()) {
+ LOG.debug("Unknown exception type", throwable);
}
}
}
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 5cc3d49..e362817 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
@@ -31,9 +31,13 @@ import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
import org.apache.hadoop.hbase.exceptions.RegionMovedException;
import org.apache.hadoop.hbase.exceptions.ScannerResetException;
+import org.apache.hadoop.hbase.quotas.QuotaExceededException;
+import org.apache.hadoop.hbase.quotas.RpcThrottlingException;
import org.apache.hadoop.hbase.thrift.generated.IOError;
import org.apache.hadoop.hbase.thrift2.generated.TIOError;
import org.apache.yetus.audience.InterfaceAudience;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This class is for maintaining the various statistics of thrift server
@@ -42,6 +46,7 @@ import org.apache.yetus.audience.InterfaceAudience;
@InterfaceAudience.Private
public class ThriftMetrics {
+ private static final Logger LOG = LoggerFactory.getLogger(ThriftMetrics.class);
public enum ThriftServerType {
ONE,
@@ -143,6 +148,12 @@ public class ThriftMetrics {
source.multiActionTooLargeException();
} else if (throwable instanceof CallQueueTooBigException) {
source.callQueueTooBigException();
+ } else if (throwable instanceof QuotaExceededException) {
+ source.quotaExceededException();
+ } else if (throwable instanceof RpcThrottlingException) {
+ source.rpcThrottlingException();
+ } 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 f190f14..98f190b 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
@@ -40,6 +40,8 @@ import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
import org.apache.hadoop.hbase.exceptions.RegionMovedException;
import org.apache.hadoop.hbase.exceptions.ScannerResetException;
import org.apache.hadoop.hbase.metrics.ExceptionTrackingSource;
+import org.apache.hadoop.hbase.quotas.QuotaExceededException;
+import org.apache.hadoop.hbase.quotas.RpcThrottlingException;
import org.apache.hadoop.hbase.util.Bytes;
/**
@@ -79,6 +81,10 @@ public class ErrorThrowingGetObserver implements RegionCoprocessor, RegionObserv
throw new RegionTooBusyException("Failing for test");
case OUT_OF_ORDER_SCANNER_NEXT:
throw new OutOfOrderScannerNextException("Failing for test");
+ case QUOTA_EXCEEDED:
+ throw new QuotaExceededException("Failing for test");
+ case RPC_THROTTLING:
+ throw new RpcThrottlingException("Failing for test");
default:
throw new DoNotRetryIOException("Failing for test");
}
@@ -94,7 +100,9 @@ public class ErrorThrowingGetObserver implements RegionCoprocessor, RegionObserv
SCANNER_RESET(ExceptionTrackingSource.EXCEPTIONS_SCANNER_RESET_NAME),
UNKNOWN_SCANNER(ExceptionTrackingSource.EXCEPTIONS_UNKNOWN_NAME),
REGION_TOO_BUSY(ExceptionTrackingSource.EXCEPTIONS_BUSY_NAME),
- OUT_OF_ORDER_SCANNER_NEXT(ExceptionTrackingSource.EXCEPTIONS_OOO_NAME);
+ OUT_OF_ORDER_SCANNER_NEXT(ExceptionTrackingSource.EXCEPTIONS_OOO_NAME),
+ QUOTA_EXCEEDED(ExceptionTrackingSource.EXCEPTIONS_QUOTA_EXCEEDED),
+ RPC_THROTTLING(ExceptionTrackingSource.EXCEPTIONS_RPC_THROTTLING);
private final String metricName;