hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject svn commit: r1594110 - in /hbase/trunk: hbase-common/ hbase-common/src/main/java/org/apache/hadoop/hbase/trace/ hbase-server/src/main/java/org/apache/hadoop/hbase/trace/ src/main/docbkx/
Date Mon, 12 May 2014 22:43:40 GMT
Author: stack
Date: Mon May 12 22:43:40 2014
New Revision: 1594110

URL: http://svn.apache.org/r1594110
Log:
HBASE-11151 move tracing modules from hbase-server to hbase-common (Masatake Iwasaki)

Added:
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.java
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/SpanReceiverHost.java
Removed:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/trace/
Modified:
    hbase/trunk/hbase-common/pom.xml
    hbase/trunk/src/main/docbkx/tracing.xml

Modified: hbase/trunk/hbase-common/pom.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/pom.xml?rev=1594110&r1=1594109&r2=1594110&view=diff
==============================================================================
--- hbase/trunk/hbase-common/pom.xml (original)
+++ hbase/trunk/hbase-common/pom.xml Mon May 12 22:43:40 2014
@@ -206,6 +206,11 @@
       <artifactId>commons-io</artifactId>
       <scope>compile</scope>
     </dependency>
+    <!-- tracing Dependencies -->
+    <dependency>
+      <groupId>org.htrace</groupId>
+      <artifactId>htrace-core</artifactId>
+    </dependency>
   </dependencies>
 
   <profiles>

Added: hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.java?rev=1594110&view=auto
==============================================================================
--- hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.java
(added)
+++ hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/HBaseHTraceConfiguration.java
Mon May 12 22:43:40 2014
@@ -0,0 +1,48 @@
+/**
+ * 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.hbase.trace;
+
+import org.apache.hadoop.conf.Configuration;
+import org.htrace.HTraceConfiguration;
+
+public class HBaseHTraceConfiguration extends HTraceConfiguration {
+
+  public static final String KEY_PREFIX = "hbase.";
+  private Configuration conf;
+
+  public HBaseHTraceConfiguration(Configuration conf) {
+    this.conf = conf;
+  }
+
+  @Override
+  public String get(String key) {
+    return conf.get(KEY_PREFIX +key);
+  }
+
+  @Override
+  public String get(String key, String defaultValue) {
+    return conf.get(KEY_PREFIX + key,defaultValue);
+
+  }
+
+  @Override
+  public boolean getBoolean(String key, boolean defaultValue) {
+    return conf.getBoolean(KEY_PREFIX + key, defaultValue);
+  }
+}

Added: hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/SpanReceiverHost.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/SpanReceiverHost.java?rev=1594110&view=auto
==============================================================================
--- hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/SpanReceiverHost.java
(added)
+++ hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/trace/SpanReceiverHost.java
Mon May 12 22:43:40 2014
@@ -0,0 +1,141 @@
+/**
+ * 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.hbase.trace;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.htrace.SpanReceiver;
+import org.htrace.Trace;
+
+/**
+ * This class provides functions for reading the names of SpanReceivers from
+ * hbase-site.xml, adding those SpanReceivers to the Tracer, and closing those
+ * SpanReceivers when appropriate.
+ */
+public class SpanReceiverHost {
+  public static final String SPAN_RECEIVERS_CONF_KEY = "hbase.trace.spanreceiver.classes";
+  private static final Log LOG = LogFactory.getLog(SpanReceiverHost.class);
+  private Collection<SpanReceiver> receivers;
+  private Configuration conf;
+  private boolean closed = false;
+
+  private static enum SingletonHolder {
+    INSTANCE;
+    Object lock = new Object();
+    SpanReceiverHost host = null;
+  }
+
+  public static SpanReceiverHost getInstance(Configuration conf) {
+    if (SingletonHolder.INSTANCE.host != null) {
+      return SingletonHolder.INSTANCE.host;
+    }
+    synchronized (SingletonHolder.INSTANCE.lock) {
+      if (SingletonHolder.INSTANCE.host != null) {
+        return SingletonHolder.INSTANCE.host;
+      }
+
+      SpanReceiverHost host = new SpanReceiverHost(conf);
+      host.loadSpanReceivers();
+      SingletonHolder.INSTANCE.host = host;
+      return SingletonHolder.INSTANCE.host;
+    }
+
+  }
+
+  SpanReceiverHost(Configuration conf) {
+    receivers = new HashSet<SpanReceiver>();
+    this.conf = conf;
+  }
+
+  /**
+   * Reads the names of classes specified in the
+   * "hbase.trace.spanreceiver.classes" property and instantiates and registers
+   * them with the Tracer as SpanReceiver's.
+   *
+   */
+  public void loadSpanReceivers() {
+    Class<?> implClass = null;
+    String[] receiverNames = conf.getStrings(SPAN_RECEIVERS_CONF_KEY);
+    if (receiverNames == null || receiverNames.length == 0) {
+      return;
+    }
+    for (String className : receiverNames) {
+      className = className.trim();
+
+      try {
+        implClass = Class.forName(className);
+        SpanReceiver receiver = loadInstance(implClass);
+        if (receiver != null) {
+          receivers.add(receiver);
+          LOG.info("SpanReceiver " + className + " was loaded successfully.");
+        }
+
+      } catch (ClassNotFoundException e) {
+        LOG.warn("Class " + className + " cannot be found. " + e.getMessage());
+      } catch (IOException e) {
+        LOG.warn("Load SpanReceiver " + className + " failed. "
+            + e.getMessage());
+      }
+    }
+    for (SpanReceiver rcvr : receivers) {
+      Trace.addReceiver(rcvr);
+    }
+  }
+
+  private SpanReceiver loadInstance(Class<?> implClass)
+      throws IOException {
+    SpanReceiver impl = null;
+    try {
+      Object o = implClass.newInstance();
+      impl = (SpanReceiver)o;
+      impl.configure(new HBaseHTraceConfiguration(this.conf));
+    } catch (SecurityException e) {
+      throw new IOException(e);
+    } catch (IllegalArgumentException e) {
+      throw new IOException(e);
+    } catch (RuntimeException e) {
+      throw new IOException(e);
+    } catch (InstantiationException e) {
+      e.printStackTrace();
+    } catch (IllegalAccessException e) {
+      e.printStackTrace();
+    }
+
+    return impl;
+  }
+
+  /**
+   * Calls close() on all SpanReceivers created by this SpanReceiverHost.
+   */
+  public synchronized void closeReceivers() {
+    if (closed) return;
+    closed = true;
+    for (SpanReceiver rcvr : receivers) {
+      try {
+        rcvr.close();
+      } catch (IOException e) {
+        LOG.warn("Unable to close SpanReceiver correctly: " + e.getMessage(), e);
+      }
+    }
+  }
+}

Modified: hbase/trunk/src/main/docbkx/tracing.xml
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/docbkx/tracing.xml?rev=1594110&r1=1594109&r2=1594110&view=diff
==============================================================================
--- hbase/trunk/src/main/docbkx/tracing.xml (original)
+++ hbase/trunk/src/main/docbkx/tracing.xml Mon May 12 22:43:40 2014
@@ -141,8 +141,6 @@
       In order to turn on tracing in your client code,
       you must initialize the module sending spans to receiver
       once per client process.
-      (Because <classname>SpanReceiverHost</classname> is included in hbase-server
jar,
-      you need it on the client classpath in order to run this example.)
 <programlisting><![CDATA[
   private SpanReceiverHost spanReceiverHost;
   



Mime
View raw message