Class W3CTraceContextPropagator

java.lang.Object
io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator
All Implemented Interfaces:
TextMapPropagator

@Immutable public final class W3CTraceContextPropagator extends Object implements TextMapPropagator
Implementation of the W3C TraceContext propagation protocol. See W3C Trace Context.

This is the default propagator for SpanContexts. The SpanContext type is designed to support all the data propagated via W3C propagation natively.

  • Field Details

    • logger

      private static final Logger logger
    • TRACE_PARENT

      static final String TRACE_PARENT
      See Also:
    • TRACE_STATE

      static final String TRACE_STATE
      See Also:
    • FIELDS

      private static final List<String> FIELDS
    • VERSION

      private static final String VERSION
      See Also:
    • VERSION_SIZE

      private static final int VERSION_SIZE
      See Also:
    • TRACEPARENT_DELIMITER

      private static final char TRACEPARENT_DELIMITER
      See Also:
    • TRACEPARENT_DELIMITER_SIZE

      private static final int TRACEPARENT_DELIMITER_SIZE
      See Also:
    • TRACE_ID_HEX_SIZE

      private static final int TRACE_ID_HEX_SIZE
    • SPAN_ID_HEX_SIZE

      private static final int SPAN_ID_HEX_SIZE
    • TRACE_OPTION_HEX_SIZE

      private static final int TRACE_OPTION_HEX_SIZE
    • TRACE_ID_OFFSET

      private static final int TRACE_ID_OFFSET
      See Also:
    • SPAN_ID_OFFSET

      private static final int SPAN_ID_OFFSET
    • TRACE_OPTION_OFFSET

      private static final int TRACE_OPTION_OFFSET
    • TRACEPARENT_HEADER_SIZE

      private static final int TRACEPARENT_HEADER_SIZE
    • VALID_VERSIONS

      private static final Set<String> VALID_VERSIONS
    • VERSION_00

      private static final String VERSION_00
      See Also:
    • INSTANCE

      private static final W3CTraceContextPropagator INSTANCE
  • Constructor Details

    • W3CTraceContextPropagator

      private W3CTraceContextPropagator()
  • Method Details

    • getInstance

      public static W3CTraceContextPropagator getInstance()
      Returns a singleton instance of a TextMapPropagator implementing the W3C TraceContext propagation.
    • fields

      public Collection<String> fields()
      Description copied from interface: TextMapPropagator
      The propagation fields defined. If your carrier is reused, you should delete the fields here before calling TextMapPropagator.inject(Context, Object, TextMapSetter) )}.

      For example, if the carrier is a single-use or immutable request object, you don't need to clear fields as they couldn't have been set before. If it is a mutable, retryable object, successive calls should clear these fields first.

      Some use cases for this are:

      • Allow pre-allocation of fields, especially in systems like gRPC Metadata
      • Allow a single-pass over an iterator
      Specified by:
      fields in interface TextMapPropagator
      Returns:
      the fields that will be used by this formatter.
    • inject

      public <C> void inject(Context context, @Nullable C carrier, TextMapSetter<C> setter)
      Description copied from interface: TextMapPropagator
      Injects data for downstream consumers, for example as HTTP headers. The carrier may be null to facilitate calling this method with a lambda for the TextMapSetter, in which case that null will be passed to the TextMapSetter implementation.
      Specified by:
      inject in interface TextMapPropagator
      Type Parameters:
      C - carrier of propagation fields, such as an http request
      Parameters:
      context - the Context containing the value to be injected.
      carrier - holds propagation fields. For example, an outgoing message or http request.
      setter - invoked for each propagation key to add or remove.
    • extract

      public <C> Context extract(Context context, @Nullable C carrier, TextMapGetter<C> getter)
      Description copied from interface: TextMapPropagator
      Extracts data from upstream. For example, from incoming http headers. The returned Context should contain the extracted data, if any, merged with the data from the passed-in Context.

      If the incoming information could not be parsed, implementations MUST return the original Context, unaltered.

      Specified by:
      extract in interface TextMapPropagator
      Type Parameters:
      C - the type of carrier of the propagation fields, such as an http request.
      Parameters:
      context - the Context used to store the extracted value.
      carrier - holds propagation fields. For example, an outgoing message or http request.
      getter - invoked for each propagation key to get data from the carrier.
      Returns:
      the Context containing the extracted data.
    • extractImpl

      private static <C> SpanContext extractImpl(@Nullable C carrier, TextMapGetter<C> getter)
    • extractContextFromTraceParent

      private static SpanContext extractContextFromTraceParent(String traceparent)
    • toString

      public String toString()
      Overrides:
      toString in class Object