You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2016/04/28 19:57:11 UTC
ambari git commit: AMBARI-16123 Reduce error logs on the Sink path if
AMS is down (dsen)
Repository: ambari
Updated Branches:
refs/heads/trunk 2ff332504 -> 51480ecac
AMBARI-16123 Reduce error logs on the Sink path if AMS is down (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/51480eca
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/51480eca
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/51480eca
Branch: refs/heads/trunk
Commit: 51480ecaccae514035d3fae2b0a4757f51152567
Parents: 2ff3325
Author: Dmytro Sen <ds...@apache.org>
Authored: Thu Apr 28 20:33:22 2016 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Thu Apr 28 20:56:48 2016 +0300
----------------------------------------------------------------------
.../timeline/AbstractTimelineMetricsSink.java | 25 ++++++++++++++++----
.../cache/HandleConnectExceptionTest.java | 23 +++++++++++++-----
2 files changed, 37 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/51480eca/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java b/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
index 5a532c5..217f265 100644
--- a/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
+++ b/ambari-metrics/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
@@ -38,6 +38,7 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyStore;
+import java.util.concurrent.atomic.AtomicInteger;
public abstract class AbstractTimelineMetricsSink {
public static final String TAGS_FOR_PREFIX_PROPERTY_PREFIX = "tagsForPrefix.";
@@ -57,6 +58,9 @@ public abstract class AbstractTimelineMetricsSink {
public static final String SSL_KEYSTORE_TYPE_PROPERTY = "truststore.type";
public static final String SSL_KEYSTORE_PASSWORD_PROPERTY = "truststore.password";
+ protected static final AtomicInteger failedCollectorConnectionsCounter = new AtomicInteger(0);
+ public static int NUMBER_OF_SKIPPED_COLLECTOR_EXCEPTIONS = 100;
+
private SSLSocketFactory sslSocketFactory;
protected final Log LOG;
@@ -109,9 +113,12 @@ public abstract class AbstractTimelineMetricsSink {
}
}
cleanupInputStream(connection.getInputStream());
+ //reset failedCollectorConnectionsCounter to "0"
+ failedCollectorConnectionsCounter.set(0);
} catch (IOException ioe) {
StringBuilder errorMessage =
- new StringBuilder("Unable to connect to collector, " + connectUrl + "\n");
+ new StringBuilder("Unable to connect to collector, " + connectUrl + "\n"
+ + "This exceptions will be ignored for next " + NUMBER_OF_SKIPPED_COLLECTOR_EXCEPTIONS + " times\n");
try {
if ((connection != null)) {
errorMessage.append(cleanupInputStream(connection.getErrorStream()));
@@ -119,12 +126,20 @@ public abstract class AbstractTimelineMetricsSink {
} catch (IOException e) {
//NOP
}
- if (LOG.isDebugEnabled()) {
- LOG.debug(errorMessage, ioe);
+
+ if (failedCollectorConnectionsCounter.getAndIncrement() == 0) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(errorMessage, ioe);
+ } else {
+ LOG.info(errorMessage);
+ }
+ throw new UnableToConnectException(ioe).setConnectUrl(connectUrl);
} else {
- LOG.info(errorMessage);
+ failedCollectorConnectionsCounter.compareAndSet(NUMBER_OF_SKIPPED_COLLECTOR_EXCEPTIONS, 0);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug(String.format("Ignoring %s AMS connection exceptions", NUMBER_OF_SKIPPED_COLLECTOR_EXCEPTIONS));
+ }
}
- throw new UnableToConnectException(ioe).setConnectUrl(connectUrl);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/51480eca/ambari-metrics/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/cache/HandleConnectExceptionTest.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/cache/HandleConnectExceptionTest.java b/ambari-metrics/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/cache/HandleConnectExceptionTest.java
index 4c1a2cb..ad7b1ac 100644
--- a/ambari-metrics/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/cache/HandleConnectExceptionTest.java
+++ b/ambari-metrics/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/cache/HandleConnectExceptionTest.java
@@ -23,6 +23,7 @@ import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.hadoop.metrics2.sink.timeline.AbstractTimelineMetricsSink;
+import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
import org.apache.hadoop.metrics2.sink.timeline.UnableToConnectException;
import org.junit.Assert;
@@ -50,12 +51,12 @@ public class HandleConnectExceptionTest {
OutputStream os = createNiceMock(OutputStream.class);
HttpURLConnection connection = createNiceMock(HttpURLConnection.class);
URL url = createNiceMock(URL.class);
-
+ AbstractTimelineMetricsSink.NUMBER_OF_SKIPPED_COLLECTOR_EXCEPTIONS = 2;
try {
- expectNew(URL.class, "collector").andReturn(url);
- expect(url.openConnection()).andReturn(connection).once();
- expect(connection.getOutputStream()).andReturn(os).once();
- expect(connection.getResponseCode()).andThrow(new IOException());
+ expectNew(URL.class, "collector").andReturn(url).anyTimes();
+ expect(url.openConnection()).andReturn(connection).anyTimes();
+ expect(connection.getOutputStream()).andReturn(os).anyTimes();
+ expect(connection.getResponseCode()).andThrow(new IOException()).anyTimes();
replayAll();
} catch (Exception e) {
@@ -65,8 +66,18 @@ public class HandleConnectExceptionTest {
@Test
public void handleTest(){
- try{
+ emitMetricsWithExpectedException(new TimelineMetrics());
+ try {
sink.emitMetrics(new TimelineMetrics());
+ } catch (Exception e) {
+ Assert.fail("There should be no exception");
+ }
+ emitMetricsWithExpectedException(new TimelineMetrics());
+ }
+
+ private void emitMetricsWithExpectedException(TimelineMetrics timelineMetrics) {
+ try{
+ sink.emitMetrics(timelineMetrics);
Assert.fail();
}catch(UnableToConnectException e){
Assert.assertEquals(COLLECTOR_URL, e.getConnectUrl());