@Override public synchronized <T extends MetricsSink> 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!"); return sink; } allSinks.put(name, sink); if (config != null) { registerSink(name, description, sink); } // We want to re-register the sink to pick up new config // when the metrics system restarts. register(name, new AbstractCallback() { @Override public void postStart() { register(name, description, sink); } }); return sink; }
@Override public synchronized <T extends MetricsSink> 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!"); return sink; } allSinks.put(name, sink); if (config != null) { registerSink(name, description, sink); } // We want to re-register the sink to pick up new config // when the metrics system restarts. register(name, new AbstractCallback() { @Override public void postStart() { register(name, description, sink); } }); return sink; }
@Override public synchronized <T extends MetricsSink> 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!"); return sink; } allSinks.put(name, sink); if (config != null) { registerSink(name, description, sink); } // We want to re-register the sink to pick up new config // when the metrics system restarts. register(name, new AbstractCallback() { @Override public void postStart() { register(name, description, sink); } }); return sink; }
@Override public synchronized <T extends MetricsSink> 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!"); return sink; } allSinks.put(name, sink); if (config != null) { registerSink(name, description, sink); } // We want to re-register the sink to pick up new config // when the metrics system restarts. register(name, new AbstractCallback() { @Override public void postStart() { register(name, description, sink); } }); return sink; }
@Override public synchronized <T extends MetricsSink> 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!"); return sink; } allSinks.put(name, sink); if (config != null) { registerSink(name, description, sink); } // We want to re-register the sink to pick up new config // when the metrics system restarts. register(name, new AbstractCallback() { @Override public void postStart() { register(name, description, sink); } }); return sink; }
MetricsSink slowSink = mock(MetricsSink.class); MetricsSink dataSink = mock(MetricsSink.class); ms.registerSink("slowSink", "The sink that will wait on putMetric", slowSink); ms.registerSink("dataSink", "The sink I'll use to get info about slowSink", dataSink); doAnswer(new Answer() {
MetricsSink slowSink = mock(MetricsSink.class); MetricsSink dataSink = mock(MetricsSink.class); ms.registerSink("slowSink", "The sink that will wait on putMetric", slowSink); ms.registerSink("dataSink", "The sink I'll use to get info about slowSink", dataSink); doAnswer(new Answer() {
/** * HADOOP-11932 */ @Test(timeout = 5000) public void testHangOnSinkRead() throws Exception { new ConfigBuilder().add("*.period", 8) .add("test.sink.test.class", TestSink.class.getName()) .save(TestMetricsConfig.getTestFilename("hadoop-metrics2-test")); MetricsSystemImpl ms = new MetricsSystemImpl("Test"); ms.start(); try { CountDownLatch collectingLatch = new CountDownLatch(1); MetricsSink sink = new TestClosableSink(collectingLatch); ms.registerSink("closeableSink", "The sink will be used to test closeability", sink); // trigger metric collection first time ms.onTimerEvent(); // Make sure that sink is collecting metrics assertTrue(collectingLatch.await(1, TimeUnit.SECONDS)); } finally { ms.stop(); } }
/** * HADOOP-11932 */ @Test(timeout = 5000) public void testHangOnSinkRead() throws Exception { new ConfigBuilder().add("*.period", 8) .add("test.sink.test.class", TestSink.class.getName()) .save(TestMetricsConfig.getTestFilename("hadoop-metrics2-test")); MetricsSystemImpl ms = new MetricsSystemImpl("Test"); ms.start(); try { CountDownLatch collectingLatch = new CountDownLatch(1); MetricsSink sink = new TestClosableSink(collectingLatch); ms.registerSink("closeableSink", "The sink will be used to test closeability", sink); // trigger metric collection first time ms.onTimerEvent(); // Make sure that sink is collecting metrics assertTrue(collectingLatch.await(1, TimeUnit.SECONDS)); } finally { ms.stop(); } }
MetricsSink sink1 = mock(MetricsSink.class); MetricsSink sink2 = mock(MetricsSink.class); ms.registerSink("sink1", "sink1 desc", sink1); ms.registerSink("sink2", "sink2 desc", sink2);
MetricsSink sink1 = mock(MetricsSink.class); MetricsSink sink2 = mock(MetricsSink.class); ms.registerSink("sink1", "sink1 desc", sink1); ms.registerSink("sink2", "sink2 desc", sink2);
MetricsSink sink1 = mock(MetricsSink.class); MetricsSink sink2 = mock(MetricsSink.class); ms.registerSink("sink1", "sink1 desc", sink1); ms.registerSink("sink2", "sink2 desc", sink2);
MetricsSink sink1 = mock(MetricsSink.class); MetricsSink sink2 = mock(MetricsSink.class); ms.registerSink("sink1", "sink1 desc", sink1); ms.registerSink("sink2", "sink2 desc", sink2);
ms.registerSink("collector", "Collector of values from all threads.", sink); final TestSource[] sources = new TestSource[numThreads];
ms.registerSink("collector", "Collector of values from all threads.", sink); final TestSource[] sources = new TestSource[numThreads];
@Test public void testHangingSink() { new ConfigBuilder().add("*.period", 8) .add("test.sink.test.class", TestSink.class.getName()) .add("test.sink.hanging.retry.delay", "1") .add("test.sink.hanging.retry.backoff", "1.01") .add("test.sink.hanging.retry.count", "0") .save(TestMetricsConfig.getTestFilename("hadoop-metrics2-test")); MetricsSystemImpl ms = new MetricsSystemImpl("Test"); ms.start(); TestSource s = ms.register("s3", "s3 desc", new TestSource("s3rec")); s.c1.incr(); HangingSink hanging = new HangingSink(); ms.registerSink("hanging", "Hang the sink!", hanging); ms.publishMetricsNow(); assertEquals(1L, ms.droppedPubAll.value()); assertFalse(hanging.getInterrupted()); ms.stop(); ms.shutdown(); assertTrue(hanging.getInterrupted()); assertTrue("The sink didn't get called after its first hang " + "for subsequent records.", hanging.getGotCalledSecondTime()); }
@Test public void testHangingSink() { new ConfigBuilder().add("*.period", 8) .add("test.sink.test.class", TestSink.class.getName()) .add("test.sink.hanging.retry.delay", "1") .add("test.sink.hanging.retry.backoff", "1.01") .add("test.sink.hanging.retry.count", "0") .save(TestMetricsConfig.getTestFilename("hadoop-metrics2-test")); MetricsSystemImpl ms = new MetricsSystemImpl("Test"); ms.start(); TestSource s = ms.register("s3", "s3 desc", new TestSource("s3rec")); s.c1.incr(); HangingSink hanging = new HangingSink(); ms.registerSink("hanging", "Hang the sink!", hanging); ms.publishMetricsNow(); assertEquals(1L, ms.droppedPubAll.value()); assertFalse(hanging.getInterrupted()); ms.stop(); ms.shutdown(); assertTrue(hanging.getInterrupted()); assertTrue("The sink didn't get called after its first hang " + "for subsequent records.", hanging.getGotCalledSecondTime()); }