http://git-wip-us.apache.org/repos/asf/accumulo/blob/6b5f5ef4/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
new file mode 100644
index 0000000..60ffff7
--- /dev/null
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
@@ -0,0 +1,502 @@
+/*
+ * 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.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.tracer.thrift;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("all") public class Annotation implements 
org.apache.thrift.TBase<Annotation, Annotation._Fields>, java.io.Serializable, 
Cloneable, Comparable<Annotation> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("Annotation");
+
+  private static final org.apache.thrift.protocol.TField TIME_FIELD_DESC = new 
org.apache.thrift.protocol.TField("time", org.apache.thrift.protocol.TType.I64, 
(short)1);
+  private static final org.apache.thrift.protocol.TField MSG_FIELD_DESC = new 
org.apache.thrift.protocol.TField("msg", 
org.apache.thrift.protocol.TType.STRING, (short)2);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = 
new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new AnnotationStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new AnnotationTupleSchemeFactory());
+  }
+
+  public long time; // required
+  public String msg; // required
+
+  /** The set of fields this struct contains, along with convenience methods 
for finding and manipulating them. */
+  @SuppressWarnings("all") public enum _Fields implements 
org.apache.thrift.TFieldIdEnum {
+    TIME((short)1, "time"),
+    MSG((short)2, "msg");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, 
_Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not 
found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // TIME
+          return TIME;
+        case 2: // MSG
+          return MSG;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + 
fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __TIME_ISSET_ID = 0;
+  private byte __isset_bitfield = 0;
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> 
metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.TIME, new 
org.apache.thrift.meta_data.FieldMetaData("time", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.MSG, new 
org.apache.thrift.meta_data.FieldMetaData("msg", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(Annotation.class,
 metaDataMap);
+  }
+
+  public Annotation() {
+  }
+
+  public Annotation(
+    long time,
+    String msg)
+  {
+    this();
+    this.time = time;
+    setTimeIsSet(true);
+    this.msg = msg;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public Annotation(Annotation other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.time = other.time;
+    if (other.isSetMsg()) {
+      this.msg = other.msg;
+    }
+  }
+
+  public Annotation deepCopy() {
+    return new Annotation(this);
+  }
+
+  @Override
+  public void clear() {
+    setTimeIsSet(false);
+    this.time = 0;
+    this.msg = null;
+  }
+
+  public long getTime() {
+    return this.time;
+  }
+
+  public Annotation setTime(long time) {
+    this.time = time;
+    setTimeIsSet(true);
+    return this;
+  }
+
+  public void unsetTime() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__TIME_ISSET_ID);
+  }
+
+  /** Returns true if field time is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetTime() {
+    return EncodingUtils.testBit(__isset_bitfield, __TIME_ISSET_ID);
+  }
+
+  public void setTimeIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __TIME_ISSET_ID, 
value);
+  }
+
+  public String getMsg() {
+    return this.msg;
+  }
+
+  public Annotation setMsg(String msg) {
+    this.msg = msg;
+    return this;
+  }
+
+  public void unsetMsg() {
+    this.msg = null;
+  }
+
+  /** Returns true if field msg is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetMsg() {
+    return this.msg != null;
+  }
+
+  public void setMsgIsSet(boolean value) {
+    if (!value) {
+      this.msg = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case TIME:
+      if (value == null) {
+        unsetTime();
+      } else {
+        setTime((Long)value);
+      }
+      break;
+
+    case MSG:
+      if (value == null) {
+        unsetMsg();
+      } else {
+        setMsg((String)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case TIME:
+      return Long.valueOf(getTime());
+
+    case MSG:
+      return getMsg();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned 
a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case TIME:
+      return isSetTime();
+    case MSG:
+      return isSetMsg();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof Annotation)
+      return this.equals((Annotation)that);
+    return false;
+  }
+
+  public boolean equals(Annotation that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_time = true;
+    boolean that_present_time = true;
+    if (this_present_time || that_present_time) {
+      if (!(this_present_time && that_present_time))
+        return false;
+      if (this.time != that.time)
+        return false;
+    }
+
+    boolean this_present_msg = true && this.isSetMsg();
+    boolean that_present_msg = true && that.isSetMsg();
+    if (this_present_msg || that_present_msg) {
+      if (!(this_present_msg && that_present_msg))
+        return false;
+      if (!this.msg.equals(that.msg))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(Annotation other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetTime()).compareTo(other.isSetTime());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTime()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.time, 
other.time);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetMsg()).compareTo(other.isSetMsg());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMsg()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.msg, 
other.msg);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws 
org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws 
org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("Annotation(");
+    boolean first = true;
+
+    sb.append("time:");
+    sb.append(this.time);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("msg:");
+    if (this.msg == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.msg);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws 
java.io.IOException, ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java 
serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class AnnotationStandardSchemeFactory implements 
SchemeFactory {
+    public AnnotationStandardScheme getScheme() {
+      return new AnnotationStandardScheme();
+    }
+  }
+
+  private static class AnnotationStandardScheme extends 
StandardScheme<Annotation> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, Annotation 
struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // TIME
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.time = iprot.readI64();
+              struct.setTimeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 2: // MSG
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.msg = iprot.readString();
+              struct.setMsgIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked 
in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, Annotation 
struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(TIME_FIELD_DESC);
+      oprot.writeI64(struct.time);
+      oprot.writeFieldEnd();
+      if (struct.msg != null) {
+        oprot.writeFieldBegin(MSG_FIELD_DESC);
+        oprot.writeString(struct.msg);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class AnnotationTupleSchemeFactory implements SchemeFactory {
+    public AnnotationTupleScheme getScheme() {
+      return new AnnotationTupleScheme();
+    }
+  }
+
+  private static class AnnotationTupleScheme extends TupleScheme<Annotation> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, Annotation 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.isSetTime()) {
+        optionals.set(0);
+      }
+      if (struct.isSetMsg()) {
+        optionals.set(1);
+      }
+      oprot.writeBitSet(optionals, 2);
+      if (struct.isSetTime()) {
+        oprot.writeI64(struct.time);
+      }
+      if (struct.isSetMsg()) {
+        oprot.writeString(struct.msg);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, Annotation 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(2);
+      if (incoming.get(0)) {
+        struct.time = iprot.readI64();
+        struct.setTimeIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.msg = iprot.readString();
+        struct.setMsgIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/accumulo/blob/6b5f5ef4/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
new file mode 100644
index 0000000..2e930d3
--- /dev/null
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
@@ -0,0 +1,1384 @@
+/*
+ * 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.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.tracer.thrift;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("all") public class RemoteSpan implements 
org.apache.thrift.TBase<RemoteSpan, RemoteSpan._Fields>, java.io.Serializable, 
Cloneable, Comparable<RemoteSpan> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("RemoteSpan");
+
+  private static final org.apache.thrift.protocol.TField SENDER_FIELD_DESC = 
new org.apache.thrift.protocol.TField("sender", 
org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField SVC_FIELD_DESC = new 
org.apache.thrift.protocol.TField("svc", 
org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField TRACE_ID_FIELD_DESC = 
new org.apache.thrift.protocol.TField("traceId", 
org.apache.thrift.protocol.TType.I64, (short)3);
+  private static final org.apache.thrift.protocol.TField SPAN_ID_FIELD_DESC = 
new org.apache.thrift.protocol.TField("spanId", 
org.apache.thrift.protocol.TType.I64, (short)4);
+  private static final org.apache.thrift.protocol.TField PARENT_ID_FIELD_DESC 
= new org.apache.thrift.protocol.TField("parentId", 
org.apache.thrift.protocol.TType.I64, (short)5);
+  private static final org.apache.thrift.protocol.TField START_FIELD_DESC = 
new org.apache.thrift.protocol.TField("start", 
org.apache.thrift.protocol.TType.I64, (short)6);
+  private static final org.apache.thrift.protocol.TField STOP_FIELD_DESC = new 
org.apache.thrift.protocol.TField("stop", org.apache.thrift.protocol.TType.I64, 
(short)7);
+  private static final org.apache.thrift.protocol.TField 
DESCRIPTION_FIELD_DESC = new org.apache.thrift.protocol.TField("description", 
org.apache.thrift.protocol.TType.STRING, (short)8);
+  private static final org.apache.thrift.protocol.TField DATA_FIELD_DESC = new 
org.apache.thrift.protocol.TField("data", org.apache.thrift.protocol.TType.MAP, 
(short)10);
+  private static final org.apache.thrift.protocol.TField 
ANNOTATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("annotations", 
org.apache.thrift.protocol.TType.LIST, (short)11);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = 
new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new RemoteSpanStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new RemoteSpanTupleSchemeFactory());
+  }
+
+  public String sender; // required
+  public String svc; // required
+  public long traceId; // required
+  public long spanId; // required
+  public long parentId; // required
+  public long start; // required
+  public long stop; // required
+  public String description; // required
+  public Map<ByteBuffer,ByteBuffer> data; // required
+  public List<Annotation> annotations; // required
+
+  /** The set of fields this struct contains, along with convenience methods 
for finding and manipulating them. */
+  @SuppressWarnings("all") public enum _Fields implements 
org.apache.thrift.TFieldIdEnum {
+    SENDER((short)1, "sender"),
+    SVC((short)2, "svc"),
+    TRACE_ID((short)3, "traceId"),
+    SPAN_ID((short)4, "spanId"),
+    PARENT_ID((short)5, "parentId"),
+    START((short)6, "start"),
+    STOP((short)7, "stop"),
+    DESCRIPTION((short)8, "description"),
+    DATA((short)10, "data"),
+    ANNOTATIONS((short)11, "annotations");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, 
_Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not 
found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // SENDER
+          return SENDER;
+        case 2: // SVC
+          return SVC;
+        case 3: // TRACE_ID
+          return TRACE_ID;
+        case 4: // SPAN_ID
+          return SPAN_ID;
+        case 5: // PARENT_ID
+          return PARENT_ID;
+        case 6: // START
+          return START;
+        case 7: // STOP
+          return STOP;
+        case 8: // DESCRIPTION
+          return DESCRIPTION;
+        case 10: // DATA
+          return DATA;
+        case 11: // ANNOTATIONS
+          return ANNOTATIONS;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + 
fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __TRACEID_ISSET_ID = 0;
+  private static final int __SPANID_ISSET_ID = 1;
+  private static final int __PARENTID_ISSET_ID = 2;
+  private static final int __START_ISSET_ID = 3;
+  private static final int __STOP_ISSET_ID = 4;
+  private byte __isset_bitfield = 0;
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> 
metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.SENDER, new 
org.apache.thrift.meta_data.FieldMetaData("sender", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.SVC, new 
org.apache.thrift.meta_data.FieldMetaData("svc", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.TRACE_ID, new 
org.apache.thrift.meta_data.FieldMetaData("traceId", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.SPAN_ID, new 
org.apache.thrift.meta_data.FieldMetaData("spanId", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.PARENT_ID, new 
org.apache.thrift.meta_data.FieldMetaData("parentId", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.START, new 
org.apache.thrift.meta_data.FieldMetaData("start", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.STOP, new 
org.apache.thrift.meta_data.FieldMetaData("stop", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.DESCRIPTION, new 
org.apache.thrift.meta_data.FieldMetaData("description", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.DATA, new 
org.apache.thrift.meta_data.FieldMetaData("data", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.MapMetaData(org.apache.thrift.protocol.TType.MAP, 
+            new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING
            , true), 
+            new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING
            , true))));
+    tmpMap.put(_Fields.ANNOTATIONS, new 
org.apache.thrift.meta_data.FieldMetaData("annotations", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new 
org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new 
org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT,
 Annotation.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(RemoteSpan.class,
 metaDataMap);
+  }
+
+  public RemoteSpan() {
+  }
+
+  public RemoteSpan(
+    String sender,
+    String svc,
+    long traceId,
+    long spanId,
+    long parentId,
+    long start,
+    long stop,
+    String description,
+    Map<ByteBuffer,ByteBuffer> data,
+    List<Annotation> annotations)
+  {
+    this();
+    this.sender = sender;
+    this.svc = svc;
+    this.traceId = traceId;
+    setTraceIdIsSet(true);
+    this.spanId = spanId;
+    setSpanIdIsSet(true);
+    this.parentId = parentId;
+    setParentIdIsSet(true);
+    this.start = start;
+    setStartIsSet(true);
+    this.stop = stop;
+    setStopIsSet(true);
+    this.description = description;
+    this.data = data;
+    this.annotations = annotations;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public RemoteSpan(RemoteSpan other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.isSetSender()) {
+      this.sender = other.sender;
+    }
+    if (other.isSetSvc()) {
+      this.svc = other.svc;
+    }
+    this.traceId = other.traceId;
+    this.spanId = other.spanId;
+    this.parentId = other.parentId;
+    this.start = other.start;
+    this.stop = other.stop;
+    if (other.isSetDescription()) {
+      this.description = other.description;
+    }
+    if (other.isSetData()) {
+      Map<ByteBuffer,ByteBuffer> __this__data = new 
HashMap<ByteBuffer,ByteBuffer>(other.data);
+      this.data = __this__data;
+    }
+    if (other.isSetAnnotations()) {
+      List<Annotation> __this__annotations = new 
ArrayList<Annotation>(other.annotations.size());
+      for (Annotation other_element : other.annotations) {
+        __this__annotations.add(new Annotation(other_element));
+      }
+      this.annotations = __this__annotations;
+    }
+  }
+
+  public RemoteSpan deepCopy() {
+    return new RemoteSpan(this);
+  }
+
+  @Override
+  public void clear() {
+    this.sender = null;
+    this.svc = null;
+    setTraceIdIsSet(false);
+    this.traceId = 0;
+    setSpanIdIsSet(false);
+    this.spanId = 0;
+    setParentIdIsSet(false);
+    this.parentId = 0;
+    setStartIsSet(false);
+    this.start = 0;
+    setStopIsSet(false);
+    this.stop = 0;
+    this.description = null;
+    this.data = null;
+    this.annotations = null;
+  }
+
+  public String getSender() {
+    return this.sender;
+  }
+
+  public RemoteSpan setSender(String sender) {
+    this.sender = sender;
+    return this;
+  }
+
+  public void unsetSender() {
+    this.sender = null;
+  }
+
+  /** Returns true if field sender is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetSender() {
+    return this.sender != null;
+  }
+
+  public void setSenderIsSet(boolean value) {
+    if (!value) {
+      this.sender = null;
+    }
+  }
+
+  public String getSvc() {
+    return this.svc;
+  }
+
+  public RemoteSpan setSvc(String svc) {
+    this.svc = svc;
+    return this;
+  }
+
+  public void unsetSvc() {
+    this.svc = null;
+  }
+
+  /** Returns true if field svc is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetSvc() {
+    return this.svc != null;
+  }
+
+  public void setSvcIsSet(boolean value) {
+    if (!value) {
+      this.svc = null;
+    }
+  }
+
+  public long getTraceId() {
+    return this.traceId;
+  }
+
+  public RemoteSpan setTraceId(long traceId) {
+    this.traceId = traceId;
+    setTraceIdIsSet(true);
+    return this;
+  }
+
+  public void unsetTraceId() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__TRACEID_ISSET_ID);
+  }
+
+  /** Returns true if field traceId is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetTraceId() {
+    return EncodingUtils.testBit(__isset_bitfield, __TRACEID_ISSET_ID);
+  }
+
+  public void setTraceIdIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__TRACEID_ISSET_ID, value);
+  }
+
+  public long getSpanId() {
+    return this.spanId;
+  }
+
+  public RemoteSpan setSpanId(long spanId) {
+    this.spanId = spanId;
+    setSpanIdIsSet(true);
+    return this;
+  }
+
+  public void unsetSpanId() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__SPANID_ISSET_ID);
+  }
+
+  /** Returns true if field spanId is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetSpanId() {
+    return EncodingUtils.testBit(__isset_bitfield, __SPANID_ISSET_ID);
+  }
+
+  public void setSpanIdIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__SPANID_ISSET_ID, value);
+  }
+
+  public long getParentId() {
+    return this.parentId;
+  }
+
+  public RemoteSpan setParentId(long parentId) {
+    this.parentId = parentId;
+    setParentIdIsSet(true);
+    return this;
+  }
+
+  public void unsetParentId() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__PARENTID_ISSET_ID);
+  }
+
+  /** Returns true if field parentId is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetParentId() {
+    return EncodingUtils.testBit(__isset_bitfield, __PARENTID_ISSET_ID);
+  }
+
+  public void setParentIdIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__PARENTID_ISSET_ID, value);
+  }
+
+  public long getStart() {
+    return this.start;
+  }
+
+  public RemoteSpan setStart(long start) {
+    this.start = start;
+    setStartIsSet(true);
+    return this;
+  }
+
+  public void unsetStart() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__START_ISSET_ID);
+  }
+
+  /** Returns true if field start is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetStart() {
+    return EncodingUtils.testBit(__isset_bitfield, __START_ISSET_ID);
+  }
+
+  public void setStartIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, 
__START_ISSET_ID, value);
+  }
+
+  public long getStop() {
+    return this.stop;
+  }
+
+  public RemoteSpan setStop(long stop) {
+    this.stop = stop;
+    setStopIsSet(true);
+    return this;
+  }
+
+  public void unsetStop() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, 
__STOP_ISSET_ID);
+  }
+
+  /** Returns true if field stop is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetStop() {
+    return EncodingUtils.testBit(__isset_bitfield, __STOP_ISSET_ID);
+  }
+
+  public void setStopIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __STOP_ISSET_ID, 
value);
+  }
+
+  public String getDescription() {
+    return this.description;
+  }
+
+  public RemoteSpan setDescription(String description) {
+    this.description = description;
+    return this;
+  }
+
+  public void unsetDescription() {
+    this.description = null;
+  }
+
+  /** Returns true if field description is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetDescription() {
+    return this.description != null;
+  }
+
+  public void setDescriptionIsSet(boolean value) {
+    if (!value) {
+      this.description = null;
+    }
+  }
+
+  public int getDataSize() {
+    return (this.data == null) ? 0 : this.data.size();
+  }
+
+  public void putToData(ByteBuffer key, ByteBuffer val) {
+    if (this.data == null) {
+      this.data = new HashMap<ByteBuffer,ByteBuffer>();
+    }
+    this.data.put(key, val);
+  }
+
+  public Map<ByteBuffer,ByteBuffer> getData() {
+    return this.data;
+  }
+
+  public RemoteSpan setData(Map<ByteBuffer,ByteBuffer> data) {
+    this.data = data;
+    return this;
+  }
+
+  public void unsetData() {
+    this.data = null;
+  }
+
+  /** Returns true if field data is set (has been assigned a value) and false 
otherwise */
+  public boolean isSetData() {
+    return this.data != null;
+  }
+
+  public void setDataIsSet(boolean value) {
+    if (!value) {
+      this.data = null;
+    }
+  }
+
+  public int getAnnotationsSize() {
+    return (this.annotations == null) ? 0 : this.annotations.size();
+  }
+
+  public java.util.Iterator<Annotation> getAnnotationsIterator() {
+    return (this.annotations == null) ? null : this.annotations.iterator();
+  }
+
+  public void addToAnnotations(Annotation elem) {
+    if (this.annotations == null) {
+      this.annotations = new ArrayList<Annotation>();
+    }
+    this.annotations.add(elem);
+  }
+
+  public List<Annotation> getAnnotations() {
+    return this.annotations;
+  }
+
+  public RemoteSpan setAnnotations(List<Annotation> annotations) {
+    this.annotations = annotations;
+    return this;
+  }
+
+  public void unsetAnnotations() {
+    this.annotations = null;
+  }
+
+  /** Returns true if field annotations is set (has been assigned a value) and 
false otherwise */
+  public boolean isSetAnnotations() {
+    return this.annotations != null;
+  }
+
+  public void setAnnotationsIsSet(boolean value) {
+    if (!value) {
+      this.annotations = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case SENDER:
+      if (value == null) {
+        unsetSender();
+      } else {
+        setSender((String)value);
+      }
+      break;
+
+    case SVC:
+      if (value == null) {
+        unsetSvc();
+      } else {
+        setSvc((String)value);
+      }
+      break;
+
+    case TRACE_ID:
+      if (value == null) {
+        unsetTraceId();
+      } else {
+        setTraceId((Long)value);
+      }
+      break;
+
+    case SPAN_ID:
+      if (value == null) {
+        unsetSpanId();
+      } else {
+        setSpanId((Long)value);
+      }
+      break;
+
+    case PARENT_ID:
+      if (value == null) {
+        unsetParentId();
+      } else {
+        setParentId((Long)value);
+      }
+      break;
+
+    case START:
+      if (value == null) {
+        unsetStart();
+      } else {
+        setStart((Long)value);
+      }
+      break;
+
+    case STOP:
+      if (value == null) {
+        unsetStop();
+      } else {
+        setStop((Long)value);
+      }
+      break;
+
+    case DESCRIPTION:
+      if (value == null) {
+        unsetDescription();
+      } else {
+        setDescription((String)value);
+      }
+      break;
+
+    case DATA:
+      if (value == null) {
+        unsetData();
+      } else {
+        setData((Map<ByteBuffer,ByteBuffer>)value);
+      }
+      break;
+
+    case ANNOTATIONS:
+      if (value == null) {
+        unsetAnnotations();
+      } else {
+        setAnnotations((List<Annotation>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case SENDER:
+      return getSender();
+
+    case SVC:
+      return getSvc();
+
+    case TRACE_ID:
+      return Long.valueOf(getTraceId());
+
+    case SPAN_ID:
+      return Long.valueOf(getSpanId());
+
+    case PARENT_ID:
+      return Long.valueOf(getParentId());
+
+    case START:
+      return Long.valueOf(getStart());
+
+    case STOP:
+      return Long.valueOf(getStop());
+
+    case DESCRIPTION:
+      return getDescription();
+
+    case DATA:
+      return getData();
+
+    case ANNOTATIONS:
+      return getAnnotations();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned 
a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case SENDER:
+      return isSetSender();
+    case SVC:
+      return isSetSvc();
+    case TRACE_ID:
+      return isSetTraceId();
+    case SPAN_ID:
+      return isSetSpanId();
+    case PARENT_ID:
+      return isSetParentId();
+    case START:
+      return isSetStart();
+    case STOP:
+      return isSetStop();
+    case DESCRIPTION:
+      return isSetDescription();
+    case DATA:
+      return isSetData();
+    case ANNOTATIONS:
+      return isSetAnnotations();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof RemoteSpan)
+      return this.equals((RemoteSpan)that);
+    return false;
+  }
+
+  public boolean equals(RemoteSpan that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_sender = true && this.isSetSender();
+    boolean that_present_sender = true && that.isSetSender();
+    if (this_present_sender || that_present_sender) {
+      if (!(this_present_sender && that_present_sender))
+        return false;
+      if (!this.sender.equals(that.sender))
+        return false;
+    }
+
+    boolean this_present_svc = true && this.isSetSvc();
+    boolean that_present_svc = true && that.isSetSvc();
+    if (this_present_svc || that_present_svc) {
+      if (!(this_present_svc && that_present_svc))
+        return false;
+      if (!this.svc.equals(that.svc))
+        return false;
+    }
+
+    boolean this_present_traceId = true;
+    boolean that_present_traceId = true;
+    if (this_present_traceId || that_present_traceId) {
+      if (!(this_present_traceId && that_present_traceId))
+        return false;
+      if (this.traceId != that.traceId)
+        return false;
+    }
+
+    boolean this_present_spanId = true;
+    boolean that_present_spanId = true;
+    if (this_present_spanId || that_present_spanId) {
+      if (!(this_present_spanId && that_present_spanId))
+        return false;
+      if (this.spanId != that.spanId)
+        return false;
+    }
+
+    boolean this_present_parentId = true;
+    boolean that_present_parentId = true;
+    if (this_present_parentId || that_present_parentId) {
+      if (!(this_present_parentId && that_present_parentId))
+        return false;
+      if (this.parentId != that.parentId)
+        return false;
+    }
+
+    boolean this_present_start = true;
+    boolean that_present_start = true;
+    if (this_present_start || that_present_start) {
+      if (!(this_present_start && that_present_start))
+        return false;
+      if (this.start != that.start)
+        return false;
+    }
+
+    boolean this_present_stop = true;
+    boolean that_present_stop = true;
+    if (this_present_stop || that_present_stop) {
+      if (!(this_present_stop && that_present_stop))
+        return false;
+      if (this.stop != that.stop)
+        return false;
+    }
+
+    boolean this_present_description = true && this.isSetDescription();
+    boolean that_present_description = true && that.isSetDescription();
+    if (this_present_description || that_present_description) {
+      if (!(this_present_description && that_present_description))
+        return false;
+      if (!this.description.equals(that.description))
+        return false;
+    }
+
+    boolean this_present_data = true && this.isSetData();
+    boolean that_present_data = true && that.isSetData();
+    if (this_present_data || that_present_data) {
+      if (!(this_present_data && that_present_data))
+        return false;
+      if (!this.data.equals(that.data))
+        return false;
+    }
+
+    boolean this_present_annotations = true && this.isSetAnnotations();
+    boolean that_present_annotations = true && that.isSetAnnotations();
+    if (this_present_annotations || that_present_annotations) {
+      if (!(this_present_annotations && that_present_annotations))
+        return false;
+      if (!this.annotations.equals(that.annotations))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(RemoteSpan other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = 
Boolean.valueOf(isSetSender()).compareTo(other.isSetSender());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetSender()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.sender, 
other.sender);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetSvc()).compareTo(other.isSetSvc());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetSvc()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.svc, 
other.svc);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetTraceId()).compareTo(other.isSetTraceId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTraceId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.traceId, 
other.traceId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetSpanId()).compareTo(other.isSetSpanId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetSpanId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.spanId, 
other.spanId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetParentId()).compareTo(other.isSetParentId());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetParentId()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.parentId, 
other.parentId);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetStart()).compareTo(other.isSetStart());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetStart()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.start, 
other.start);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetStop()).compareTo(other.isSetStop());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetStop()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.stop, 
other.stop);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetDescription()).compareTo(other.isSetDescription());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetDescription()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.description, other.description);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetData()).compareTo(other.isSetData());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetData()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.data, 
other.data);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = 
Boolean.valueOf(isSetAnnotations()).compareTo(other.isSetAnnotations());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetAnnotations()) {
+      lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.annotations, other.annotations);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws 
org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws 
org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("RemoteSpan(");
+    boolean first = true;
+
+    sb.append("sender:");
+    if (this.sender == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.sender);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("svc:");
+    if (this.svc == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.svc);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("traceId:");
+    sb.append(this.traceId);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("spanId:");
+    sb.append(this.spanId);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("parentId:");
+    sb.append(this.parentId);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("start:");
+    sb.append(this.start);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("stop:");
+    sb.append(this.stop);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("description:");
+    if (this.description == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.description);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("data:");
+    if (this.data == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.data);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("annotations:");
+    if (this.annotations == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.annotations);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws 
java.io.IOException, ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java 
serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class RemoteSpanStandardSchemeFactory implements 
SchemeFactory {
+    public RemoteSpanStandardScheme getScheme() {
+      return new RemoteSpanStandardScheme();
+    }
+  }
+
+  private static class RemoteSpanStandardScheme extends 
StandardScheme<RemoteSpan> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, RemoteSpan 
struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // SENDER
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.sender = iprot.readString();
+              struct.setSenderIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 2: // SVC
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.svc = iprot.readString();
+              struct.setSvcIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 3: // TRACE_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.traceId = iprot.readI64();
+              struct.setTraceIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 4: // SPAN_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.spanId = iprot.readI64();
+              struct.setSpanIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 5: // PARENT_ID
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.parentId = iprot.readI64();
+              struct.setParentIdIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 6: // START
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.start = iprot.readI64();
+              struct.setStartIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 7: // STOP
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.stop = iprot.readI64();
+              struct.setStopIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 8: // DESCRIPTION
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.description = iprot.readString();
+              struct.setDescriptionIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 10: // DATA
+            if (schemeField.type == org.apache.thrift.protocol.TType.MAP) {
+              {
+                org.apache.thrift.protocol.TMap _map0 = iprot.readMapBegin();
+                struct.data = new HashMap<ByteBuffer,ByteBuffer>(2*_map0.size);
+                for (int _i1 = 0; _i1 < _map0.size; ++_i1)
+                {
+                  ByteBuffer _key2;
+                  ByteBuffer _val3;
+                  _key2 = iprot.readBinary();
+                  _val3 = iprot.readBinary();
+                  struct.data.put(_key2, _val3);
+                }
+                iprot.readMapEnd();
+              }
+              struct.setDataIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          case 11: // ANNOTATIONS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list4 = 
iprot.readListBegin();
+                struct.annotations = new ArrayList<Annotation>(_list4.size);
+                for (int _i5 = 0; _i5 < _list4.size; ++_i5)
+                {
+                  Annotation _elem6;
+                  _elem6 = new Annotation();
+                  _elem6.read(iprot);
+                  struct.annotations.add(_elem6);
+                }
+                iprot.readListEnd();
+              }
+              struct.setAnnotationsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked 
in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, RemoteSpan 
struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.sender != null) {
+        oprot.writeFieldBegin(SENDER_FIELD_DESC);
+        oprot.writeString(struct.sender);
+        oprot.writeFieldEnd();
+      }
+      if (struct.svc != null) {
+        oprot.writeFieldBegin(SVC_FIELD_DESC);
+        oprot.writeString(struct.svc);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(TRACE_ID_FIELD_DESC);
+      oprot.writeI64(struct.traceId);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(SPAN_ID_FIELD_DESC);
+      oprot.writeI64(struct.spanId);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(PARENT_ID_FIELD_DESC);
+      oprot.writeI64(struct.parentId);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(START_FIELD_DESC);
+      oprot.writeI64(struct.start);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(STOP_FIELD_DESC);
+      oprot.writeI64(struct.stop);
+      oprot.writeFieldEnd();
+      if (struct.description != null) {
+        oprot.writeFieldBegin(DESCRIPTION_FIELD_DESC);
+        oprot.writeString(struct.description);
+        oprot.writeFieldEnd();
+      }
+      if (struct.data != null) {
+        oprot.writeFieldBegin(DATA_FIELD_DESC);
+        {
+          oprot.writeMapBegin(new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.STRING, struct.data.size()));
+          for (Map.Entry<ByteBuffer, ByteBuffer> _iter7 : 
struct.data.entrySet())
+          {
+            oprot.writeBinary(_iter7.getKey());
+            oprot.writeBinary(_iter7.getValue());
+          }
+          oprot.writeMapEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      if (struct.annotations != null) {
+        oprot.writeFieldBegin(ANNOTATIONS_FIELD_DESC);
+        {
+          oprot.writeListBegin(new 
org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, 
struct.annotations.size()));
+          for (Annotation _iter8 : struct.annotations)
+          {
+            _iter8.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class RemoteSpanTupleSchemeFactory implements SchemeFactory {
+    public RemoteSpanTupleScheme getScheme() {
+      return new RemoteSpanTupleScheme();
+    }
+  }
+
+  private static class RemoteSpanTupleScheme extends TupleScheme<RemoteSpan> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, RemoteSpan 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.isSetSender()) {
+        optionals.set(0);
+      }
+      if (struct.isSetSvc()) {
+        optionals.set(1);
+      }
+      if (struct.isSetTraceId()) {
+        optionals.set(2);
+      }
+      if (struct.isSetSpanId()) {
+        optionals.set(3);
+      }
+      if (struct.isSetParentId()) {
+        optionals.set(4);
+      }
+      if (struct.isSetStart()) {
+        optionals.set(5);
+      }
+      if (struct.isSetStop()) {
+        optionals.set(6);
+      }
+      if (struct.isSetDescription()) {
+        optionals.set(7);
+      }
+      if (struct.isSetData()) {
+        optionals.set(8);
+      }
+      if (struct.isSetAnnotations()) {
+        optionals.set(9);
+      }
+      oprot.writeBitSet(optionals, 10);
+      if (struct.isSetSender()) {
+        oprot.writeString(struct.sender);
+      }
+      if (struct.isSetSvc()) {
+        oprot.writeString(struct.svc);
+      }
+      if (struct.isSetTraceId()) {
+        oprot.writeI64(struct.traceId);
+      }
+      if (struct.isSetSpanId()) {
+        oprot.writeI64(struct.spanId);
+      }
+      if (struct.isSetParentId()) {
+        oprot.writeI64(struct.parentId);
+      }
+      if (struct.isSetStart()) {
+        oprot.writeI64(struct.start);
+      }
+      if (struct.isSetStop()) {
+        oprot.writeI64(struct.stop);
+      }
+      if (struct.isSetDescription()) {
+        oprot.writeString(struct.description);
+      }
+      if (struct.isSetData()) {
+        {
+          oprot.writeI32(struct.data.size());
+          for (Map.Entry<ByteBuffer, ByteBuffer> _iter9 : 
struct.data.entrySet())
+          {
+            oprot.writeBinary(_iter9.getKey());
+            oprot.writeBinary(_iter9.getValue());
+          }
+        }
+      }
+      if (struct.isSetAnnotations()) {
+        {
+          oprot.writeI32(struct.annotations.size());
+          for (Annotation _iter10 : struct.annotations)
+          {
+            _iter10.write(oprot);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, RemoteSpan 
struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(10);
+      if (incoming.get(0)) {
+        struct.sender = iprot.readString();
+        struct.setSenderIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.svc = iprot.readString();
+        struct.setSvcIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.traceId = iprot.readI64();
+        struct.setTraceIdIsSet(true);
+      }
+      if (incoming.get(3)) {
+        struct.spanId = iprot.readI64();
+        struct.setSpanIdIsSet(true);
+      }
+      if (incoming.get(4)) {
+        struct.parentId = iprot.readI64();
+        struct.setParentIdIsSet(true);
+      }
+      if (incoming.get(5)) {
+        struct.start = iprot.readI64();
+        struct.setStartIsSet(true);
+      }
+      if (incoming.get(6)) {
+        struct.stop = iprot.readI64();
+        struct.setStopIsSet(true);
+      }
+      if (incoming.get(7)) {
+        struct.description = iprot.readString();
+        struct.setDescriptionIsSet(true);
+      }
+      if (incoming.get(8)) {
+        {
+          org.apache.thrift.protocol.TMap _map11 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.STRING, iprot.readI32());
+          struct.data = new HashMap<ByteBuffer,ByteBuffer>(2*_map11.size);
+          for (int _i12 = 0; _i12 < _map11.size; ++_i12)
+          {
+            ByteBuffer _key13;
+            ByteBuffer _val14;
+            _key13 = iprot.readBinary();
+            _val14 = iprot.readBinary();
+            struct.data.put(_key13, _val14);
+          }
+        }
+        struct.setDataIsSet(true);
+      }
+      if (incoming.get(9)) {
+        {
+          org.apache.thrift.protocol.TList _list15 = new 
org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, 
iprot.readI32());
+          struct.annotations = new ArrayList<Annotation>(_list15.size);
+          for (int _i16 = 0; _i16 < _list15.size; ++_i16)
+          {
+            Annotation _elem17;
+            _elem17 = new Annotation();
+            _elem17.read(iprot);
+            struct.annotations.add(_elem17);
+          }
+        }
+        struct.setAnnotationsIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/accumulo/blob/6b5f5ef4/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
new file mode 100644
index 0000000..7cd7c0d
--- /dev/null
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
@@ -0,0 +1,588 @@
+/*
+ * 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.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.accumulo.tracer.thrift;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@SuppressWarnings("all") public class SpanReceiver {
+
+  public interface Iface {
+
+    public void span(RemoteSpan span) throws org.apache.thrift.TException;
+
+  }
+
+  public interface AsyncIface {
+
+    public void span(RemoteSpan span, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException;
+
+  }
+
+  public static class Client extends org.apache.thrift.TServiceClient 
implements Iface {
+    public static class Factory implements 
org.apache.thrift.TServiceClientFactory<Client> {
+      public Factory() {}
+      public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
+        return new Client(prot);
+      }
+      public Client getClient(org.apache.thrift.protocol.TProtocol iprot, 
org.apache.thrift.protocol.TProtocol oprot) {
+        return new Client(iprot, oprot);
+      }
+    }
+
+    public Client(org.apache.thrift.protocol.TProtocol prot)
+    {
+      super(prot, prot);
+    }
+
+    public Client(org.apache.thrift.protocol.TProtocol iprot, 
org.apache.thrift.protocol.TProtocol oprot) {
+      super(iprot, oprot);
+    }
+
+    public void span(RemoteSpan span) throws org.apache.thrift.TException
+    {
+      send_span(span);
+    }
+
+    public void send_span(RemoteSpan span) throws org.apache.thrift.TException
+    {
+      span_args args = new span_args();
+      args.setSpan(span);
+      sendBase("span", args);
+    }
+
+  }
+  public static class AsyncClient extends org.apache.thrift.async.TAsyncClient 
implements AsyncIface {
+    public static class Factory implements 
org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
+      private org.apache.thrift.async.TAsyncClientManager clientManager;
+      private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
+      public Factory(org.apache.thrift.async.TAsyncClientManager 
clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
+        this.clientManager = clientManager;
+        this.protocolFactory = protocolFactory;
+      }
+      public AsyncClient 
getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
+        return new AsyncClient(protocolFactory, clientManager, transport);
+      }
+    }
+
+    public AsyncClient(org.apache.thrift.protocol.TProtocolFactory 
protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, 
org.apache.thrift.transport.TNonblockingTransport transport) {
+      super(protocolFactory, clientManager, transport);
+    }
+
+    public void span(RemoteSpan span, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException {
+      checkReady();
+      span_call method_call = new span_call(span, resultHandler, this, 
___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class span_call extends 
org.apache.thrift.async.TAsyncMethodCall {
+      private RemoteSpan span;
+      public span_call(RemoteSpan span, 
org.apache.thrift.async.AsyncMethodCallback resultHandler, 
org.apache.thrift.async.TAsyncClient client, 
org.apache.thrift.protocol.TProtocolFactory protocolFactory, 
org.apache.thrift.transport.TNonblockingTransport transport) throws 
org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, true);
+        this.span = span;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws 
org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("span", 
org.apache.thrift.protocol.TMessageType.CALL, 0));
+        span_args args = new span_args();
+        args.setSpan(span);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public void getResult() throws org.apache.thrift.TException {
+        if (getState() != 
org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = 
new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = 
client.getProtocolFactory().getProtocol(memoryTransport);
+      }
+    }
+
+  }
+
+  public static class Processor<I extends Iface> extends 
org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(Processor.class.getName());
+    public Processor(I iface) {
+      super(iface, getProcessMap(new HashMap<String, 
org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
+    }
+
+    protected Processor(I iface, Map<String,  
org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> 
processMap) {
+      super(iface, getProcessMap(processMap));
+    }
+
+    private static <I extends Iface> Map<String,  
org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> 
getProcessMap(Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  
org.apache.thrift.TBase>> processMap) {
+      processMap.put("span", new span());
+      return processMap;
+    }
+
+    public static class span<I extends Iface> extends 
org.apache.thrift.ProcessFunction<I, span_args> {
+      public span() {
+        super("span");
+      }
+
+      public span_args getEmptyArgsInstance() {
+        return new span_args();
+      }
+
+      protected boolean isOneway() {
+        return true;
+      }
+
+      public org.apache.thrift.TBase getResult(I iface, span_args args) throws 
org.apache.thrift.TException {
+        iface.span(args.span);
+        return null;
+      }
+    }
+
+  }
+
+  public static class AsyncProcessor<I extends AsyncIface> extends 
org.apache.thrift.TBaseAsyncProcessor<I> {
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(AsyncProcessor.class.getName());
+    public AsyncProcessor(I iface) {
+      super(iface, getProcessMap(new HashMap<String, 
org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, 
?>>()));
+    }
+
+    protected AsyncProcessor(I iface, Map<String,  
org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, 
?>> processMap) {
+      super(iface, getProcessMap(processMap));
+    }
+
+    private static <I extends AsyncIface> Map<String,  
org.apache.thrift.AsyncProcessFunction<I, ? extends  
org.apache.thrift.TBase,?>> getProcessMap(Map<String,  
org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, 
?>> processMap) {
+      processMap.put("span", new span());
+      return processMap;
+    }
+
+    public static class span<I extends AsyncIface> extends 
org.apache.thrift.AsyncProcessFunction<I, span_args, Void> {
+      public span() {
+        super("span");
+      }
+
+      public span_args getEmptyArgsInstance() {
+        return new span_args();
+      }
+
+      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer 
fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+          }
+          public void onError(Exception e) {
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return true;
+      }
+
+      public void start(I iface, span_args args, 
org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws 
TException {
+        iface.span(args.span,resultHandler);
+      }
+    }
+
+  }
+
+  public static class span_args implements org.apache.thrift.TBase<span_args, 
span_args._Fields>, java.io.Serializable, Cloneable, Comparable<span_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("span_args");
+
+    private static final org.apache.thrift.protocol.TField SPAN_FIELD_DESC = 
new org.apache.thrift.protocol.TField("span", 
org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final Map<Class<? extends IScheme>, SchemeFactory> schemes 
= new HashMap<Class<? extends IScheme>, SchemeFactory>();
+    static {
+      schemes.put(StandardScheme.class, new span_argsStandardSchemeFactory());
+      schemes.put(TupleScheme.class, new span_argsTupleSchemeFactory());
+    }
+
+    public RemoteSpan span; // required
+
+    /** The set of fields this struct contains, along with convenience methods 
for finding and manipulating them. */
+    @SuppressWarnings("all") public enum _Fields implements 
org.apache.thrift.TFieldIdEnum {
+      SPAN((short)1, "span");
+
+      private static final Map<String, _Fields> byName = new HashMap<String, 
_Fields>();
+
+      static {
+        for (_Fields field : EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not 
found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // SPAN
+            return SPAN;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new IllegalArgumentException("Field " + 
fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final String _fieldName;
+
+      _Fields(short thriftId, String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final Map<_Fields, 
org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SPAN, new 
org.apache.thrift.meta_data.FieldMetaData("span", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new 
org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT,
 RemoteSpan.class)));
+      metaDataMap = Collections.unmodifiableMap(tmpMap);
+      
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(span_args.class, 
metaDataMap);
+    }
+
+    public span_args() {
+    }
+
+    public span_args(
+      RemoteSpan span)
+    {
+      this();
+      this.span = span;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public span_args(span_args other) {
+      if (other.isSetSpan()) {
+        this.span = new RemoteSpan(other.span);
+      }
+    }
+
+    public span_args deepCopy() {
+      return new span_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.span = null;
+    }
+
+    public RemoteSpan getSpan() {
+      return this.span;
+    }
+
+    public span_args setSpan(RemoteSpan span) {
+      this.span = span;
+      return this;
+    }
+
+    public void unsetSpan() {
+      this.span = null;
+    }
+
+    /** Returns true if field span is set (has been assigned a value) and 
false otherwise */
+    public boolean isSetSpan() {
+      return this.span != null;
+    }
+
+    public void setSpanIsSet(boolean value) {
+      if (!value) {
+        this.span = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, Object value) {
+      switch (field) {
+      case SPAN:
+        if (value == null) {
+          unsetSpan();
+        } else {
+          setSpan((RemoteSpan)value);
+        }
+        break;
+
+      }
+    }
+
+    public Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SPAN:
+        return getSpan();
+
+      }
+      throw new IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been 
assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SPAN:
+        return isSetSpan();
+      }
+      throw new IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof span_args)
+        return this.equals((span_args)that);
+      return false;
+    }
+
+    public boolean equals(span_args that) {
+      if (that == null)
+        return false;
+
+      boolean this_present_span = true && this.isSetSpan();
+      boolean that_present_span = true && that.isSetSpan();
+      if (this_present_span || that_present_span) {
+        if (!(this_present_span && that_present_span))
+          return false;
+        if (!this.span.equals(that.span))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      return 0;
+    }
+
+    @Override
+    public int compareTo(span_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = 
Boolean.valueOf(isSetSpan()).compareTo(other.isSetSpan());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSpan()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.span, 
other.span);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws 
org.apache.thrift.TException {
+      schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws 
org.apache.thrift.TException {
+      schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+    }
+
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder("span_args(");
+      boolean first = true;
+
+      sb.append("span:");
+      if (this.span == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.span);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+      if (span != null) {
+        span.validate();
+      }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws 
java.io.IOException, ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class span_argsStandardSchemeFactory implements 
SchemeFactory {
+      public span_argsStandardScheme getScheme() {
+        return new span_argsStandardScheme();
+      }
+    }
+
+    private static class span_argsStandardScheme extends 
StandardScheme<span_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, span_args 
struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // SPAN
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) 
{
+                struct.span = new RemoteSpan();
+                struct.span.read(iprot);
+                struct.setSpanIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked 
in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, span_args 
struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.span != null) {
+          oprot.writeFieldBegin(SPAN_FIELD_DESC);
+          struct.span.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class span_argsTupleSchemeFactory implements SchemeFactory {
+      public span_argsTupleScheme getScheme() {
+        return new span_argsTupleScheme();
+      }
+    }
+
+    private static class span_argsTupleScheme extends TupleScheme<span_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, span_args 
struct) throws org.apache.thrift.TException {
+        TTupleProtocol oprot = (TTupleProtocol) prot;
+        BitSet optionals = new BitSet();
+        if (struct.isSetSpan()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetSpan()) {
+          struct.span.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, span_args 
struct) throws org.apache.thrift.TException {
+        TTupleProtocol iprot = (TTupleProtocol) prot;
+        BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          struct.span = new RemoteSpan();
+          struct.span.read(iprot);
+          struct.setSpanIsSet(true);
+        }
+      }
+    }
+
+  }
+
+}

Reply via email to