Search in sources :

Example 6 with MetricsRegistry

use of org.apache.hadoop.metrics2.lib.MetricsRegistry in project hadoop by apache.

the class TestMutableMetrics method testMutableRates.

@Test
public void testMutableRates() {
    MetricsRecordBuilder rb = mockMetricsRecordBuilder();
    MetricsRegistry registry = new MetricsRegistry("test");
    MutableRates rates = new MutableRates(registry);
    rates.init(TestProtocol.class);
    registry.snapshot(rb, false);
    assertCounter("FooNumOps", 0L, rb);
    assertGauge("FooAvgTime", 0.0, rb);
    assertCounter("BarNumOps", 0L, rb);
    assertGauge("BarAvgTime", 0.0, rb);
}
Also used : MetricsRecordBuilder(org.apache.hadoop.metrics2.MetricsRecordBuilder) Test(org.junit.Test)

Example 7 with MetricsRegistry

use of org.apache.hadoop.metrics2.lib.MetricsRegistry in project hadoop by apache.

the class TestMutableMetrics method testMutableQuantilesError.

/**
   * Ensure that quantile estimates from {@link MutableQuantiles} are within
   * specified error bounds.
   */
@Test(timeout = 30000)
public void testMutableQuantilesError() throws Exception {
    MetricsRecordBuilder mb = mockMetricsRecordBuilder();
    MetricsRegistry registry = new MetricsRegistry("test");
    // Use a 5s rollover period
    MutableQuantiles quantiles = registry.newQuantiles("foo", "stat", "Ops", "Latency", 5);
    // Push some values in and wait for it to publish
    long start = System.nanoTime() / 1000000;
    for (long i = 1; i <= 1000; i++) {
        quantiles.add(i);
        quantiles.add(1001 - i);
    }
    long end = System.nanoTime() / 1000000;
    Thread.sleep(6000 - (end - start));
    registry.snapshot(mb, false);
    // Print out the snapshot
    Map<Quantile, Long> previousSnapshot = quantiles.previousSnapshot;
    for (Entry<Quantile, Long> item : previousSnapshot.entrySet()) {
        System.out.println(String.format("Quantile %.2f has value %d", item.getKey().quantile, item.getValue()));
    }
    // Verify the results are within our requirements
    verify(mb).addGauge(info("FooNumOps", "Number of ops for stat with 5s interval"), (long) 2000);
    Quantile[] quants = MutableQuantiles.quantiles;
    String name = "Foo%dthPercentileLatency";
    String desc = "%d percentile latency with 5 second interval for stat";
    for (Quantile q : quants) {
        int percentile = (int) (100 * q.quantile);
        int error = (int) (1000 * q.error);
        String n = String.format(name, percentile);
        String d = String.format(desc, percentile);
        long expected = (long) (q.quantile * 1000);
        verify(mb).addGauge(eq(info(n, d)), leq(expected + error));
        verify(mb).addGauge(eq(info(n, d)), geq(expected - error));
    }
}
Also used : Matchers.anyLong(org.mockito.Matchers.anyLong) Quantile(org.apache.hadoop.metrics2.util.Quantile) MetricsRecordBuilder(org.apache.hadoop.metrics2.MetricsRecordBuilder) Test(org.junit.Test)

Example 8 with MetricsRegistry

use of org.apache.hadoop.metrics2.lib.MetricsRegistry in project hadoop by apache.

the class TestMutableMetrics method testMutableStatWithBulkAdd.

/**
   * Tests that when using {@link MutableStat#add(long, long)}, even with a high
   * sample count, the mean does not lose accuracy.
   */
@Test
public void testMutableStatWithBulkAdd() {
    MetricsRecordBuilder rb = mockMetricsRecordBuilder();
    MetricsRegistry registry = new MetricsRegistry("test");
    MutableStat stat = registry.newStat("Test", "Test", "Ops", "Val", false);
    stat.add(1000, 1000);
    stat.add(1000, 2000);
    registry.snapshot(rb, false);
    assertCounter("TestNumOps", 2000L, rb);
    assertGauge("TestAvgVal", 1.5, rb);
}
Also used : MetricsRecordBuilder(org.apache.hadoop.metrics2.MetricsRecordBuilder) Test(org.junit.Test)

Example 9 with MetricsRegistry

use of org.apache.hadoop.metrics2.lib.MetricsRegistry in project hadoop by apache.

the class TestMutableMetrics method testMutableQuantilesEmptyRollover.

/**
   * Test that {@link MutableQuantiles} rolls over correctly even if no items
   * have been added to the window
   */
