You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2014/10/29 00:59:00 UTC
[15/24] PHOENIX-1286 Remove hadoop2 compat modules
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/main/java/org/apache/phoenix/trace/TracingUtils.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/trace/TracingUtils.java b/phoenix-core/src/main/java/org/apache/phoenix/trace/TracingUtils.java
new file mode 100644
index 0000000..6ae52d8
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/trace/TracingUtils.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.trace;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.Pair;
+import org.cloudera.htrace.Span;
+
+/**
+ * Utilities for tracing
+ */
+public class TracingUtils {
+
+ private static final Log LOG = LogFactory.getLog(TracingUtils.class);
+
+ public static final String METRIC_SOURCE_KEY = "phoenix.";
+
+ /** Set context to enable filtering */
+ public static final String METRICS_CONTEXT = "tracing";
+
+ /** Marker metric to ensure that we register the tracing mbeans */
+ public static final String METRICS_MARKER_CONTEXT = "marker";
+
+ public static void addAnnotation(Span span, String message, int value) {
+ span.addKVAnnotation(message.getBytes(), Bytes.toBytes(Integer.toString(value)));
+ }
+
+ public static Pair<String, String> readAnnotation(byte[] key, byte[] value) {
+ return new Pair<String, String>(new String(key), Bytes.toString(value));
+ }
+
+ /**
+ * @see #getTraceMetricName(String)
+ */
+ public static final String getTraceMetricName(long traceId) {
+ return getTraceMetricName(Long.toString(traceId));
+ }
+
+ /**
+ * @param traceId unique id of the trace
+ * @return the name of the metric record that should be generated for a given trace
+ */
+ public static final String getTraceMetricName(String traceId) {
+ return METRIC_SOURCE_KEY + traceId;
+ }
+}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/main/java/org/apache/phoenix/trace/util/Tracing.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/trace/util/Tracing.java b/phoenix-core/src/main/java/org/apache/phoenix/trace/util/Tracing.java
index d0677cf..b093b9c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/trace/util/Tracing.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/trace/util/Tracing.java
@@ -36,8 +36,7 @@ import org.apache.phoenix.call.CallWrapper;
import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.query.QueryServicesOptions;
-import org.apache.phoenix.trace.TracingCompat;
-import org.apache.phoenix.util.StringUtil;
+import org.apache.phoenix.trace.TraceMetricSource;
import org.cloudera.htrace.Sampler;
import org.cloudera.htrace.Span;
import org.cloudera.htrace.Trace;
@@ -313,7 +312,7 @@ public class Tracing {
public synchronized static void addTraceMetricsSource() {
try {
if (!initialized) {
- Trace.addReceiver(TracingCompat.newTraceMetricSource());
+ Trace.addReceiver(new TraceMetricSource());
}
} catch (RuntimeException e) {
LOG.warn("Tracing will outputs will not be written to any metrics sink! No "
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
new file mode 100644
index 0000000..f4dfd74
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.metrics2.impl;
+
+import org.apache.hadoop.metrics2.MetricsInfo;
+
+/**
+ *
+ */
+public class ExposedMetricCounterLong extends MetricCounterLong {
+
+
+
+ /**
+ * @param info
+ * @param value
+ */
+ public ExposedMetricCounterLong(MetricsInfo info, long value) {
+ super(info, value);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
new file mode 100644
index 0000000..c5f54e6
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.metrics2.impl;
+
+import java.util.List;
+
+import org.apache.hadoop.metrics2.AbstractMetric;
+import org.apache.hadoop.metrics2.MetricsInfo;
+import org.apache.hadoop.metrics2.MetricsTag;
+
+/**
+ * Helper class to access the package-private {@link MetricsRecordImpl}
+ */
+@SuppressWarnings("javadoc")
+public class ExposedMetricsRecordImpl extends MetricsRecordImpl {
+
+ /**
+ * @param info
+ * @param timestamp
+ * @param tags
+ * @param metrics
+ */
+ public ExposedMetricsRecordImpl(MetricsInfo info, long timestamp, List<MetricsTag> tags,
+ Iterable<AbstractMetric> metrics) {
+ super(info, timestamp, tags, metrics);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
new file mode 100644
index 0000000..1ad1553
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
@@ -0,0 +1,34 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.metrics2.lib;
+
+import org.apache.hadoop.metrics2.lib.MetricsInfoImpl;
+
+/**
+ * Helper class to expose access to the {@link org.apache.hadoop.metrics2.lib.MetricsInfoImpl}
+ */
+public class ExposedMetricsInfoImpl extends MetricsInfoImpl {
+
+ /**
+ * @param name
+ * @param description
+ */
+ public ExposedMetricsInfoImpl(String name, String description) {
+ super(name, description);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/metrics/LoggingSink.java b/phoenix-core/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
new file mode 100644
index 0000000..2cea684
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.metrics;
+
+import org.apache.commons.configuration.SubsetConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.metrics2.AbstractMetric;
+import org.apache.hadoop.metrics2.MetricsRecord;
+import org.apache.hadoop.metrics2.MetricsSink;
+import org.apache.phoenix.trace.TracingUtils;
+
+/**
+ * Simple sink that just logs the output of all the metrics that start with
+ * {@link org.apache.phoenix.trace.TracingUtils#METRIC_SOURCE_KEY}
+ */
+public class LoggingSink implements MetricsSink {
+
+ private static final Log LOG = LogFactory.getLog(LoggingSink.class);
+
+ @Override
+ public void init(SubsetConfiguration config) {
+ }
+
+ @Override
+ public void putMetrics(MetricsRecord record) {
+ // we could wait until flush, but this is a really lightweight process, so we just write
+ // them
+ // as soon as we get them
+ if (!LOG.isDebugEnabled()) {
+ return;
+ }
+ LOG.debug("Found record:" + record.name());
+ for (AbstractMetric metric : record.metrics()) {
+ // just print the metric we care about
+ if (metric.name().startsWith(TracingUtils.METRIC_SOURCE_KEY)) {
+ LOG.debug("\t metric:" + metric);
+ }
+ }
+ }
+
+ @Override
+ public void flush() {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-core/src/test/java/org/apache/phoenix/trace/TraceMetricsSourceTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/trace/TraceMetricsSourceTest.java b/phoenix-core/src/test/java/org/apache/phoenix/trace/TraceMetricsSourceTest.java
new file mode 100644
index 0000000..5cb34b8
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/phoenix/trace/TraceMetricsSourceTest.java
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.phoenix.trace;
+
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.metrics2.MetricsCollector;
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
+import org.apache.hadoop.metrics2.MetricsTag;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.cloudera.htrace.Span;
+import org.cloudera.htrace.impl.MilliSpan;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test that the @{link TraceMetricSource} correctly handles different kinds of traces
+ */
+public class TraceMetricsSourceTest {
+
+ @BeforeClass
+ public static void setup() throws Exception{
+ DefaultMetricsSystem.setMiniClusterMode(true);
+ }
+
+ /**
+ * For PHOENIX-1126, Phoenix originally assumed all the annotation values were integers,
+ * but HBase writes some strings as well, so we need to be able to handle that too
+ */
+ @Test
+ public void testNonIntegerAnnotations(){
+ Span span = getSpan();
+ // make sure its less than the length of an integer
+ byte[] value = Bytes.toBytes("a");
+ byte[] someInt = Bytes.toBytes(1);
+ assertTrue(someInt.length >value.length);
+
+ // an annotation that is not an integer
+ span.addKVAnnotation(Bytes.toBytes("key"), value);
+
+ // Create the sink and write the span
+ TraceMetricSource source = new TraceMetricSource();
+ source.receiveSpan(span);
+ }
+
+ @Test
+ public void testIntegerAnnotations(){
+ Span span = getSpan();
+
+ // add annotation through the phoenix interfaces
+ TracingUtils.addAnnotation(span, "message", 10);
+
+ TraceMetricSource source = new TraceMetricSource();
+ source.receiveSpan(span);
+ }
+
+ /**
+ * If the source does not write any metrics when there are no spans, i.e. when initialized,
+ * then the metrics system will discard the source, so it needs to always emit some metrics.
+ */
+ @Test
+ public void testWritesInfoWhenNoSpans(){
+ TraceMetricSource source = new TraceMetricSource();
+ MetricsCollector collector = Mockito.mock(MetricsCollector.class);
+ MetricsRecordBuilder builder = Mockito.mock(MetricsRecordBuilder.class);
+ Mockito.when(collector.addRecord(Mockito.anyString())).thenReturn(builder);
+
+ source.getMetrics(collector, true);
+
+ // verify that we add a record and that the record has some info
+ Mockito.verify(collector).addRecord(Mockito.anyString());
+ Mockito.verify(builder).add(Mockito.any(MetricsTag.class));
+ }
+
+ private Span getSpan(){
+ return new MilliSpan("test span", 0, 1 , 2, "pid");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/pom.xml b/phoenix-hadoop-compat/pom.xml
deleted file mode 100644
index fef5ca4..0000000
--- a/phoenix-hadoop-compat/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix</artifactId>
- <version>4.2.0</version>
- </parent>
- <artifactId>phoenix-hadoop-compat</artifactId>
- <name>Phoenix Hadoop Compatibility</name>
- <description>Compatibility layer for Hadoop versions</description>
-
- <build>
- <plugins>
- <!-- Run with -Dmaven.test.skip.exec=true to build -tests.jar without running
- tests (this is needed for upstream projects whose tests need this jar simply for
- compilation) -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version><!--$NO-MVN-MAN-VER$-->
- <executions>
- <execution>
- <phase>prepare-package
- </phase>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <!--Make it so assembly:single does nothing in here -->
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <skipAssembly>true</skipAssembly>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.cloudera.htrace</groupId>
- <artifactId>htrace-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase-hadoop-compat</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase-common</artifactId>
- </dependency>
- </dependencies>
-</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricInfo.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricInfo.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricInfo.java
deleted file mode 100644
index e6ad976..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricInfo.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-/**
- * Metrics and their conversion from the trace name to the name we store in the stats table
- */
-public enum MetricInfo {
-
- TRACE("", "trace_id"),
- SPAN("span_id", "span_id"),
- PARENT("parent_id", "parent_id"),
- START("start_time", "start_time"),
- END("end_time", "end_time"),
- TAG("phoenix.tag", "t"),
- ANNOTATION("phoenix.annotation", "a"),
- HOSTNAME("Hostname", "hostname"),
- DESCRIPTION("", "description");
-
- public final String traceName;
- public final String columnName;
-
- private MetricInfo(String traceName, String columnName) {
- this.traceName = traceName;
- this.columnName = columnName;
- }
-
- public static String getColumnName(String traceName) {
- for (MetricInfo info : MetricInfo.values()) {
- if (info.traceName.equals(traceName)) {
- return info.columnName;
- }
- }
- throw new IllegalArgumentException("Unknown tracename: " + traceName);
- }
-}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/Metrics.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/Metrics.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/Metrics.java
deleted file mode 100644
index 5bc8545..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/Metrics.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.CompatibilitySingletonFactory;
-
-public class Metrics {
-
- private static final Log LOG = LogFactory.getLog(Metrics.class);
-
- private static volatile MetricsManager manager;
-
- private static boolean initialized;
-
- /** This must match the prefix that we are using in the hadoop-metrics2 config on the client */
- public static final String METRICS_SYSTEM_NAME = "phoenix";
- public static MetricsManager initialize() {
- MetricsManager manager = Metrics.getManager();
- // if the jars aren't on the classpath, then we don't start the metrics system
- if (manager == null) {
- LOG.warn("Phoenix metrics could not be initialized - no MetricsManager found!");
- return null;
- }
- // only initialize the metrics system once
- synchronized (Metrics.class) {
- if (!initialized) {
- LOG.info("Initializing metrics system: " + Metrics.METRICS_SYSTEM_NAME);
- manager.initialize(Metrics.METRICS_SYSTEM_NAME);
- initialized = true;
- }
- }
- return manager;
- }
-
- /**
- * @return get the first {@link MetricsManager} on the classpath. Always returns the same object
- */
- public static MetricsManager getManager(){
- if(manager == null){
- synchronized(Metrics.class){
- if(manager == null){
- manager = CompatibilitySingletonFactory.getInstance(MetricsManager.class);
- }
- }
- }
- return manager;
- }
-
- private static volatile boolean sinkInitialized = false;
-
- /**
- * Mark that the metrics/tracing sink has been initialized
- */
- public static void markSinkInitialized() {
- sinkInitialized = true;
- }
-
- public static void ensureConfigured() {
- if (!sinkInitialized) {
- LOG.warn("Phoenix metrics2/tracing sink was not started. Should be it be?");
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsManager.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsManager.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsManager.java
deleted file mode 100644
index 13c9435..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsManager.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-/**
- * Metrics management system. Backed by the underlying hadoop metrics, depending on the project on
- * the classpath.
- * <p>
- * The underlying types passed to method must match the expected metrics type - this will vary for
- * the underlying metrics systems (hadoop1 vs hadoop2), but can't be specified at this layer because
- * we must be compatible with both systems.
- */
-public interface MetricsManager {
-
- /**
- * @param metricsSystemName the metrics prefix to initialize, if it hasn't already been
- * initialized. Not assumed to be thread-safe, unless otherwise noted in the
- * implementation.
- */
- public abstract void initialize(String metricsSystemName);
-
- /**
- * Register a metrics sink
- * @param <T> the type of the sink
- * @param sink to register
- * @param name of the sink. Must be unique.
- * @param desc the description of the sink
- * @return the sink
- */
- public abstract <T> T register(String name, String desc, T sink);
-
- /**
- * Register a metrics source.
- * @param name name of the source - must be unique
- * @param description description of the source
- * @param source to register.
- * @param <T> the type of the source
- * @return the source
- */
- public abstract <T> T registerSource(String name, String description, T source);
-
- public void shutdown();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsWriter.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsWriter.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsWriter.java
deleted file mode 100644
index 0e8b9fe..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/MetricsWriter.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-
-/**
- * Generic writer for a phoenix metric
- */
-public interface MetricsWriter {
-
- public void initialize();
-
- public void flush();
-
- public void addMetrics(PhoenixMetricsRecord record);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixAbstractMetric.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixAbstractMetric.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixAbstractMetric.java
deleted file mode 100644
index 27ae6b8..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixAbstractMetric.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-
-public interface PhoenixAbstractMetric {
-
- public String getName();
-
- /**
- * Get the value of the metric
- * @return the value of the metric
- */
- public Number value();
-}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricTag.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricTag.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricTag.java
deleted file mode 100644
index 123cc1c..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricTag.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-public interface PhoenixMetricTag {
-
- public String name();
-
- public String description();
-
- public String value();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricsRecord.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricsRecord.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricsRecord.java
deleted file mode 100644
index 68f7c46..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/metrics/PhoenixMetricsRecord.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-import java.util.Collection;
-
-
-/**
- *
- */
-public interface PhoenixMetricsRecord {
-
- public String name();
-
- public String description();
-
- public Iterable<PhoenixAbstractMetric> metrics();
-
- public Collection<PhoenixMetricTag> tags();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/PhoenixSpanReceiver.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/PhoenixSpanReceiver.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/PhoenixSpanReceiver.java
deleted file mode 100644
index 7e4e09c..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/PhoenixSpanReceiver.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import org.cloudera.htrace.SpanReceiver;
-
-/**
- * Marker interface for phoenix specific receivers.
- */
-public interface PhoenixSpanReceiver extends SpanReceiver {
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TestableMetricsWriter.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TestableMetricsWriter.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TestableMetricsWriter.java
deleted file mode 100644
index b6bc75d..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TestableMetricsWriter.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import org.apache.phoenix.metrics.MetricsWriter;
-
-/**
- * Marker interface for a MetricsWriter that can be registered to the current metrics system. The
- * writer should convert from the metrics information it receives from the metrics system to Phoenix
- * records that the MetricsWriter can read (and subsequently write).
- */
-public interface TestableMetricsWriter {
-
- public void setWriterForTesting(MetricsWriter writer);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TracingCompat.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TracingCompat.java b/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TracingCompat.java
deleted file mode 100644
index e0a3410..0000000
--- a/phoenix-hadoop-compat/src/main/java/org/apache/phoenix/trace/TracingCompat.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.CompatibilityFactory;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.util.Pair;
-import org.apache.phoenix.metrics.MetricsWriter;
-import org.cloudera.htrace.Span;
-import org.cloudera.htrace.SpanReceiver;
-
-/**
- * Utilities for tracing that are common among the compatibility and core classes.
- */
-public class TracingCompat {
-
- private static final Log LOG = LogFactory.getLog(TracingCompat.class);
-
- /**
- * @return a new SpanReceiver that will write to the correct metrics system
- */
- public static SpanReceiver newTraceMetricSource() {
- return CompatibilityFactory.getInstance(PhoenixSpanReceiver.class);
- }
-
- public static final String METRIC_SOURCE_KEY = "phoenix.";
-
- /** Set context to enable filtering */
- public static final String METRICS_CONTEXT = "tracing";
-
- /** Marker metric to ensure that we register the tracing mbeans */
- public static final String METRICS_MARKER_CONTEXT = "marker";
-
- public static void addAnnotation(Span span, String message, int value) {
- span.addKVAnnotation(message.getBytes(), Bytes.toBytes(Integer.toString(value)));
- }
-
- public static Pair<String, String> readAnnotation(byte[] key, byte[] value) {
- return new Pair<String, String>(new String(key), Bytes.toString(value));
- }
-
- public static MetricsWriter initializeWriter(String clazz) {
- try {
- MetricsWriter writer =
- Class.forName(clazz).asSubclass(MetricsWriter.class).newInstance();
- writer.initialize();
- return writer;
- } catch (InstantiationException e) {
- LOG.error("Failed to create metrics writer: " + clazz, e);
- } catch (IllegalAccessException e) {
- LOG.error("Failed to create metrics writer: " + clazz, e);
- } catch (ClassNotFoundException e) {
- LOG.error("Failed to create metrics writer: " + clazz, e);
- }
- return null;
- }
-
- /**
- * @see #getTraceMetricName(String)
- */
- public static final String getTraceMetricName(long traceId) {
- return getTraceMetricName(Long.toString(traceId));
- }
-
- /**
- * @param traceId unique id of the trace
- * @return the name of the metric record that should be generated for a given trace
- */
- public static final String getTraceMetricName(String traceId) {
- return METRIC_SOURCE_KEY + traceId;
- }
-}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/LoggingSink.java b/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
deleted file mode 100644
index 97682b3..0000000
--- a/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/LoggingSink.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.phoenix.trace.TracingCompat;
-
-/**
- * Simple sink that just logs the output of all the metrics that start with
- * {@link TracingCompat#METRIC_SOURCE_KEY}
- */
-public class LoggingSink implements MetricsWriter {
-
- private static final Log LOG = LogFactory.getLog(LoggingSink.class);
-
- @Override
- public void initialize() {
- }
-
- @Override
- public void addMetrics(PhoenixMetricsRecord record) {
- // we could wait until flush, but this is a really lightweight process, so we just write
- // them
- // as soon as we get them
- if (!LOG.isDebugEnabled()) {
- return;
- }
- LOG.debug("Found record:" + record.name());
- for (PhoenixAbstractMetric metric : record.metrics()) {
- // just print the metric we care about
- if (metric.getName().startsWith(TracingCompat.METRIC_SOURCE_KEY)) {
- LOG.debug("\t metric:" + metric);
- }
- }
- }
-
- @Override
- public void flush() {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/TracingTestCompat.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/TracingTestCompat.java b/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/TracingTestCompat.java
deleted file mode 100644
index 8dd8a41..0000000
--- a/phoenix-hadoop-compat/src/test/java/org/apache/phoenix/metrics/TracingTestCompat.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-import org.apache.hadoop.hbase.CompatibilityFactory;
-import org.apache.phoenix.trace.TestableMetricsWriter;
-
-/**
- * Utility class for testing tracing
- */
-public class TracingTestCompat {
-
- private TracingTestCompat() {
- assert false;
- }
-
- public static TestableMetricsWriter newTraceMetricSink() {
- return CompatibilityFactory.getInstance(TestableMetricsWriter.class);
- }
-
- /**
- * Register the sink with the metrics system, so we don't need to specify it in the conf
- * @param sink
- */
- public static void registerSink(MetricsWriter sink) {
- TestableMetricsWriter writer = newTraceMetricSink();
- writer.setWriterForTesting(sink);
- Metrics.getManager().register("phoenix", "test sink gets logged", writer);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/pom.xml
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/pom.xml b/phoenix-hadoop2-compat/pom.xml
deleted file mode 100644
index e762678..0000000
--- a/phoenix-hadoop2-compat/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version='1.0'?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix</artifactId>
- <version>4.2.0</version>
- </parent>
- <artifactId>phoenix-hadoop2-compat</artifactId>
- <name>Phoenix Hadoop2 Compatibility</name>
-
- <dependencies>
- <!-- Intra-project dependencies -->
- <dependency>
- <groupId>org.apache.phoenix</groupId>
- <artifactId>phoenix-hadoop-compat</artifactId>
- </dependency>
- <!-- HBase -->
- <dependency>
- <groupId>org.apache.hbase</groupId>
- <artifactId>hbase-common</artifactId>
- <exclusions>
- <exclusion>
- <artifactId>hadoop-core</artifactId>
- <groupId>org.apache.hadoop</groupId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- Hadoop -->
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-mapreduce-client-core</artifactId>
- <version>${hadoop-two.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-annotations</artifactId>
- <version>${hadoop-two.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>${hadoop-two.version}</version>
- </dependency>
- <!-- Other -->
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <!-- Test -->
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- </dependency>
- </dependencies>
-</project>
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/metrics/MetricsManagerImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/metrics/MetricsManagerImpl.java b/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/metrics/MetricsManagerImpl.java
deleted file mode 100644
index 03e06a5..0000000
--- a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/metrics/MetricsManagerImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
- */
-package org.apache.phoenix.metrics;
-
-import java.util.Arrays;
-
-import org.apache.hadoop.metrics2.MetricsSink;
-import org.apache.hadoop.metrics2.MetricsSource;
-import org.apache.hadoop.metrics2.MetricsSystem;
-import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
-
-import com.google.common.base.Preconditions;
-
-/**
- *
- */
-public class MetricsManagerImpl implements MetricsManager {
-
- private MetricsSystem system;
-
- @Override
- /**
- * Register a metrics sink
- * @param <T> the type of the sink.
- * @param sink to register
- * @param name of the sink. Must be unique.
- * @param desc the description of the sink
- * @return the sink
- * @throws IllegalArgumentException if sink is not a MetricsSink
- */
- public <T> T register(String name, String desc, T sink) {
- isA(sink, MetricsSink.class);
- return (T) system.register(name, desc, (MetricsSink) sink);
- }
-
- public <T> T registerSource(String name, String desc, T source) {
- isA(source, MetricsSource.class);
- return (T) system.register(name, desc, (MetricsSource) source);
- }
-
- @Override
- public void initialize(String prefix) {
- this.system = DefaultMetricsSystem.initialize(prefix);
- }
-
- private <T> void isA(T object, Class<?>... classes) {
- boolean match = false;
- for (Class<?> clazz : classes) {
- if (clazz.isAssignableFrom(object.getClass())) {
- match = true;
- break;
- }
- }
- Preconditions.checkArgument(match, object + " is not one of " + Arrays.toString(classes));
- }
-
- @Override
- public void shutdown() {
- if (this.system != null) {
- this.system.shutdown();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/MetricsInfoImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/MetricsInfoImpl.java b/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/MetricsInfoImpl.java
deleted file mode 100644
index 47c1dda..0000000
--- a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/MetricsInfoImpl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import com.google.common.base.Objects;
-import static com.google.common.base.Preconditions.*;
-import org.apache.hadoop.metrics2.MetricsInfo;
-
-/**
- * Making implementing metric info a little easier
- * <p>
- * Just a copy of the same from Hadoop, but exposed for usage.
- */
-public class MetricsInfoImpl implements MetricsInfo {
- private final String name, description;
-
- MetricsInfoImpl(String name, String description) {
- this.name = checkNotNull(name, "name");
- this.description = checkNotNull(description, "description");
- }
-
- @Override public String name() {
- return name;
- }
-
- @Override public String description() {
- return description;
- }
-
- @Override public boolean equals(Object obj) {
- if (obj instanceof MetricsInfo) {
- MetricsInfo other = (MetricsInfo) obj;
- return Objects.equal(name, other.name()) &&
- Objects.equal(description, other.description());
- }
- return false;
- }
-
- @Override public int hashCode() {
- return Objects.hashCode(name, description);
- }
-
- @Override public String toString() {
- return Objects.toStringHelper(this)
- .add("name", name).add("description", description)
- .toString();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java b/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java
deleted file mode 100644
index 3de7da3..0000000
--- a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/PhoenixMetricsSink.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.annotation.Nullable;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.SubsetConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.metrics2.AbstractMetric;
-import org.apache.hadoop.metrics2.MetricsRecord;
-import org.apache.hadoop.metrics2.MetricsSink;
-import org.apache.hadoop.metrics2.MetricsTag;
-import org.apache.phoenix.metrics.Metrics;
-import org.apache.phoenix.metrics.MetricsWriter;
-import org.apache.phoenix.metrics.PhoenixAbstractMetric;
-import org.apache.phoenix.metrics.PhoenixMetricTag;
-import org.apache.phoenix.metrics.PhoenixMetricsRecord;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterators;
-
-/**
- * Translate metrics from a Hadoop2 metrics2 metric to a generic PhoenixMetric that a
- * {@link MetricsWriter} can then write out.
- * <p>
- * This class becomes unnecessary once we drop Hadoop1 support.
- */
-public class PhoenixMetricsSink implements MetricsSink, TestableMetricsWriter {
-
- private static final Log LOG = LogFactory.getLog(PhoenixMetricsSink.class);
- /**
- * Metrics configuration key for the class that should be used for writing the output.
- * <p>
- * This would actually be set as: <code>
- * phoenix.sink.<some instance name>.writer-class
- * </code> Where <tt>some instance name</tt> is just any unique name, so properties can be
- * differentiated
- */
- public static final String PHOENIX_METRICS_WRITER_CLASS = "writer-class";
-
- public static void setWriterClass(MetricsWriter writer, Configuration conf) {
- conf.setProperty(PHOENIX_METRICS_WRITER_CLASS, writer.getClass().getName());
- }
-
- private MetricsWriter writer;
-
- public PhoenixMetricsSink() {
- LOG.info("Writing tracing metrics to phoenix table");
- Metrics.markSinkInitialized();
- }
-
- @Override
- public void init(SubsetConfiguration config) {
- // instantiate the configured writer class
- String clazz = config.getString(PHOENIX_METRICS_WRITER_CLASS);
- LOG.info("Instantiating writer class: " + clazz);
- this.writer = TracingCompat.initializeWriter(clazz);
- Preconditions.checkNotNull(writer, "Could not correctly initialize metrics writer!");
- }
-
- @Override
- @VisibleForTesting
- public void setWriterForTesting(MetricsWriter writer) {
- this.writer = writer;
- }
-
- @Override
- public void putMetrics(MetricsRecord record) {
- writer.addMetrics(wrap(record));
- }
-
- @Override
- public void flush() {
- writer.flush();
- }
-
- /**
- * Convert the passed record to a {@link PhoenixMetricsRecord}
- * @param record to convert
- * @return a generic {@link PhoenixMetricsRecord} that delegates to the record in all things
- */
- private PhoenixMetricsRecord wrap(final MetricsRecord record) {
- return new PhoenixMetricsRecord() {
-
- @Override
- public String name() {
- return record.name();
- }
-
- @Override
- public String description() {
- return record.description();
- }
-
- @Override
- public Iterable<PhoenixAbstractMetric> metrics() {
- final Iterable<AbstractMetric> iterable = record.metrics();
- return new Iterable<PhoenixAbstractMetric>(){
-
- @Override
- public Iterator<PhoenixAbstractMetric> iterator() {
- final Iterator<AbstractMetric> iter = iterable.iterator();
- return Iterators.transform(iter, new Function<AbstractMetric, PhoenixAbstractMetric>() {
-
- @Override
- @Nullable
- public PhoenixAbstractMetric apply(@Nullable final AbstractMetric input) {
- if (input == null) {
- return null;
- }
- return new PhoenixAbstractMetric() {
-
- @Override
- public Number value() {
- return input.value();
- }
-
- @Override
- public String getName() {
- return input.name();
- }
-
- @Override
- public String toString() {
- return input.toString();
- }
- };
- }
- });
- }
- };
- }
-
- @Override
- public Collection<PhoenixMetricTag> tags() {
- Collection<PhoenixMetricTag> tags = new ArrayList<PhoenixMetricTag>();
- Collection<MetricsTag> origTags = record.tags();
- for (final MetricsTag tag : origTags) {
- tags.add(new PhoenixMetricTag() {
-
- @Override
- public String name() {
- return tag.name();
- }
-
- @Override
- public String description() {
- return tag.description();
- }
-
- @Override
- public String value() {
- return tag.value();
- }
-
- @Override
- public String toString() {
- return tag.toString();
- }
-
- });
- }
- return tags;
- }
-
- };
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/TraceMetricSource.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/TraceMetricSource.java b/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/TraceMetricSource.java
deleted file mode 100644
index 1114a95..0000000
--- a/phoenix-hadoop2-compat/src/main/java/org/apache/phoenix/trace/TraceMetricSource.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import static org.apache.phoenix.metrics.MetricInfo.ANNOTATION;
-import static org.apache.phoenix.metrics.MetricInfo.END;
-import static org.apache.phoenix.metrics.MetricInfo.PARENT;
-import static org.apache.phoenix.metrics.MetricInfo.SPAN;
-import static org.apache.phoenix.metrics.MetricInfo.START;
-import static org.apache.phoenix.metrics.MetricInfo.TAG;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.hadoop.hbase.util.Pair;
-import org.apache.hadoop.metrics2.MetricsCollector;
-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.Interns;
-import org.apache.phoenix.metrics.MetricInfo;
-import org.apache.phoenix.metrics.Metrics;
-import org.apache.phoenix.metrics.MetricsManager;
-import org.cloudera.htrace.HTraceConfiguration;
-import org.cloudera.htrace.Span;
-import org.cloudera.htrace.SpanReceiver;
-import org.cloudera.htrace.TimelineAnnotation;
-import org.cloudera.htrace.impl.MilliSpan;
-
-/**
- * Sink for request traces ({@link SpanReceiver}) that pushes writes to {@link MetricsSource} in a
- * format that we can more easily consume.
- * <p>
- * <p>
- * Rather than write directly to a phoenix table, we drop it into the metrics queue so we can more
- * cleanly handle it asyncrhonously.Currently, {@link MilliSpan} submits the span in a synchronized
- * block to all the receivers, which could have a lot of overhead if we are submitting to multiple
- * receivers.
- * <p>
- * The format of the generated metrics is this:
- * <ol>
- * <li>All Metrics from the same span have the same name (allowing correlation in the sink)</li>
- * <li>The description of the metric describes what it contains. For instance,
- * <ul>
- * <li>{@link MetricInfo#PARENT} is the id of the parent of this span. (Root span is
- * {@link Span#ROOT_SPAN_ID}).</li>
- * <li>{@value MetricInfo#START} is the start time of the span</li>
- * <li>{@value MetricInfo#END} is the end time of the span</li>
- * </ul></li>
- * <li>Each span's messages are contained in a {@link MetricsTag} with the same name as above and a
- * generic counter for the number of messages (to differentiate messages and provide timeline
- * ordering).</li>
- * </ol>
- * <p>
- * <i>So why even submit to metrics2 framework if we only have a single source?</i>
- * <p>
- * This allows us to make the updates in batches. We might have spans that finish before other spans
- * (for instance in the same parent). By batching the updates we can lessen the overhead on the
- * client, which is also busy doing 'real' work. <br>
- * We could make our own queue and manage batching and filtering and dropping extra metrics, but
- * that starts to get complicated fast (its not as easy as it sounds) so we use metrics2 to abstract
- * out that pipeline and also provides us flexibility to dump metrics to other sources.
- * <p>
- * This is a somewhat rough implementation - we do excessive locking for correctness,
- * rather than trying to make it fast, for the moment.
- */
-public class TraceMetricSource implements PhoenixSpanReceiver, MetricsSource {
-
- private static final String EMPTY_STRING = "";
-
- private static final String CONTEXT = "tracing";
-
- private List<Metric> spans = new ArrayList<Metric>();
-
- public TraceMetricSource() {
- MetricsManager manager = Metrics.initialize();
-
- // Register this instance.
- // For right now, we ignore the MBean registration issues that show up in DEBUG logs. Basically,
- // we need a Jmx MBean compliant name. We'll get to a better name when we want that later
- manager.registerSource(CONTEXT, "Phoenix call tracing", this);
- }
-
- @Override
- public void receiveSpan(Span span) {
- Metric builder = new Metric(span);
- // add all the metrics for the span
- builder.addCounter(Interns.info(SPAN.traceName, EMPTY_STRING), span.getSpanId());
- builder.addCounter(Interns.info(PARENT.traceName, EMPTY_STRING), span.getParentId());
- builder.addCounter(Interns.info(START.traceName, EMPTY_STRING), span.getStartTimeMillis());
- builder.addCounter(Interns.info(END.traceName, EMPTY_STRING), span.getStopTimeMillis());
- // add the tags to the span. They were written in order received so we mark them as such
- for (TimelineAnnotation ta : span.getTimelineAnnotations()) {
- builder.add(new MetricsTag(Interns.info(TAG.traceName, Long.toString(ta.getTime())), ta
- .getMessage()));
- }
-
- // add the annotations. We assume they are serialized as strings and integers, but that can
- // change in the future
- Map<byte[], byte[]> annotations = span.getKVAnnotations();
- for (Entry<byte[], byte[]> annotation : annotations.entrySet()) {
- Pair<String, String> val =
- TracingCompat.readAnnotation(annotation.getKey(), annotation.getValue());
- builder.add(new MetricsTag(Interns.info(ANNOTATION.traceName, val.getFirst()), val
- .getSecond()));
- }
-
- // add the span to the list we care about
- synchronized (this) {
- spans.add(builder);
- }
- }
-
- @Override
- public void getMetrics(MetricsCollector collector, boolean all) {
- // add a marker record so we know how many spans are used
- // this is also necessary to ensure that we register the metrics source as an MBean (avoiding a
- // runtime warning)
- MetricsRecordBuilder marker = collector.addRecord(TracingCompat.METRICS_MARKER_CONTEXT);
- marker.add(new MetricsTag(new MetricsInfoImpl("stat", "num spans"), Integer
- .toString(spans.size())));
-
- // actually convert the known spans into metric records as well
- synchronized (this) {
- for (Metric span : spans) {
- MetricsRecordBuilder builder = collector.addRecord(new MetricsInfoImpl(TracingCompat
- .getTraceMetricName(span.id), span.desc));
- builder.setContext(TracingCompat.METRICS_CONTEXT);
- for (Pair<MetricsInfo, Long> metric : span.counters) {
- builder.addCounter(metric.getFirst(), metric.getSecond());
- }
- for (MetricsTag tag : span.tags) {
- builder.add(tag);
- }
- }
- // reset the spans so we don't keep a big chunk of memory around
- spans = new ArrayList<Metric>();
- }
- }
-
- @Override
- public void close() throws IOException {
- // noop
- }
-
- @Override
- public void configure(HTraceConfiguration conf) {
- // noop
- }
-
- private static class Metric {
-
- List<Pair<MetricsInfo, Long>> counters = new ArrayList<Pair<MetricsInfo, Long>>();
- List<MetricsTag> tags = new ArrayList<MetricsTag>();
- private String id;
- private String desc;
-
- public Metric(Span span) {
- this.id = Long.toString(span.getTraceId());
- this.desc = span.getDescription();
- }
-
- /**
- * @param metricsInfoImpl
- * @param startTimeMillis
- */
- public void addCounter(MetricsInfo metricsInfoImpl, long startTimeMillis) {
- counters.add(new Pair<MetricsInfo, Long>(metricsInfoImpl, startTimeMillis));
- }
-
- /**
- * @param metricsTag
- */
- public void add(MetricsTag metricsTag) {
- tags.add(metricsTag);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.metrics.MetricsManager
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.metrics.MetricsManager b/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.metrics.MetricsManager
deleted file mode 100644
index 8430a48..0000000
--- a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.metrics.MetricsManager
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.phoenix.metrics.MetricsManagerImpl
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.PhoenixSpanReceiver
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.PhoenixSpanReceiver b/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.PhoenixSpanReceiver
deleted file mode 100644
index 3694093..0000000
--- a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.PhoenixSpanReceiver
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.phoenix.trace.TraceMetricSource
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.TestableMetricsWriter
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.TestableMetricsWriter b/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.TestableMetricsWriter
deleted file mode 100644
index 7c9e107..0000000
--- a/phoenix-hadoop2-compat/src/main/resources/META-INF/services/org.apache.phoenix.trace.TestableMetricsWriter
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.phoenix.trace.PhoenixMetricsSink
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java b/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
deleted file mode 100644
index 33ca738..0000000
--- a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricCounterLong.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.metrics2.impl;
-
-import org.apache.hadoop.metrics2.MetricsInfo;
-import org.apache.hadoop.metrics2.impl.MetricCounterLong;
-
-/**
- *
- */
-public class ExposedMetricCounterLong extends MetricCounterLong {
-
- /**
- * @param info
- * @param value
- */
- public ExposedMetricCounterLong(MetricsInfo info, long value) {
- super(info, value);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java b/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
deleted file mode 100644
index bcb8b43..0000000
--- a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/impl/ExposedMetricsRecordImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.metrics2.impl;
-
-import java.util.List;
-
-import org.apache.hadoop.metrics2.AbstractMetric;
-import org.apache.hadoop.metrics2.MetricsInfo;
-import org.apache.hadoop.metrics2.MetricsTag;
-import org.apache.hadoop.metrics2.impl.MetricsRecordImpl;
-
-/**
- * Helper class to access the package-private {@link MetricsRecordImpl}
- */
-@SuppressWarnings("javadoc")
-public class ExposedMetricsRecordImpl extends MetricsRecordImpl {
-
- /**
- * @param info
- * @param timestamp
- * @param tags
- * @param metrics
- */
- public ExposedMetricsRecordImpl(MetricsInfo info, long timestamp, List<MetricsTag> tags,
- Iterable<AbstractMetric> metrics) {
- super(info, timestamp, tags, metrics);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java b/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
deleted file mode 100644
index 6daf604..0000000
--- a/phoenix-hadoop2-compat/src/test/java/org/apache/hadoop/metrics2/lib/ExposedMetricsInfoImpl.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.metrics2.lib;
-
-/**
- * Helper class to expose access to the {@link MetricsInfoImpl}
- */
-public class ExposedMetricsInfoImpl extends MetricsInfoImpl {
-
- /**
- * @param name
- * @param description
- */
- public ExposedMetricsInfoImpl(String name, String description) {
- super(name, description);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/b48ca7b5/phoenix-hadoop2-compat/src/test/java/org/apache/phoenix/trace/PhoenixMetricsWriterTest.java
----------------------------------------------------------------------
diff --git a/phoenix-hadoop2-compat/src/test/java/org/apache/phoenix/trace/PhoenixMetricsWriterTest.java b/phoenix-hadoop2-compat/src/test/java/org/apache/phoenix/trace/PhoenixMetricsWriterTest.java
deleted file mode 100644
index f865723..0000000
--- a/phoenix-hadoop2-compat/src/test/java/org/apache/phoenix/trace/PhoenixMetricsWriterTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.trace;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
-import org.apache.hadoop.metrics2.AbstractMetric;
-import org.apache.hadoop.metrics2.MetricsInfo;
-import org.apache.hadoop.metrics2.MetricsRecord;
-import org.apache.hadoop.metrics2.MetricsTag;
-import org.apache.hadoop.metrics2.impl.ExposedMetricCounterLong;
-import org.apache.hadoop.metrics2.impl.ExposedMetricsRecordImpl;
-import org.apache.hadoop.metrics2.lib.ExposedMetricsInfoImpl;
-import org.apache.phoenix.metrics.MetricInfo;
-import org.apache.phoenix.metrics.MetricsWriter;
-import org.apache.phoenix.metrics.PhoenixAbstractMetric;
-import org.apache.phoenix.metrics.PhoenixMetricTag;
-import org.apache.phoenix.metrics.PhoenixMetricsRecord;
-import org.junit.Test;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import com.google.common.collect.Lists;
-
-/**
- * Test that we correctly convert between hadoop2 metrics2 and generic phoenix metrics.
- */
-public class PhoenixMetricsWriterTest {
-
- @Test
- public void testTranslation() throws Exception {
- // hook up a sink we can test
- MetricsWriter mockSink = Mockito.mock(MetricsWriter.class);
-
- // writer that will translate to the sink (specific to hadoop version used)
- PhoenixMetricsSink writer = new PhoenixMetricsSink();
- writer.setWriterForTesting(mockSink);
-
- // create a simple metrics record
- final long traceid = 987654;
- MetricsInfo info = new ExposedMetricsInfoImpl(TracingCompat.getTraceMetricName(traceid),
- "Some generic trace");
- // setup some metrics for the span
- long spanid = 10;
- AbstractMetric span = new ExposedMetricCounterLong(new ExposedMetricsInfoImpl(
- MetricInfo.SPAN.traceName, ""), spanid);
- long parentid = 11;
- AbstractMetric parent = new ExposedMetricCounterLong(new ExposedMetricsInfoImpl(
- MetricInfo.PARENT.traceName, ""), parentid);
- long startTime = 12;
- AbstractMetric start = new ExposedMetricCounterLong(new ExposedMetricsInfoImpl(
- MetricInfo.START.traceName, ""), startTime);
- long endTime = 13;
- AbstractMetric end = new ExposedMetricCounterLong(new ExposedMetricsInfoImpl(
- MetricInfo.END.traceName, ""), endTime);
- final List<AbstractMetric> metrics = Lists.newArrayList(span, parent, start, end);
-
- // create an annotation as well
- String annotation = "test annotation for a span";
- MetricsTag tag = new MetricsTag(
- new ExposedMetricsInfoImpl(MetricInfo.ANNOTATION.traceName, "0"), annotation);
- String hostnameValue = "host-name.value";
- MetricsTag hostname = new MetricsTag(new ExposedMetricsInfoImpl(MetricInfo.HOSTNAME.traceName,
- ""), hostnameValue);
- final List<MetricsTag> tags = Lists.newArrayList(hostname, tag);
-
- MetricsRecord record = new ExposedMetricsRecordImpl(info, System.currentTimeMillis(), tags,
- metrics);
-
- // setup the mocking/validation for the sink
- Mockito.doAnswer(new Answer<Void>() {
-
- @Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
- PhoenixMetricsRecord record = (PhoenixMetricsRecord) invocation.getArguments()[0];
- //validate that we got the right fields in the record
- assertEquals("phoenix.987654", record.name());
- assertEquals("Some generic trace", record.description());
- int count = 0;
- for (PhoenixAbstractMetric metric : record.metrics()) {
- count++;
- //find the matching metric in the list
- boolean found = false;
- for(AbstractMetric expected : metrics){
- if(expected.name().equals(metric.getName())){
- found = true;
- // make sure the rest of the info matches
- assertEquals("Metric value mismatch", expected.value(), metric.value());
- }
- }
- assertTrue("Didn't find an expected metric to match "+metric, found);
- }
- assertEquals("Number of metrics is received is wrong", metrics.size(), count);
-
- count = 0;
- for (PhoenixMetricTag tag : record.tags()) {
- count++;
- // find the matching metric in the list
- boolean found = false;
- for (MetricsTag expected : tags) {
- if (expected.name().equals(tag.name())) {
- found = true;
- // make sure the rest of the info matches
- assertEquals("Tag value mismatch", expected.value(), tag.value());
- assertEquals("Tag description mismatch", expected.description(), tag.description());
- }
- }
- assertTrue("Didn't find an expected metric to match " + tag, found);
- }
- assertEquals("Number of tags is received is wrong", tags.size(), count);
- return null;
- }
-
- }).when(mockSink).addMetrics(Mockito.any(PhoenixMetricsRecord.class));
-
- // actually do the update
- writer.putMetrics(record);
- writer.flush();
-
- Mockito.verify(mockSink).addMetrics(Mockito.any(PhoenixMetricsRecord.class));
- Mockito.verify(mockSink).flush();
- }
-}
\ No newline at end of file