From e09fda652e7fe6b77aed74dff06aac61fe84f3e4 Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Fri, 17 May 2013 11:53:16 -0700 Subject: [PATCH] Fix Metrics2 tests on hadoop2 --- .../hadoop/hbase/test/MetricsAssertHelper.java | 6 ++++ .../hadoop/hbase/test/MetricsAssertHelperImpl.java | 6 ++++ .../MetricsRegionServerSourceFactoryImpl.java | 10 +----- .../hadoop/hbase/test/MetricsAssertHelperImpl.java | 9 +++++- .../org/apache/hadoop/hbase/MiniHBaseCluster.java | 5 +++ .../regionserver/TestMetricsRegionServer.java | 32 ++++++++++++-------- 6 files changed, 45 insertions(+), 23 deletions(-) diff --git hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelper.java hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelper.java index 968ab83..1d4d2f6 100644 --- hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelper.java +++ hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelper.java @@ -24,6 +24,12 @@ import org.apache.hadoop.hbase.metrics.BaseSource; public interface MetricsAssertHelper { /** + * Init helper. This method will make sure that the metrics system is set + * up for tests. + */ + public void init(); + + /** * Assert that a tag exists and has a given value. * * @param name The name of the tag. diff --git hbase-hadoop1-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java hbase-hadoop1-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java index 8ac38af..e557afe 100644 --- hbase-hadoop1-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java +++ hbase-hadoop1-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java @@ -25,6 +25,7 @@ import org.apache.hadoop.metrics2.MetricsBuilder; import org.apache.hadoop.metrics2.MetricsRecordBuilder; import org.apache.hadoop.metrics2.MetricsSource; import org.apache.hadoop.metrics2.MetricsTag; +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import java.util.HashMap; import java.util.Map; @@ -111,6 +112,11 @@ public class MetricsAssertHelperImpl implements MetricsAssertHelper { } @Override + public void init() { + // In hadoop 1 there's no minicluster mode so there's nothing to do here. + } + + @Override public void assertTag(String name, String expected, BaseSource source) { getMetrics(source); String cName = canonicalizeMetricName(name); diff --git hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java index f6cb79b..c5cc8b4 100644 --- hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java +++ hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java @@ -25,8 +25,6 @@ public class MetricsRegionServerSourceFactoryImpl implements MetricsRegionServer public static enum FactoryStorage { INSTANCE; private Object aggLock = new Object(); - private Object serverLock = new Object(); - private MetricsRegionServerSource serverSource; private MetricsRegionAggregateSourceImpl aggImpl; } @@ -42,13 +40,7 @@ public class MetricsRegionServerSourceFactoryImpl implements MetricsRegionServer @Override public synchronized MetricsRegionServerSource createServer(MetricsRegionServerWrapper regionServerWrapper) { - synchronized (FactoryStorage.INSTANCE.serverLock) { - if (FactoryStorage.INSTANCE.serverSource == null) { - FactoryStorage.INSTANCE.serverSource = new MetricsRegionServerSourceImpl( - regionServerWrapper); - } - return FactoryStorage.INSTANCE.serverSource; - } + return new MetricsRegionServerSourceImpl(regionServerWrapper); } @Override diff --git hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java index e4cfafb..3481cc2 100644 --- hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java +++ hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java @@ -26,6 +26,7 @@ import org.apache.hadoop.metrics2.MetricsInfo; import org.apache.hadoop.metrics2.MetricsRecordBuilder; import org.apache.hadoop.metrics2.MetricsSource; import org.apache.hadoop.metrics2.MetricsTag; +import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import java.util.HashMap; import java.util.Map; @@ -36,7 +37,6 @@ import static org.junit.Assert.*; * A helper class that will allow tests to get into hadoop2's metrics2 values. */ public class MetricsAssertHelperImpl implements MetricsAssertHelper { - private Map tags = new HashMap(); private Map gauges = new HashMap(); private Map counters = new HashMap(); @@ -130,6 +130,13 @@ public class MetricsAssertHelperImpl implements MetricsAssertHelper { } @Override + public void init() { + // Make sure that the metrics system doesn't throw an exception when + // registering a source with the same name + DefaultMetricsSystem.setMiniClusterMode(true); + } + + @Override public void assertTag(String name, String expected, BaseSource source) { getMetrics(source); String cName = canonicalizeMetricName(name); diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java index 477cc9c..75cca70 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java @@ -39,6 +39,7 @@ import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.Regio import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.security.User; +import org.apache.hadoop.hbase.test.MetricsAssertHelper; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.JVMClusterUtil; import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread; @@ -88,6 +89,10 @@ public class MiniHBaseCluster extends HBaseCluster { throws IOException, InterruptedException { super(conf); conf.set(HConstants.MASTER_PORT, "0"); + + // Hadoop 2 + CompatibilityFactory.getInstance(MetricsAssertHelper.class).init(); + init(numMasters, numRegionServers, masterClass, regionserverClass); this.initialClusterStatus = getClusterStatus(); } diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java index 81436a7..fb4abb1 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java @@ -19,10 +19,9 @@ package org.apache.hadoop.hbase.regionserver; import org.apache.hadoop.hbase.CompatibilityFactory; import org.apache.hadoop.hbase.SmallTests; -import org.apache.hadoop.hbase.regionserver.MetricsRegionServer; -import org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperStub; -import org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource; import org.apache.hadoop.hbase.test.MetricsAssertHelper; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -33,17 +32,27 @@ import static org.junit.Assert.assertNotNull; */ @Category(SmallTests.class) public class TestMetricsRegionServer { + public static MetricsAssertHelper HELPER = + CompatibilityFactory.getInstance(MetricsAssertHelper.class); - public MetricsAssertHelper HELPER = CompatibilityFactory.getInstance(MetricsAssertHelper.class); + private MetricsRegionServerWrapperStub wrapper; + private MetricsRegionServer rsm; + private MetricsRegionServerSource serverSource; + + @BeforeClass + public static void classSetUp() { + HELPER.init(); + } + + @Before + public void setUp() { + wrapper = new MetricsRegionServerWrapperStub(); + rsm = new MetricsRegionServer(wrapper); + serverSource = rsm.getMetricsSource(); + } @Test public void testWrapperSource() { - MetricsRegionServerWrapperStub wrapper = new MetricsRegionServerWrapperStub(); - MetricsRegionServerSource source = - CompatibilityFactory.getInstance(MetricsRegionServerSourceFactory.class) - .createServer(wrapper); - MetricsRegionServer rsm = new MetricsRegionServer(wrapper, source); - MetricsRegionServerSource serverSource = rsm.getMetricsSource(); HELPER.assertTag("serverName", "test", serverSource); HELPER.assertTag("clusterId", "tClusterId", serverSource); HELPER.assertTag("zookeeperQuorum", "zk", serverSource); @@ -79,15 +88,12 @@ public class TestMetricsRegionServer { @Test public void testConstuctor() { - MetricsRegionServer rsm = new MetricsRegionServer(new MetricsRegionServerWrapperStub()); assertNotNull("There should be a hadoop1/hadoop2 metrics source", rsm.getMetricsSource() ); assertNotNull("The RegionServerMetricsWrapper should be accessable", rsm.getRegionServerWrapper()); } @Test public void testSlowCount() { - MetricsRegionServer rsm = new MetricsRegionServer(new MetricsRegionServerWrapperStub()); - MetricsRegionServerSource serverSource = rsm.getMetricsSource(); for (int i=0; i < 12; i ++) { rsm.updateAppend(12); rsm.updateAppend(1002); -- 1.7.10.2 (Apple Git-33)