Search in sources :

Example 21 with MetricsTag

use of org.apache.hadoop.metrics2.MetricsTag in project hadoop by apache.

the class TestMetricsSourceAdapter method testMetricCacheUpdateRace.

/**
   * Test a race condition when updating the JMX cache (HADOOP-12482):
   * 1. Thread A reads the JMX metric every 2 JMX cache TTL. It marks the JMX
   *    cache to be updated by marking lastRecs to null. After this it adds a
   *    new key to the metrics. The next call to read should pick up this new
   *    key.
   * 2. Thread B triggers JMX metric update every 1 JMX cache TTL. It assigns
   *    lastRecs to a new object (not null any more).
   * 3. Thread A tries to read JMX metric again, sees lastRecs is not null and
   *    does not update JMX cache. As a result the read does not pickup the new
   *    metric.
   * @throws Exception
   */
@Test
public void testMetricCacheUpdateRace() throws Exception {
    // Create test source with a single metric counter of value 1.
    TestMetricsSource source = new TestMetricsSource();
    MetricsSourceBuilder sourceBuilder = MetricsAnnotations.newSourceBuilder(source);
    // ms
    final long JMX_CACHE_TTL = 250;
    List<MetricsTag> injectedTags = new ArrayList<>();
    MetricsSourceAdapter sourceAdapter = new MetricsSourceAdapter("test", "test", "test JMX cache update race condition", sourceBuilder.build(), injectedTags, null, null, JMX_CACHE_TTL, false);
    ScheduledExecutorService updaterExecutor = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().build());
    ScheduledExecutorService readerExecutor = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().build());
    final AtomicBoolean hasError = new AtomicBoolean(false);
    // Wake up every 1 JMX cache TTL to set lastRecs before updateJmxCache() is
    // called.
    SourceUpdater srcUpdater = new SourceUpdater(sourceAdapter, hasError);
    ScheduledFuture<?> updaterFuture = updaterExecutor.scheduleAtFixedRate(srcUpdater, sourceAdapter.getJmxCacheTTL(), sourceAdapter.getJmxCacheTTL(), TimeUnit.MILLISECONDS);
    srcUpdater.setFuture(updaterFuture);
    // Wake up every 2 JMX cache TTL so updateJmxCache() will try to update
    // JMX cache.
    SourceReader srcReader = new SourceReader(source, sourceAdapter, hasError);
    ScheduledFuture<?> readerFuture = readerExecutor.scheduleAtFixedRate(srcReader, // set JMX info cache at the beginning
    0, 2 * sourceAdapter.getJmxCacheTTL(), TimeUnit.MILLISECONDS);
    srcReader.setFuture(readerFuture);
    // Let the threads do their work.
    Thread.sleep(RACE_TEST_RUNTIME);
    assertFalse("Hit error", hasError.get());
    // cleanup
    updaterExecutor.shutdownNow();
    readerExecutor.shutdownNow();
    updaterExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS);
    readerExecutor.awaitTermination(1000, TimeUnit.MILLISECONDS);
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) MetricsSourceBuilder(org.apache.hadoop.metrics2.lib.MetricsSourceBuilder) ArrayList(java.util.ArrayList) MetricsTag(org.apache.hadoop.metrics2.MetricsTag) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) Test(org.junit.Test)

Example 22 with MetricsTag

use of org.apache.hadoop.metrics2.MetricsTag in project hadoop by apache.

the class TestPatternFilter method shouldAcceptImpl.

private static void shouldAcceptImpl(final boolean expectAcceptList, SubsetConfiguration conf, List<MetricsTag> tags, boolean[] expectedAcceptedSpec) {
    final MetricsFilter globFilter = newGlobFilter(conf);
    final MetricsFilter regexFilter = newRegexFilter(conf);
    // Test acceptance of the tag list:  
    assertEquals("accepts " + tags, expectAcceptList, globFilter.accepts(tags));
    assertEquals("accepts " + tags, expectAcceptList, regexFilter.accepts(tags));
    // Test results on each of the individual tags:
    int acceptedCount = 0;
    for (int i = 0; i < tags.size(); i++) {
        MetricsTag tag = tags.get(i);
        boolean actGlob = globFilter.accepts(tag);
        boolean actRegex = regexFilter.accepts(tag);
        assertEquals("accepts " + tag, expectedAcceptedSpec[i], actGlob);
        // Both the filters should give the same result:
        assertEquals(actGlob, actRegex);
        if (actGlob) {
            acceptedCount++;
        }
    }
    if (expectAcceptList) {
        // At least one individual tag should be accepted:
        assertTrue("No tag of the following accepted: " + tags, acceptedCount > 0);
    } else {
        // At least one individual tag should be rejected: 
        assertTrue("No tag of the following rejected: " + tags, acceptedCount < tags.size());
    }
}
Also used : MetricsTag(org.apache.hadoop.metrics2.MetricsTag) MetricsFilter(org.apache.hadoop.metrics2.MetricsFilter)

