From e670b347f39d395b8b8c5bc056a8e6dfe358803a Mon Sep 17 00:00:00 2001 From: Madhusoodan P Date: Mon, 22 Jun 2020 21:24:08 +0530 Subject: [PATCH 1/3] HADOOP-17081 : MetricsSystem doesn't start the sink adapters on restart What changed - The sink registration starts the adapter if it doesn't exists. --- .../hadoop/metrics2/impl/MetricsSystemImpl.java | 6 +++++- .../metrics2/impl/TestMetricsSystemImpl.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java index 624edc96b8ae7..cf4b4a9810c4f 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java @@ -273,7 +273,11 @@ void registerSource(String name, String desc, MetricsSource source) { T register(final String name, final String description, final T sink) { LOG.debug(name +", "+ description); if (allSinks.containsKey(name)) { - LOG.warn("Sink "+ name +" already exists!"); + if(sinks.get(name) == null) { + registerSink(name, description, sink); + } else { + LOG.warn("Sink "+ name +" already exists!"); + } return sink; } allSinks.put(name, sink); diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java index 47a3b4cdc092b..e0a3eaf32eb0d 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java @@ -639,4 +639,20 @@ private static class TestSource2 { private static String getPluginUrlsAsString() { return "file:metrics2-test-plugin.jar"; } + + @Test + public void testMetricSystemRestart() { + MetricsSystemImpl ms = new MetricsSystemImpl("msRestartTestSystem"); + TestSink ts = new TestSink(); + String sinkName = "restartTestSink"; + + ms.start(); + ms.register(sinkName, "", ts); + assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + ms.stop(); + + ms.start(); + assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + ms.stop(); + } } From 572df34eccb834daf8acd71fb352df9289380392 Mon Sep 17 00:00:00 2001 From: Madhusoodan P Date: Tue, 23 Jun 2020 06:44:37 +0530 Subject: [PATCH 2/3] Stop the metric system post testing --- .../metrics2/impl/TestMetricsSystemImpl.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java index e0a3eaf32eb0d..8abbccae04c4a 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java @@ -646,13 +646,16 @@ public void testMetricSystemRestart() { TestSink ts = new TestSink(); String sinkName = "restartTestSink"; - ms.start(); - ms.register(sinkName, "", ts); - assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); - ms.stop(); + try { + ms.start(); + ms.register(sinkName, "", ts); + assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + ms.stop(); - ms.start(); - assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); - ms.stop(); + ms.start(); + assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + } finally { + ms.stop(); + } } } From 6dc79df0f6eb9db1aa38f4e4970c912921c1e35a Mon Sep 17 00:00:00 2001 From: Madhusoodan P Date: Sat, 4 Jul 2020 13:03:16 +0530 Subject: [PATCH 3/3] Fixed the 80char checkstyle error --- .../apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java index 8abbccae04c4a..1b40a17bdd8a3 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java @@ -649,11 +649,13 @@ public void testMetricSystemRestart() { try { ms.start(); ms.register(sinkName, "", ts); - assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + assertNotNull("no adapter exists for " + sinkName, + ms.getSinkAdapter(sinkName)); ms.stop(); ms.start(); - assertNotNull("an adapter should exist for each sink", ms.getSinkAdapter(sinkName)); + assertNotNull("no adapter exists for " + sinkName, + ms.getSinkAdapter(sinkName)); } finally { ms.stop(); }