You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by wu...@apache.org on 2022/11/07 19:19:45 UTC
[ambari-metrics] branch master updated: AMBARI-25400 Issue while determining live collector in case of HA (#51)
This is an automated email from the ASF dual-hosted git repository.
wuzhiguo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ambari-metrics.git
The following commit(s) were added to refs/heads/master by this push:
new 0b3f3c3 AMBARI-25400 Issue while determining live collector in case of HA (#51)
0b3f3c3 is described below
commit 0b3f3c313a0b8ecb16e845d97fe5e9a5b0b27a48
Author: lucasbak <lu...@gmail.com>
AuthorDate: Mon Nov 7 20:19:40 2022 +0100
AMBARI-25400 Issue while determining live collector in case of HA (#51)
---
.../sink/timeline/AbstractTimelineMetricsSink.java | 31 ++++++++++++++--------
.../timeline/AbstractTimelineMetricSinkTest.java | 18 +++++++++++++
2 files changed, 38 insertions(+), 11 deletions(-)
diff --git a/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java b/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
index 739e9dc..d77f60c 100644
--- a/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
+++ b/ambari-metrics-common/src/main/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricsSink.java
@@ -626,18 +626,27 @@ public abstract class AbstractTimelineMetricsSink {
connection.setReadTimeout(2000);
int responseCode = connection.getResponseCode();
- if (responseCode == 200) {
- try (InputStream in = connection.getInputStream()) {
- StringWriter writer = new StringWriter();
- IOUtils.copy(in, writer);
- try {
- collectors = gson.fromJson(writer.toString(), new TypeToken<List<String>>(){}.getType());
- } catch (JsonSyntaxException jse) {
- // Swallow this at the behest of still trying to POST
- LOG.debug("Exception deserializing the json data on live " +
- "collector nodes.", jse);
+
+ switch (responseCode) {
+ case 200 :
+ try (InputStream in = connection.getInputStream()) {
+ StringWriter writer = new StringWriter();
+ IOUtils.copy(in, writer);
+ try {
+ collectors = gson.fromJson(writer.toString(), new TypeToken<List<String>>(){}.getType());
+ } catch (JsonSyntaxException jse) {
+ // Swallow this at the behest of still trying to POST
+ LOG.debug("Exception deserializing the json data on live " +
+ "collector nodes.", jse);
+ }
}
- }
+ break;
+ case 500 :
+ String warnMsg = "Unable to connect to collector to find live nodes, Internal server error";
+ throw new MetricCollectorUnavailableException(warnMsg);
+ default :
+ String msg = String.format("Unhandled response code (%d) at requesting live collector nodes!", responseCode);
+ LOG.warn(msg);
}
} catch (IOException ioe) {
diff --git a/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricSinkTest.java b/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricSinkTest.java
index 634d18c..f3f8a62 100644
--- a/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricSinkTest.java
+++ b/ambari-metrics-common/src/test/java/org/apache/hadoop/metrics2/sink/timeline/AbstractTimelineMetricSinkTest.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.metrics2.sink.timeline;
import junit.framework.Assert;
+import org.apache.hadoop.metrics2.sink.timeline.availability.MetricCollectorUnavailableException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
@@ -35,6 +36,7 @@ import static org.easymock.EasyMock.anyString;
import static org.easymock.EasyMock.expect;
import static org.powermock.api.easymock.PowerMock.expectNew;
import static org.powermock.api.easymock.PowerMock.replayAll;
+import static org.powermock.api.easymock.PowerMock.verifyAll;
@RunWith(PowerMockRunner.class)
@PrepareForTest({AbstractTimelineMetricsSink.class, HttpURLConnection.class})
@@ -186,6 +188,22 @@ public class AbstractTimelineMetricSinkTest {
Assert.assertEquals(0, sink.getMetricsPostCache().size());
}
+ @Test(expected = MetricCollectorUnavailableException.class)
+ @PrepareForTest({URL.class, AbstractTimelineMetricsSink.class, HttpURLConnection.class, TimelineMetric.class})
+ public void testFindLiveCollectorHostsFromKnownCollector() throws Exception {
+ HttpURLConnection connection = PowerMock.createNiceMock(HttpURLConnection.class);
+ URL url = PowerMock.createNiceMock(URL.class);
+ expectNew(URL.class, anyString()).andReturn(url).anyTimes();
+ expect(url.openConnection()).andReturn(connection).anyTimes();
+ expect(connection.getResponseCode()).andReturn(500).anyTimes();
+ replayAll();
+
+ TestTimelineMetricsSink sink = new TestTimelineMetricsSink();
+ sink.findLiveCollectorHostsFromKnownCollector("host", "1234");
+
+ verifyAll();
+ }
+
private class TestTimelineMetricsSink extends AbstractTimelineMetricsSink {
@Override
protected String getCollectorUri(String host) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ambari.apache.org
For additional commands, e-mail: commits-help@ambari.apache.org