Example 23 with MetricsTag

use of org.apache.hadoop.metrics2.MetricsTag in project hadoop by apache.

the class MetricsRecords method assertTag.

public static void assertTag(MetricsRecord record, String tagName, String expectedValue) {
    MetricsTag processIdTag = getFirstTagByName(record, tagName);
    assertNotNull(processIdTag);
    assertEquals(expectedValue, processIdTag.value());
}
Also used : MetricsTag(org.apache.hadoop.metrics2.MetricsTag)

Example 24 with MetricsTag

use of org.apache.hadoop.metrics2.MetricsTag in project hadoop by apache.

the class TestInterns method testTag.

@Test
public void testTag() {
    MetricsTag tag = tag("t", "t desc", "t value");
    assertSame("same tag", tag, tag("t", "t desc", "t value"));
}
Also used : MetricsTag(org.apache.hadoop.metrics2.MetricsTag) Test(org.junit.Test)

Example 25 with MetricsTag

use of org.apache.hadoop.metrics2.MetricsTag in project hadoop by apache.

the class StatsDSink method putMetrics.

@Override
public void putMetrics(MetricsRecord record) {
    String hn = hostName;
    String ctx = record.context();
    String sn = serviceName;
    for (MetricsTag tag : record.tags()) {
        if (tag.info().name().equals(MsInfo.Hostname.name()) && tag.value() != null) {
            hn = tag.value();
        } else if (tag.info().name().equals(MsInfo.Context.name()) && tag.value() != null) {
            ctx = tag.value();
        } else if (tag.info().name().equals(MsInfo.ProcessName.name()) && tag.value() != null) {
            sn = tag.value();
        }
    }
    StringBuilder buf = new StringBuilder();
    if (!skipHostname && hn != null) {
        int idx = hn.indexOf(".");
        if (idx == -1) {
            buf.append(hn).append(PERIOD);
        } else {
            buf.append(hn.substring(0, idx)).append(PERIOD);
        }
    }
    buf.append(sn).append(PERIOD);
    buf.append(ctx).append(PERIOD);
    buf.append(record.name().replaceAll("\\.", "-")).append(PERIOD);
    // Collect datapoints.
    for (AbstractMetric metric : record.metrics()) {
        String type = null;
        if (metric.type().equals(MetricType.COUNTER)) {
            type = "c";
        } else if (metric.type().equals(MetricType.GAUGE)) {
            type = "g";
        }
        StringBuilder line = new StringBuilder();
        line.append(buf.toString()).append(metric.name().replace(' ', '_')).append(":").append(metric.value()).append("|").append(type);
        writeMetric(line.toString());
    }
}
Also used : AbstractMetric(org.apache.hadoop.metrics2.AbstractMetric) MetricsTag(org.apache.hadoop.metrics2.MetricsTag)

Aggregations

MetricsTag (org.apache.hadoop.metrics2.MetricsTag)30 AbstractMetric (org.apache.hadoop.metrics2.AbstractMetric)19 MetricsRecord (org.apache.hadoop.metrics2.MetricsRecord)13 Test (org.junit.Test)13 ArrayList (java.util.ArrayList)11 IOException (java.io.IOException)7 HashSet (java.util.HashSet)7 GraphiteSink (org.apache.hadoop.metrics2.sink.GraphiteSink)4 MetricsException (org.apache.hadoop.metrics2.MetricsException)3 MetricsSourceBuilder (org.apache.hadoop.metrics2.lib.MetricsSourceBuilder)3 Matchers.anyString (org.mockito.Matchers.anyString)3 DatagramPacket (java.net.DatagramPacket)2 DatagramSocket (java.net.DatagramSocket)2 MBeanAttributeInfo (javax.management.MBeanAttributeInfo)2 MBeanInfo (javax.management.MBeanInfo)2 MetricsSource (org.apache.hadoop.metrics2.MetricsSource)2 StatsDSink (org.apache.hadoop.metrics2.sink.StatsDSink)2 StatsD (org.apache.hadoop.metrics2.sink.StatsDSink.StatsD)2 ProducerRecord (org.apache.kafka.clients.producer.ProducerRecord)2 RecordMetadata (org.apache.kafka.clients.producer.RecordMetadata)2