@Test(timeout = 30000)
public void testMutableQuantilesEmptyRollover() throws Exception {
    MetricsRecordBuilder mb = mockMetricsRecordBuilder();
    MetricsRegistry registry = new MetricsRegistry("test");
    // Use a 5s rollover period
    MutableQuantiles quantiles = registry.newQuantiles("foo", "stat", "Ops", "Latency", 5);
    // Check it initially
    quantiles.snapshot(mb, true);
    verify(mb).addGauge(info("FooNumOps", "Number of ops for stat with 5s interval"), (long) 0);
    Thread.sleep(6000);
    quantiles.snapshot(mb, false);
    verify(mb, times(2)).addGauge(info("FooNumOps", "Number of ops for stat with 5s interval"), (long) 0);
}
Also used : MetricsRecordBuilder(org.apache.hadoop.metrics2.MetricsRecordBuilder) Test(org.junit.Test)

Example 10 with MetricsRegistry

use of org.apache.hadoop.metrics2.lib.MetricsRegistry in project hadoop by apache.

the class TestMutableMetrics method testSnapshot.

/**
   * Test the snapshot method
   */
@Test
public void testSnapshot() {
    MetricsRecordBuilder mb = mockMetricsRecordBuilder();
    MetricsRegistry registry = new MetricsRegistry("test");
    registry.newCounter("c1", "int counter", 1);
    registry.newCounter("c2", "long counter", 2L);
    registry.newGauge("g1", "int gauge", 3);
    registry.newGauge("g2", "long gauge", 4L);
    registry.newStat("s1", "stat", "Ops", "Time", true).add(0);
    registry.newRate("s2", "stat", false).add(0);
    registry.snapshot(mb, true);
    MutableStat s2 = (MutableStat) registry.get("s2");
    // should get the same back.
    s2.snapshot(mb, true);
    s2.add(1);
    // should get new interval values back
    s2.snapshot(mb, true);
    verify(mb).addCounter(info("c1", "int counter"), 1);
    verify(mb).addCounter(info("c2", "long counter"), 2L);
    verify(mb).addGauge(info("g1", "int gauge"), 3);
    verify(mb).addGauge(info("g2", "long gauge"), 4L);
    verify(mb).addCounter(info("S1NumOps", "Number of ops for stat"), 1L);
    verify(mb).addGauge(eq(info("S1AvgTime", "Average time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1StdevTime", "Standard deviation of time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1IMinTime", "Interval min time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1IMaxTime", "Interval max time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1MinTime", "Min time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1MaxTime", "Max time for stat")), eq(0.0, EPSILON));
    verify(mb).addGauge(eq(info("S1INumOps", "Interval number of ops for stat")), eq(1L));
    verify(mb, times(2)).addCounter(info("S2NumOps", "Number of ops for stat"), 1L);
    verify(mb, times(2)).addGauge(eq(info("S2AvgTime", "Average time for stat")), eq(0.0, EPSILON));
    verify(mb).addCounter(info("S2NumOps", "Number of ops for stat"), 2L);
    verify(mb).addGauge(eq(info("S2AvgTime", "Average time for stat")), eq(1.0, EPSILON));
    // Add one more sample to s1 and verify that total number of ops
    // has increased to 2, but interval number is 1 for both intervals.
    MutableStat s1 = (MutableStat) registry.get("s1");
    s1.add(0);
    registry.snapshot(mb, true);
    verify(mb).addCounter(info("S1NumOps", "Number of ops for stat"), 2L);
    verify(mb, times(2)).addGauge(eq(info("S1INumOps", "Interval number of ops for stat")), eq(1L));
}
Also used : MetricsRecordBuilder(org.apache.hadoop.metrics2.MetricsRecordBuilder) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)9 MetricsRecordBuilder (org.apache.hadoop.metrics2.MetricsRecordBuilder)8 MetricsRegistry (org.apache.hadoop.metrics2.lib.MetricsRegistry)3 MetricsException (org.apache.hadoop.metrics2.MetricsException)2 MetricsInfo (org.apache.hadoop.metrics2.MetricsInfo)2 Quantile (org.apache.hadoop.metrics2.util.Quantile)2 Annotation (java.lang.annotation.Annotation)1 Field (java.lang.reflect.Field)1 Configuration (org.apache.hadoop.conf.Configuration)1 AbstractMetric (org.apache.hadoop.metrics2.AbstractMetric)1 MetricsSystem (org.apache.hadoop.metrics2.MetricsSystem)1 MetricsVisitor (org.apache.hadoop.metrics2.MetricsVisitor)1 Metrics (org.apache.hadoop.metrics2.annotation.Metrics)1 DefaultMetricsSystem (org.apache.hadoop.metrics2.lib.DefaultMetricsSystem)1 MutableRatesWithAggregation (org.apache.hadoop.metrics2.lib.MutableRatesWithAggregation)1 FakeTimer (org.apache.hadoop.util.FakeTimer)1 Matchers.anyLong (org.mockito.Matchers.anyLong)1