Class W3CTraceContextPropagator

  • All Implemented Interfaces:
    TextMapPropagator

    @Immutable
    public final class W3CTraceContextPropagator
    extends java.lang.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 Detail

      • logger

        private static final java.util.logging.Logger logger
      • FIELDS

        private static final java.util.List<java.lang.String> FIELDS
      • TRACEPARENT_DELIMITER_SIZE

        private static final int TRACEPARENT_DELIMITER_SIZE
        See Also:
        Constant Field Values
      • 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
      • 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 java.util.Set<java.lang.String> VALID_VERSIONS
    • Constructor Detail

      • W3CTraceContextPropagator

        private W3CTraceContextPropagator()
    • Method Detail

      • fields

        public java.util.Collection<java.lang.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.
      • extractContextFromTraceParent

        private static SpanContext extractContextFromTraceParent​(java.lang.String traceparent)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object