Change Span to not implement any method.
This commit is contained in:
		
							parent
							
								
									9cabbeebfc
								
							
						
					
					
						commit
						1412a2da22
					
				| 
						 | 
				
			
			@ -42,43 +42,38 @@ public final class BlankSpan extends Span {
 | 
			
		|||
   */
 | 
			
		||||
  public static final BlankSpan INSTANCE = new BlankSpan();
 | 
			
		||||
 | 
			
		||||
  private BlankSpan() {
 | 
			
		||||
    super(SpanContext.INVALID, null);
 | 
			
		||||
  }
 | 
			
		||||
  private BlankSpan() {}
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#putAttribute(String, AttributeValue)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void putAttribute(String key, AttributeValue value) {
 | 
			
		||||
    Utils.checkNotNull(key, "key");
 | 
			
		||||
    Utils.checkNotNull(value, "value");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#putAttributes(Map)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void putAttributes(Map<String, AttributeValue> attributes) {
 | 
			
		||||
    Utils.checkNotNull(attributes, "attributes");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#addAnnotation(String, Map)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addAnnotation(String description) {}
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addAnnotation(String description, Map<String, AttributeValue> attributes) {
 | 
			
		||||
    Utils.checkNotNull(description, "description");
 | 
			
		||||
    Utils.checkNotNull(attributes, "attributes");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#addAnnotation(Annotation)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addAnnotation(Annotation annotation) {
 | 
			
		||||
    Utils.checkNotNull(annotation, "annotation");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#addMessageEvent(MessageEvent)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addMessageEvent(MessageEvent messageEvent) {
 | 
			
		||||
    Utils.checkNotNull(messageEvent, "messageEvent");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#addLink(Link)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addLink(Link link) {
 | 
			
		||||
    Utils.checkNotNull(link, "link");
 | 
			
		||||
| 
						 | 
				
			
			@ -89,12 +84,24 @@ public final class BlankSpan extends Span {
 | 
			
		|||
    Utils.checkNotNull(status, "status");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** No-op implementation of the {@link Span#end(EndSpanOptions)} method. */
 | 
			
		||||
  @Override
 | 
			
		||||
  public void end(EndSpanOptions options) {
 | 
			
		||||
    Utils.checkNotNull(options, "options");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void end() {}
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public SpanContext getContext() {
 | 
			
		||||
    return SpanContext.INVALID;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public boolean isRecordingEvents() {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public String toString() {
 | 
			
		||||
    return "BlankSpan";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,12 +16,7 @@
 | 
			
		|||
 | 
			
		||||
package openconsensus.trace;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.EnumSet;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import javax.annotation.Nullable;
 | 
			
		||||
import openconsensus.internal.Utils;
 | 
			
		||||
import openconsensus.trace.data.Annotation;
 | 
			
		||||
import openconsensus.trace.data.AttributeValue;
 | 
			
		||||
import openconsensus.trace.data.Link;
 | 
			
		||||
| 
						 | 
				
			
			@ -29,8 +24,7 @@ import openconsensus.trace.data.MessageEvent;
 | 
			
		|||
import openconsensus.trace.data.Status;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An abstract class that represents a span. It has an associated {@link SpanContext} and a set of
 | 
			
		||||
 * {@link Options}.
 | 
			
		||||
 * An abstract class that represents a span. It has an associated {@link SpanContext}.
 | 
			
		||||
 *
 | 
			
		||||
 * <p>Spans are created by the {@link SpanBuilder#startSpan} method.
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -39,55 +33,6 @@ import openconsensus.trace.data.Status;
 | 
			
		|||
 * @since 0.1.0
 | 
			
		||||
 */
 | 
			
		||||
public abstract class Span {
 | 
			
		||||
  private static final Map<String, AttributeValue> EMPTY_ATTRIBUTES = Collections.emptyMap();
 | 
			
		||||
 | 
			
		||||
  // Contains the identifiers associated with this Span.
 | 
			
		||||
  private final SpanContext context;
 | 
			
		||||
 | 
			
		||||
  // Contains the options associated with this Span. This object is immutable.
 | 
			
		||||
  private final Set<Options> options;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * {@code Span} options. These options are NOT propagated to child spans. These options determine
 | 
			
		||||
   * features such as whether a {@code Span} should record any annotations or events.
 | 
			
		||||
   *
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public enum Options {
 | 
			
		||||
    /**
 | 
			
		||||
     * This option is set if the Span is part of a sampled distributed trace OR {@link
 | 
			
		||||
     * SpanBuilder#setRecordEvents(boolean)} was called with true.
 | 
			
		||||
     *
 | 
			
		||||
     * @since 0.1.0
 | 
			
		||||
     */
 | 
			
		||||
    RECORD_EVENTS;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private static final Set<Options> DEFAULT_OPTIONS =
 | 
			
		||||
      Collections.unmodifiableSet(EnumSet.noneOf(Options.class));
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Creates a new {@code Span}.
 | 
			
		||||
   *
 | 
			
		||||
   * @param context the context associated with this {@code Span}.
 | 
			
		||||
   * @param options the options associated with this {@code Span}. If {@code null} then default
 | 
			
		||||
   *     options will be set.
 | 
			
		||||
   * @throws NullPointerException if context is {@code null}.
 | 
			
		||||
   * @throws IllegalArgumentException if the {@code SpanContext} is sampled but no RECORD_EVENTS
 | 
			
		||||
   *     options.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  protected Span(SpanContext context, @Nullable EnumSet<Options> options) {
 | 
			
		||||
    this.context = Utils.checkNotNull(context, "context");
 | 
			
		||||
    this.options =
 | 
			
		||||
        options == null
 | 
			
		||||
            ? DEFAULT_OPTIONS
 | 
			
		||||
            : Collections.<Options>unmodifiableSet(EnumSet.copyOf(options));
 | 
			
		||||
    Utils.checkArgument(
 | 
			
		||||
        !context.getTraceOptions().isSampled() || this.options.contains(Options.RECORD_EVENTS),
 | 
			
		||||
        "Span is sampled, but does not have RECORD_EVENTS set.");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Sets an attribute to the {@code Span}. If the {@code Span} previously contained a mapping for
 | 
			
		||||
   * the key, the old value is replaced by the specified value.
 | 
			
		||||
| 
						 | 
				
			
			@ -96,14 +41,7 @@ public abstract class Span {
 | 
			
		|||
   * @param value the value for this attribute.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public void putAttribute(String key, AttributeValue value) {
 | 
			
		||||
    // Not final because for performance reasons we want to override this in the implementation.
 | 
			
		||||
    // Also a default implementation is needed to not break the compatibility (users may extend this
 | 
			
		||||
    // for testing).
 | 
			
		||||
    Utils.checkNotNull(key, "key");
 | 
			
		||||
    Utils.checkNotNull(value, "value");
 | 
			
		||||
    putAttributes(Collections.singletonMap(key, value));
 | 
			
		||||
  }
 | 
			
		||||
  public abstract void putAttribute(String key, AttributeValue value);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Sets a set of attributes to the {@code Span}. The effect of this call is equivalent to that of
 | 
			
		||||
| 
						 | 
				
			
			@ -113,26 +51,7 @@ public abstract class Span {
 | 
			
		|||
   * @param attributes the attributes that will be added and associated with the {@code Span}.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public void putAttributes(Map<String, AttributeValue> attributes) {
 | 
			
		||||
    // Not final because we want to start overriding this method from the beginning, this will
 | 
			
		||||
    // allow us to remove the addAttributes faster. All implementations MUST override this method.
 | 
			
		||||
    Utils.checkNotNull(attributes, "attributes");
 | 
			
		||||
    addAttributes(attributes);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Sets a set of attributes to the {@code Span}. The effect of this call is equivalent to that of
 | 
			
		||||
   * calling {@link #putAttribute(String, AttributeValue)} once for each element in the specified
 | 
			
		||||
   * map.
 | 
			
		||||
   *
 | 
			
		||||
   * @deprecated Use {@link #putAttributes(Map)}
 | 
			
		||||
   * @param attributes the attributes that will be added and associated with the {@code Span}.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  @Deprecated
 | 
			
		||||
  public void addAttributes(Map<String, AttributeValue> attributes) {
 | 
			
		||||
    putAttributes(attributes);
 | 
			
		||||
  }
 | 
			
		||||
  public abstract void putAttributes(Map<String, AttributeValue> attributes);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds an annotation to the {@code Span}.
 | 
			
		||||
| 
						 | 
				
			
			@ -140,10 +59,7 @@ public abstract class Span {
 | 
			
		|||
   * @param description the description of the annotation time event.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public final void addAnnotation(String description) {
 | 
			
		||||
    Utils.checkNotNull(description, "description");
 | 
			
		||||
    addAnnotation(description, EMPTY_ATTRIBUTES);
 | 
			
		||||
  }
 | 
			
		||||
  public abstract void addAnnotation(String description);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds an annotation to the {@code Span}.
 | 
			
		||||
| 
						 | 
				
			
			@ -199,11 +115,7 @@ public abstract class Span {
 | 
			
		|||
   * @param status the {@link Status} to set.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public void setStatus(Status status) {
 | 
			
		||||
    // Implemented as no-op for backwards compatibility (for example gRPC extends Span in tests).
 | 
			
		||||
    // Implementation must override this method.
 | 
			
		||||
    Utils.checkNotNull(status, "status");
 | 
			
		||||
  }
 | 
			
		||||
  public abstract void setStatus(Status status);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Marks the end of {@code Span} execution with the given options.
 | 
			
		||||
| 
						 | 
				
			
			@ -224,9 +136,7 @@ public abstract class Span {
 | 
			
		|||
   *
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public final void end() {
 | 
			
		||||
    end(EndSpanOptions.DEFAULT);
 | 
			
		||||
  }
 | 
			
		||||
  public abstract void end();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the {@code SpanContext} associated with this {@code Span}.
 | 
			
		||||
| 
						 | 
				
			
			@ -234,19 +144,15 @@ public abstract class Span {
 | 
			
		|||
   * @return the {@code SpanContext} associated with this {@code Span}.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public final SpanContext getContext() {
 | 
			
		||||
    return context;
 | 
			
		||||
  }
 | 
			
		||||
  public abstract SpanContext getContext();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the options associated with this {@code Span}.
 | 
			
		||||
   * Returns {@code true} if this {@code Span} records events (e.g, {@link #addAnnotation(String)}.
 | 
			
		||||
   *
 | 
			
		||||
   * @return the options associated with this {@code Span}.
 | 
			
		||||
   * @return {@code true} if this {@code Span} records events.
 | 
			
		||||
   * @since 0.1.0
 | 
			
		||||
   */
 | 
			
		||||
  public final Set<Options> getOptions() {
 | 
			
		||||
    return options;
 | 
			
		||||
  }
 | 
			
		||||
  public abstract boolean isRecordingEvents();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Type of span. Can be used to specify additional relationships between spans in addition to a
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue