diff options
Diffstat (limited to 'impl_core/src/main/java/io/opencensus')
11 files changed, 213 insertions, 173 deletions
diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/NoRecordEventsSpanImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/NoRecordEventsSpanImpl.java new file mode 100644 index 00000000..8a5f8e05 --- /dev/null +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/NoRecordEventsSpanImpl.java @@ -0,0 +1,85 @@ +/* + * Copyright 2018, OpenCensus Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.opencensus.implcore.trace; + +import com.google.common.base.Preconditions; +import io.opencensus.trace.Annotation; +import io.opencensus.trace.AttributeValue; +import io.opencensus.trace.EndSpanOptions; +import io.opencensus.trace.Link; +import io.opencensus.trace.Span; +import io.opencensus.trace.SpanContext; +import io.opencensus.trace.Status; +import java.util.EnumSet; +import java.util.Map; + +/** Implementation for the {@link Span} class that does not record trace events. */ +final class NoRecordEventsSpanImpl extends Span { + + private static final EnumSet<Options> NOT_RECORD_EVENTS_SPAN_OPTIONS = + EnumSet.noneOf(Span.Options.class); + + static NoRecordEventsSpanImpl create(SpanContext context) { + return new NoRecordEventsSpanImpl(context); + } + + @Override + public void addAnnotation(String description, Map<String, AttributeValue> attributes) { + Preconditions.checkNotNull(description, "description"); + Preconditions.checkNotNull(attributes, "attribute"); + } + + @Override + public void addAnnotation(Annotation annotation) { + Preconditions.checkNotNull(annotation, "annotation"); + } + + @Override + public void putAttribute(String key, AttributeValue value) { + Preconditions.checkNotNull(key, "key"); + Preconditions.checkNotNull(value, "value"); + } + + @Override + public void putAttributes(Map<String, AttributeValue> attributes) { + Preconditions.checkNotNull(attributes, "attributes"); + } + + @Override + public void addMessageEvent(io.opencensus.trace.MessageEvent messageEvent) { + Preconditions.checkNotNull(messageEvent, "messageEvent"); + } + + @Override + public void addLink(Link link) { + Preconditions.checkNotNull(link, "link"); + } + + @Override + public void setStatus(Status status) { + Preconditions.checkNotNull(status, "status"); + } + + @Override + public void end(EndSpanOptions options) { + Preconditions.checkNotNull(options, "options"); + } + + private NoRecordEventsSpanImpl(SpanContext context) { + super(context, NOT_RECORD_EVENTS_SPAN_OPTIONS); + } +} diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/RecordEventsSpanImpl.java index 75509a7f..af3545bc 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/RecordEventsSpanImpl.java @@ -51,11 +51,14 @@ import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; // TODO(hailongwen): remove the usage of `NetworkEvent` in the future. -/** Implementation for the {@link Span} class. */ +/** Implementation for the {@link Span} class that records trace events. */ @ThreadSafe -public final class SpanImpl extends Span implements Element<SpanImpl> { +public final class RecordEventsSpanImpl extends Span implements Element<RecordEventsSpanImpl> { private static final Logger logger = Logger.getLogger(Tracer.class.getName()); + private static final EnumSet<Span.Options> RECORD_EVENTS_SPAN_OPTIONS = + EnumSet.of(Span.Options.RECORD_EVENTS); + // The parent SpanId of this span. Null if this is a root span. @Nullable private final SpanId parentSpanId; // True if the parent is on a different process. @@ -73,8 +76,7 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { // The time converter used to convert nano time to Timestamp. This is needed because Java has // millisecond granularity for Timestamp and tracing events are recorded more often. @Nullable private final TimestampConverter timestampConverter; - // The start time of the span. Set when the span is created iff the RECORD_EVENTS options is - // set, otherwise 0. + // The start time of the span. private final long startNanoTime; // Set of recorded attributes. DO NOT CALL any other method that changes the ordering of events. @GuardedBy("this") @@ -87,18 +89,16 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { // List of recorded network events. @GuardedBy("this") @Nullable - @SuppressWarnings("deprecation") - private TraceEvents<EventWithNanoTime<io.opencensus.trace.NetworkEvent>> networkEvents; + private TraceEvents<EventWithNanoTime<io.opencensus.trace.MessageEvent>> messageEvents; // List of recorded links to parent and child spans. @GuardedBy("this") @Nullable private TraceEvents<Link> links; - // The status of the span. Set when the span is ended iff the RECORD_EVENTS options is set. + // The status of the span. @GuardedBy("this") @Nullable private Status status; - // The end time of the span. Set when the span is ended iff the RECORD_EVENTS options is set, - // otherwise 0. + // The end time of the span. @GuardedBy("this") private long endNanoTime; // True if the span is ended. @@ -109,14 +109,13 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { private boolean sampleToLocalSpanStore; // Pointers for the ConcurrentIntrusiveList$Element. Guarded by the ConcurrentIntrusiveList. - @Nullable private SpanImpl next = null; - @Nullable private SpanImpl prev = null; + @Nullable private RecordEventsSpanImpl next = null; + @Nullable private RecordEventsSpanImpl prev = null; /** * Creates and starts a span with the given configuration. * * @param context supplies the trace_id and span_id for the newly started span. - * @param options the options for the new span, importantly Options.RECORD_EVENTS. * @param name the displayed name for the new span. * @param parentSpanId the span_id of the parent span, or null if the new span is a root span. * @param hasRemoteParent {@code true} if the parentContext is remote. {@code null} if this is a @@ -130,9 +129,8 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { * @return a new and started span. */ @VisibleForTesting - public static SpanImpl startSpan( + public static RecordEventsSpanImpl startSpan( SpanContext context, - @Nullable EnumSet<Options> options, String name, @Nullable Kind kind, @Nullable SpanId parentSpanId, @@ -141,10 +139,9 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { StartEndHandler startEndHandler, @Nullable TimestampConverter timestampConverter, Clock clock) { - SpanImpl span = - new SpanImpl( + RecordEventsSpanImpl span = + new RecordEventsSpanImpl( context, - options, name, kind, parentSpanId, @@ -155,9 +152,7 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { clock); // Call onStart here instead of calling in the constructor to make sure the span is completely // initialized. - if (span.getOptions().contains(Options.RECORD_EVENTS)) { - startEndHandler.onStart(span); - } + startEndHandler.onStart(span); return span; } @@ -244,9 +239,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { * @throws IllegalStateException if the Span doesn't have RECORD_EVENTS option. */ public SpanData toSpanData() { - checkState( - getOptions().contains(Options.RECORD_EVENTS), - "Getting SpanData for a Span without RECORD_EVENTS option."); synchronized (this) { SpanData.Attributes attributesSpanData = attributes == null @@ -254,8 +246,7 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { : SpanData.Attributes.create(attributes, attributes.getNumberOfDroppedAttributes()); SpanData.TimedEvents<Annotation> annotationsSpanData = createTimedEvents(getInitializedAnnotations(), timestampConverter); - @SuppressWarnings("deprecation") - SpanData.TimedEvents<io.opencensus.trace.NetworkEvent> networkEventsSpanData = + SpanData.TimedEvents<io.opencensus.trace.MessageEvent> messageEventsSpanData = createTimedEvents(getInitializedNetworkEvents(), timestampConverter); SpanData.Links linksSpanData = links == null @@ -271,7 +262,7 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { CheckerFrameworkUtils.castNonNull(timestampConverter).convertNanoTime(startNanoTime), attributesSpanData, annotationsSpanData, - networkEventsSpanData, + messageEventsSpanData, linksSpanData, null, // Not supported yet. hasBeenEnded ? getStatusWithDefault() : null, @@ -285,9 +276,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { public void putAttribute(String key, AttributeValue value) { Preconditions.checkNotNull(key, "key"); Preconditions.checkNotNull(value, "value"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling putAttributes() on an ended Span."); @@ -300,9 +288,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { @Override public void putAttributes(Map<String, AttributeValue> attributes) { Preconditions.checkNotNull(attributes, "attributes"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling putAttributes() on an ended Span."); @@ -316,9 +301,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { public void addAnnotation(String description, Map<String, AttributeValue> attributes) { Preconditions.checkNotNull(description, "description"); Preconditions.checkNotNull(attributes, "attribute"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling addAnnotation() on an ended Span."); @@ -335,9 +317,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { @Override public void addAnnotation(Annotation annotation) { Preconditions.checkNotNull(annotation, "annotation"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling addAnnotation() on an ended Span."); @@ -349,11 +328,8 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { } @Override - @SuppressWarnings("deprecation") - public void addNetworkEvent(io.opencensus.trace.NetworkEvent networkEvent) { - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } + public void addMessageEvent(io.opencensus.trace.MessageEvent messageEvent) { + Preconditions.checkNotNull(messageEvent, "messageEvent"); synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling addNetworkEvent() on an ended Span."); @@ -361,17 +337,14 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { } getInitializedNetworkEvents() .addEvent( - new EventWithNanoTime<io.opencensus.trace.NetworkEvent>( - clock.nowNanos(), checkNotNull(networkEvent, "networkEvent"))); + new EventWithNanoTime<io.opencensus.trace.MessageEvent>( + clock.nowNanos(), checkNotNull(messageEvent, "networkEvent"))); } } @Override public void addLink(Link link) { Preconditions.checkNotNull(link, "link"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling addLink() on an ended Span."); @@ -384,9 +357,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { @Override public void setStatus(Status status) { Preconditions.checkNotNull(status, "status"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling setStatus() on an ended Span."); @@ -399,9 +369,6 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { @Override public void end(EndSpanOptions options) { Preconditions.checkNotNull(options, "options"); - if (!getOptions().contains(Options.RECORD_EVENTS)) { - return; - } synchronized (this) { if (hasBeenEnded) { logger.log(Level.FINE, "Calling end() on an ended Span."); @@ -435,15 +402,14 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { } @GuardedBy("this") - @SuppressWarnings("deprecation") - private TraceEvents<EventWithNanoTime<io.opencensus.trace.NetworkEvent>> + private TraceEvents<EventWithNanoTime<io.opencensus.trace.MessageEvent>> getInitializedNetworkEvents() { - if (networkEvents == null) { - networkEvents = - new TraceEvents<EventWithNanoTime<io.opencensus.trace.NetworkEvent>>( - traceParams.getMaxNumberOfNetworkEvents()); + if (messageEvents == null) { + messageEvents = + new TraceEvents<EventWithNanoTime<io.opencensus.trace.MessageEvent>>( + traceParams.getMaxNumberOfMessageEvents()); } - return networkEvents; + return messageEvents; } @GuardedBy("this") @@ -474,23 +440,23 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { @Override @Nullable - public SpanImpl getNext() { + public RecordEventsSpanImpl getNext() { return next; } @Override - public void setNext(@Nullable SpanImpl element) { + public void setNext(@Nullable RecordEventsSpanImpl element) { next = element; } @Override @Nullable - public SpanImpl getPrev() { + public RecordEventsSpanImpl getPrev() { return prev; } @Override - public void setPrev(@Nullable SpanImpl element) { + public void setPrev(@Nullable RecordEventsSpanImpl element) { prev = element; } @@ -505,9 +471,9 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { * be thread-safe. */ public interface StartEndHandler { - void onStart(SpanImpl span); + void onStart(RecordEventsSpanImpl span); - void onEnd(SpanImpl span); + void onEnd(RecordEventsSpanImpl span); } // A map implementation with a fixed capacity that drops events when the map gets full. Eviction @@ -586,9 +552,8 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { } } - private SpanImpl( + private RecordEventsSpanImpl( SpanContext context, - @Nullable EnumSet<Options> options, String name, @Nullable Kind kind, @Nullable SpanId parentSpanId, @@ -597,7 +562,7 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { StartEndHandler startEndHandler, @Nullable TimestampConverter timestampConverter, Clock clock) { - super(context, options); + super(context, RECORD_EVENTS_SPAN_OPTIONS); this.parentSpanId = parentSpanId; this.hasRemoteParent = hasRemoteParent; this.name = name; @@ -607,13 +572,8 @@ public final class SpanImpl extends Span implements Element<SpanImpl> { this.clock = clock; this.hasBeenEnded = false; this.sampleToLocalSpanStore = false; - if (options != null && options.contains(Options.RECORD_EVENTS)) { - this.timestampConverter = - timestampConverter != null ? timestampConverter : TimestampConverter.now(clock); - startNanoTime = clock.nowNanos(); - } else { - this.startNanoTime = 0; - this.timestampConverter = timestampConverter; - } + this.timestampConverter = + timestampConverter != null ? timestampConverter : TimestampConverter.now(clock); + startNanoTime = clock.nowNanos(); } } diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java index 3ea0ce33..5565e9de 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java @@ -35,7 +35,6 @@ import io.opencensus.trace.Tracestate; import io.opencensus.trace.config.TraceConfig; import io.opencensus.trace.config.TraceParams; import java.util.Collections; -import java.util.EnumSet; import java.util.List; import java.util.Random; import javax.annotation.Nullable; @@ -49,11 +48,6 @@ final class SpanBuilderImpl extends SpanBuilder { private static final TraceOptions NOT_SAMPLED_TRACE_OPTIONS = TraceOptions.builder().setIsSampled(false).build(); - private static final EnumSet<Span.Options> NOT_RECORD_EVENTS_SPAN_OPTIONS = - EnumSet.noneOf(Span.Options.class); - private static final EnumSet<Span.Options> RECORD_EVENTS_SPAN_OPTIONS = - EnumSet.of(Span.Options.RECORD_EVENTS); - private final Options options; private final String name; @Nullable private final Span parent; @@ -63,7 +57,7 @@ final class SpanBuilderImpl extends SpanBuilder { @Nullable private Boolean recordEvents; @Nullable private Kind kind; - private SpanImpl startSpanInternal( + private Span startSpanInternal( @Nullable SpanContext parent, @Nullable Boolean hasRemoteParent, String name, @@ -102,22 +96,20 @@ final class SpanBuilderImpl extends SpanBuilder { activeTraceParams) ? SAMPLED_TRACE_OPTIONS : NOT_SAMPLED_TRACE_OPTIONS; - EnumSet<Span.Options> spanOptions = + Span span = (traceOptions.isSampled() || Boolean.TRUE.equals(recordEvents)) - ? RECORD_EVENTS_SPAN_OPTIONS - : NOT_RECORD_EVENTS_SPAN_OPTIONS; - SpanImpl span = - SpanImpl.startSpan( - SpanContext.create(traceId, spanId, traceOptions, tracestate), - spanOptions, - name, - kind, - parentSpanId, - hasRemoteParent, - activeTraceParams, - options.startEndHandler, - timestampConverter, - options.clock); + ? RecordEventsSpanImpl.startSpan( + SpanContext.create(traceId, spanId, traceOptions, tracestate), + name, + kind, + parentSpanId, + hasRemoteParent, + activeTraceParams, + options.startEndHandler, + timestampConverter, + options.clock) + : NoRecordEventsSpanImpl.create( + SpanContext.create(traceId, spanId, traceOptions, tracestate)); linkSpans(span, parentLinks); return span; } @@ -186,7 +178,7 @@ final class SpanBuilderImpl extends SpanBuilder { } @Override - public SpanImpl startSpan() { + public Span startSpan() { SpanContext parentContext = remoteParentSpanContext; Boolean hasRemoteParent = Boolean.TRUE; TimestampConverter timestampConverter = null; @@ -199,8 +191,8 @@ final class SpanBuilderImpl extends SpanBuilder { parentContext = parent.getContext(); // Pass the timestamp converter from the parent to ensure that the recorded events are in // the right order. Implementation uses System.nanoTime() which is monotonically increasing. - if (parent instanceof SpanImpl) { - timestampConverter = ((SpanImpl) parent).getTimestampConverter(); + if (parent instanceof RecordEventsSpanImpl) { + timestampConverter = ((RecordEventsSpanImpl) parent).getTimestampConverter(); } } else { hasRemoteParent = null; @@ -219,13 +211,13 @@ final class SpanBuilderImpl extends SpanBuilder { static final class Options { private final RandomHandler randomHandler; - private final SpanImpl.StartEndHandler startEndHandler; + private final RecordEventsSpanImpl.StartEndHandler startEndHandler; private final Clock clock; private final TraceConfig traceConfig; Options( RandomHandler randomHandler, - SpanImpl.StartEndHandler startEndHandler, + RecordEventsSpanImpl.StartEndHandler startEndHandler, Clock clock, TraceConfig traceConfig) { this.randomHandler = checkNotNull(randomHandler, "randomHandler"); diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/StartEndHandlerImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/StartEndHandlerImpl.java index e22a86bd..6adaa200 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/StartEndHandlerImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/StartEndHandlerImpl.java @@ -17,7 +17,7 @@ package io.opencensus.implcore.trace; import io.opencensus.implcore.internal.EventQueue; -import io.opencensus.implcore.trace.SpanImpl.StartEndHandler; +import io.opencensus.implcore.trace.RecordEventsSpanImpl.StartEndHandler; import io.opencensus.implcore.trace.export.RunningSpanStoreImpl; import io.opencensus.implcore.trace.export.SampledSpanStoreImpl; import io.opencensus.implcore.trace.export.SpanExporterImpl; @@ -61,14 +61,14 @@ public final class StartEndHandlerImpl implements StartEndHandler { } @Override - public void onStart(SpanImpl span) { + public void onStart(RecordEventsSpanImpl span) { if (span.getOptions().contains(Options.RECORD_EVENTS) && enqueueEventForNonSampledSpans) { eventQueue.enqueue(new SpanStartEvent(span, runningSpanStore)); } } @Override - public void onEnd(SpanImpl span) { + public void onEnd(RecordEventsSpanImpl span) { if ((span.getOptions().contains(Options.RECORD_EVENTS) && enqueueEventForNonSampledSpans) || span.getContext().getTraceOptions().isSampled()) { eventQueue.enqueue(new SpanEndEvent(span, spanExporter, runningSpanStore, sampledSpanStore)); @@ -77,10 +77,10 @@ public final class StartEndHandlerImpl implements StartEndHandler { // An EventQueue entry that records the start of the span event. private static final class SpanStartEvent implements EventQueue.Entry { - private final SpanImpl span; + private final RecordEventsSpanImpl span; @Nullable private final RunningSpanStoreImpl activeSpansExporter; - SpanStartEvent(SpanImpl span, @Nullable RunningSpanStoreImpl activeSpansExporter) { + SpanStartEvent(RecordEventsSpanImpl span, @Nullable RunningSpanStoreImpl activeSpansExporter) { this.span = span; this.activeSpansExporter = activeSpansExporter; } @@ -95,13 +95,13 @@ public final class StartEndHandlerImpl implements StartEndHandler { // An EventQueue entry that records the end of the span event. private static final class SpanEndEvent implements EventQueue.Entry { - private final SpanImpl span; + private final RecordEventsSpanImpl span; @Nullable private final RunningSpanStoreImpl runningSpanStore; private final SpanExporterImpl spanExporter; @Nullable private final SampledSpanStoreImpl sampledSpanStore; SpanEndEvent( - SpanImpl span, + RecordEventsSpanImpl span, SpanExporterImpl spanExporter, @Nullable RunningSpanStoreImpl runningSpanStore, @Nullable SampledSpanStoreImpl sampledSpanStore) { diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/TraceComponentImplBase.java b/impl_core/src/main/java/io/opencensus/implcore/trace/TraceComponentImplBase.java index f4c5ef76..c1432432 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/TraceComponentImplBase.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/TraceComponentImplBase.java @@ -19,7 +19,7 @@ package io.opencensus.implcore.trace; import io.opencensus.common.Clock; import io.opencensus.implcore.internal.EventQueue; import io.opencensus.implcore.internal.SimpleEventQueue; -import io.opencensus.implcore.trace.SpanImpl.StartEndHandler; +import io.opencensus.implcore.trace.RecordEventsSpanImpl.StartEndHandler; import io.opencensus.implcore.trace.config.TraceConfigImpl; import io.opencensus.implcore.trace.export.ExportComponentImpl; import io.opencensus.implcore.trace.internal.RandomHandler; diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/TracerImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/TracerImpl.java index fcf30ff0..48df8055 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/TracerImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/TracerImpl.java @@ -29,9 +29,9 @@ import javax.annotation.Nullable; public final class TracerImpl extends Tracer { private final SpanBuilderImpl.Options spanBuilderOptions; - public TracerImpl( + TracerImpl( RandomHandler randomHandler, - SpanImpl.StartEndHandler startEndHandler, + RecordEventsSpanImpl.StartEndHandler startEndHandler, Clock clock, TraceConfig traceConfig) { spanBuilderOptions = diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessRunningSpanStoreImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessRunningSpanStoreImpl.java index 3d8fb9ae..f7aeac71 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessRunningSpanStoreImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessRunningSpanStoreImpl.java @@ -16,7 +16,7 @@ package io.opencensus.implcore.trace.export; -import io.opencensus.implcore.trace.SpanImpl; +import io.opencensus.implcore.trace.RecordEventsSpanImpl; import io.opencensus.implcore.trace.internal.ConcurrentIntrusiveList; import io.opencensus.trace.export.RunningSpanStore; import io.opencensus.trace.export.SpanData; @@ -30,27 +30,27 @@ import javax.annotation.concurrent.ThreadSafe; /** In-process implementation of the {@link RunningSpanStore}. */ @ThreadSafe public final class InProcessRunningSpanStoreImpl extends RunningSpanStoreImpl { - private final ConcurrentIntrusiveList<SpanImpl> runningSpans; + private final ConcurrentIntrusiveList<RecordEventsSpanImpl> runningSpans; public InProcessRunningSpanStoreImpl() { - runningSpans = new ConcurrentIntrusiveList<SpanImpl>(); + runningSpans = new ConcurrentIntrusiveList<RecordEventsSpanImpl>(); } @Override - public void onStart(SpanImpl span) { + public void onStart(RecordEventsSpanImpl span) { runningSpans.addElement(span); } @Override - public void onEnd(SpanImpl span) { + public void onEnd(RecordEventsSpanImpl span) { runningSpans.removeElement(span); } @Override public Summary getSummary() { - Collection<SpanImpl> allRunningSpans = runningSpans.getAll(); + Collection<RecordEventsSpanImpl> allRunningSpans = runningSpans.getAll(); Map<String, Integer> numSpansPerName = new HashMap<String, Integer>(); - for (SpanImpl span : allRunningSpans) { + for (RecordEventsSpanImpl span : allRunningSpans) { Integer prevValue = numSpansPerName.get(span.getName()); numSpansPerName.put(span.getName(), prevValue != null ? prevValue + 1 : 1); } @@ -64,11 +64,11 @@ public final class InProcessRunningSpanStoreImpl extends RunningSpanStoreImpl { @Override public Collection<SpanData> getRunningSpans(Filter filter) { - Collection<SpanImpl> allRunningSpans = runningSpans.getAll(); + Collection<RecordEventsSpanImpl> allRunningSpans = runningSpans.getAll(); int maxSpansToReturn = filter.getMaxSpansToReturn() == 0 ? allRunningSpans.size() : filter.getMaxSpansToReturn(); List<SpanData> ret = new ArrayList<SpanData>(maxSpansToReturn); - for (SpanImpl span : allRunningSpans) { + for (RecordEventsSpanImpl span : allRunningSpans) { if (ret.size() == maxSpansToReturn) { break; } diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessSampledSpanStoreImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessSampledSpanStoreImpl.java index fe0132d8..0d8e493b 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessSampledSpanStoreImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/export/InProcessSampledSpanStoreImpl.java @@ -18,7 +18,7 @@ package io.opencensus.implcore.trace.export; import com.google.common.collect.EvictingQueue; import io.opencensus.implcore.internal.EventQueue; -import io.opencensus.implcore.trace.SpanImpl; +import io.opencensus.implcore.trace.RecordEventsSpanImpl; import io.opencensus.trace.Status; import io.opencensus.trace.Status.CanonicalCode; import io.opencensus.trace.export.SampledSpanStore; @@ -59,8 +59,8 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { private static final class Bucket { - private final EvictingQueue<SpanImpl> sampledSpansQueue; - private final EvictingQueue<SpanImpl> notSampledSpansQueue; + private final EvictingQueue<RecordEventsSpanImpl> sampledSpansQueue; + private final EvictingQueue<RecordEventsSpanImpl> notSampledSpansQueue; private long lastSampledNanoTime; private long lastNotSampledNanoTime; @@ -69,7 +69,7 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { notSampledSpansQueue = EvictingQueue.create(numSamples); } - private void considerForSampling(SpanImpl span) { + private void considerForSampling(RecordEventsSpanImpl span) { long spanEndNanoTime = span.getEndNanoTime(); if (span.getContext().getTraceOptions().isSampled()) { // Need to compare by doing the subtraction all the time because in case of an overflow, @@ -90,14 +90,16 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { } } - private void getSamples(int maxSpansToReturn, List<SpanImpl> output) { + private void getSamples(int maxSpansToReturn, List<RecordEventsSpanImpl> output) { getSamples(maxSpansToReturn, output, sampledSpansQueue); getSamples(maxSpansToReturn, output, notSampledSpansQueue); } private static void getSamples( - int maxSpansToReturn, List<SpanImpl> output, EvictingQueue<SpanImpl> queue) { - for (SpanImpl span : queue) { + int maxSpansToReturn, + List<RecordEventsSpanImpl> output, + EvictingQueue<RecordEventsSpanImpl> queue) { + for (RecordEventsSpanImpl span : queue) { if (output.size() >= maxSpansToReturn) { break; } @@ -106,7 +108,10 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { } private void getSamplesFilteredByLatency( - long latencyLowerNs, long latencyUpperNs, int maxSpansToReturn, List<SpanImpl> output) { + long latencyLowerNs, + long latencyUpperNs, + int maxSpansToReturn, + List<RecordEventsSpanImpl> output) { getSamplesFilteredByLatency( latencyLowerNs, latencyUpperNs, maxSpansToReturn, output, sampledSpansQueue); getSamplesFilteredByLatency( @@ -117,9 +122,9 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { long latencyLowerNs, long latencyUpperNs, int maxSpansToReturn, - List<SpanImpl> output, - EvictingQueue<SpanImpl> queue) { - for (SpanImpl span : queue) { + List<RecordEventsSpanImpl> output, + EvictingQueue<RecordEventsSpanImpl> queue) { + for (RecordEventsSpanImpl span : queue) { if (output.size() >= maxSpansToReturn) { break; } @@ -173,7 +178,7 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { return errorBuckets[code.value() - 1]; } - private void considerForSampling(SpanImpl span) { + private void considerForSampling(RecordEventsSpanImpl span) { Status status = span.getStatus(); // Null status means running Span, this should not happen in production, but the library // should not crash because of this. @@ -208,8 +213,10 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { return errorBucketSummaries; } - private List<SpanImpl> getErrorSamples(@Nullable CanonicalCode code, int maxSpansToReturn) { - ArrayList<SpanImpl> output = new ArrayList<SpanImpl>(maxSpansToReturn); + private List<RecordEventsSpanImpl> getErrorSamples( + @Nullable CanonicalCode code, int maxSpansToReturn) { + ArrayList<RecordEventsSpanImpl> output = + new ArrayList<RecordEventsSpanImpl>(maxSpansToReturn); if (code != null) { getErrorBucket(code).getSamples(maxSpansToReturn, output); } else { @@ -220,9 +227,10 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { return output; } - private List<SpanImpl> getLatencySamples( + private List<RecordEventsSpanImpl> getLatencySamples( long latencyLowerNs, long latencyUpperNs, int maxSpansToReturn) { - ArrayList<SpanImpl> output = new ArrayList<SpanImpl>(maxSpansToReturn); + ArrayList<RecordEventsSpanImpl> output = + new ArrayList<RecordEventsSpanImpl>(maxSpansToReturn); for (int i = 0; i < NUM_LATENCY_BUCKETS; i++) { LatencyBucketBoundaries boundaries = LatencyBucketBoundaries.values()[i]; if (latencyUpperNs >= boundaries.getLatencyLowerNs() @@ -257,7 +265,7 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { } @Override - public void considerForSampling(SpanImpl span) { + public void considerForSampling(RecordEventsSpanImpl span) { synchronized (samples) { String spanName = span.getName(); if (span.getSampleToLocalSpanStore() && !samples.containsKey(spanName)) { @@ -346,8 +354,9 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { filter.getMaxSpansToReturn() == 0 ? MAX_PER_SPAN_NAME_SAMPLES : filter.getMaxSpansToReturn(); - List<SpanImpl> spans = Collections.emptyList(); - // Try to not keep the lock to much, do the SpanImpl -> SpanData conversion outside the lock. + List<RecordEventsSpanImpl> spans = Collections.emptyList(); + // Try to not keep the lock to much, do the RecordEventsSpanImpl -> SpanData conversion outside + // the lock. synchronized (samples) { PerSpanNameSamples perSpanNameSamples = samples.get(filter.getSpanName()); if (perSpanNameSamples != null) { @@ -355,7 +364,7 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { } } List<SpanData> ret = new ArrayList<SpanData>(spans.size()); - for (SpanImpl span : spans) { + for (RecordEventsSpanImpl span : spans) { ret.add(span.toSpanData()); } return Collections.unmodifiableList(ret); @@ -367,8 +376,9 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { filter.getMaxSpansToReturn() == 0 ? MAX_PER_SPAN_NAME_SAMPLES : filter.getMaxSpansToReturn(); - List<SpanImpl> spans = Collections.emptyList(); - // Try to not keep the lock to much, do the SpanImpl -> SpanData conversion outside the lock. + List<RecordEventsSpanImpl> spans = Collections.emptyList(); + // Try to not keep the lock to much, do the RecordEventsSpanImpl -> SpanData conversion outside + // the lock. synchronized (samples) { PerSpanNameSamples perSpanNameSamples = samples.get(filter.getSpanName()); if (perSpanNameSamples != null) { @@ -378,7 +388,7 @@ public final class InProcessSampledSpanStoreImpl extends SampledSpanStoreImpl { } } List<SpanData> ret = new ArrayList<SpanData>(spans.size()); - for (SpanImpl span : spans) { + for (RecordEventsSpanImpl span : spans) { ret.add(span.toSpanData()); } return Collections.unmodifiableList(ret); diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/export/RunningSpanStoreImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/export/RunningSpanStoreImpl.java index 53147def..962f5b01 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/export/RunningSpanStoreImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/export/RunningSpanStoreImpl.java @@ -16,11 +16,8 @@ package io.opencensus.implcore.trace.export; -import io.opencensus.implcore.trace.SpanImpl; +import io.opencensus.implcore.trace.RecordEventsSpanImpl; import io.opencensus.trace.export.RunningSpanStore; -import io.opencensus.trace.export.RunningSpanStore.Filter; -import io.opencensus.trace.export.RunningSpanStore.PerSpanNameSummary; -import io.opencensus.trace.export.RunningSpanStore.Summary; import io.opencensus.trace.export.SpanData; import java.util.Collection; import java.util.Collections; @@ -41,14 +38,14 @@ public abstract class RunningSpanStoreImpl extends RunningSpanStore { * * @param span the {@code Span} that started. */ - public abstract void onStart(SpanImpl span); + public abstract void onStart(RecordEventsSpanImpl span); /** * Removes the {@code Span} from the running spans list when the {@code Span} ends. * * @param span the {@code Span} that ended. */ - public abstract void onEnd(SpanImpl span); + public abstract void onEnd(RecordEventsSpanImpl span); private static final class NoopRunningSpanStoreImpl extends RunningSpanStoreImpl { @@ -56,10 +53,10 @@ public abstract class RunningSpanStoreImpl extends RunningSpanStore { RunningSpanStore.Summary.create(Collections.<String, PerSpanNameSummary>emptyMap()); @Override - public void onStart(SpanImpl span) {} + public void onStart(RecordEventsSpanImpl span) {} @Override - public void onEnd(SpanImpl span) {} + public void onEnd(RecordEventsSpanImpl span) {} @Override public Summary getSummary() { diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/export/SampledSpanStoreImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/export/SampledSpanStoreImpl.java index 302d5cd3..e67c2f8e 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/export/SampledSpanStoreImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/export/SampledSpanStoreImpl.java @@ -16,12 +16,8 @@ package io.opencensus.implcore.trace.export; -import io.opencensus.implcore.trace.SpanImpl; +import io.opencensus.implcore.trace.RecordEventsSpanImpl; import io.opencensus.trace.export.SampledSpanStore; -import io.opencensus.trace.export.SampledSpanStore.ErrorFilter; -import io.opencensus.trace.export.SampledSpanStore.LatencyFilter; -import io.opencensus.trace.export.SampledSpanStore.PerSpanNameSummary; -import io.opencensus.trace.export.SampledSpanStore.Summary; import io.opencensus.trace.export.SpanData; import java.util.Collection; import java.util.Collections; @@ -43,7 +39,7 @@ public abstract class SampledSpanStoreImpl extends SampledSpanStore { * * @param span the span to be consider for storing into the store buckets. */ - public abstract void considerForSampling(SpanImpl span); + public abstract void considerForSampling(RecordEventsSpanImpl span); protected void shutdown() {} @@ -59,7 +55,7 @@ public abstract class SampledSpanStoreImpl extends SampledSpanStore { } @Override - public void considerForSampling(SpanImpl span) {} + public void considerForSampling(RecordEventsSpanImpl span) {} @Override public void registerSpanNamesForCollection(Collection<String> spanNames) {} diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/export/SpanExporterImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/export/SpanExporterImpl.java index b9b1e98c..51a7b05c 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/export/SpanExporterImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/export/SpanExporterImpl.java @@ -19,7 +19,7 @@ package io.opencensus.implcore.trace.export; import com.google.common.annotations.VisibleForTesting; import io.opencensus.common.Duration; import io.opencensus.implcore.internal.DaemonThreadFactory; -import io.opencensus.implcore.trace.SpanImpl; +import io.opencensus.implcore.trace.RecordEventsSpanImpl; import io.opencensus.trace.export.ExportComponent; import io.opencensus.trace.export.SpanData; import io.opencensus.trace.export.SpanExporter; @@ -60,7 +60,7 @@ public final class SpanExporterImpl extends SpanExporter { * * @param span the {@code Span} to be added. */ - public void addSpan(SpanImpl span) { + public void addSpan(RecordEventsSpanImpl span) { worker.addSpan(span); } @@ -108,14 +108,14 @@ public final class SpanExporterImpl extends SpanExporter { private final Object monitor = new Object(); @GuardedBy("monitor") - private final List<SpanImpl> spans; + private final List<RecordEventsSpanImpl> spans; private final Map<String, Handler> serviceHandlers = new ConcurrentHashMap<String, Handler>(); private final int bufferSize; private final long scheduleDelayMillis; // See SpanExporterImpl#addSpan. - private void addSpan(SpanImpl span) { + private void addSpan(RecordEventsSpanImpl span) { synchronized (monitor) { this.spans.add(span); if (spans.size() > bufferSize) { @@ -152,16 +152,16 @@ public final class SpanExporterImpl extends SpanExporter { } private Worker(int bufferSize, Duration scheduleDelay) { - spans = new ArrayList<SpanImpl>(bufferSize); + spans = new ArrayList<RecordEventsSpanImpl>(bufferSize); this.bufferSize = bufferSize; this.scheduleDelayMillis = scheduleDelay.toMillis(); } // Returns an unmodifiable list of all buffered spans data to ensure that any registered // service handler cannot modify the list. - private static List<SpanData> fromSpanImplToSpanData(List<SpanImpl> spans) { + private static List<SpanData> fromSpanImplToSpanData(List<RecordEventsSpanImpl> spans) { List<SpanData> spanDatas = new ArrayList<SpanData>(spans.size()); - for (SpanImpl span : spans) { + for (RecordEventsSpanImpl span : spans) { spanDatas.add(span.toSpanData()); } return Collections.unmodifiableList(spanDatas); @@ -172,7 +172,7 @@ public final class SpanExporterImpl extends SpanExporter { while (true) { // Copy all the batched spans in a separate list to release the monitor lock asap to // avoid blocking the producer thread. - List<SpanImpl> spansCopy; + List<RecordEventsSpanImpl> spansCopy; synchronized (monitor) { if (spans.size() < bufferSize) { do { @@ -187,7 +187,7 @@ public final class SpanExporterImpl extends SpanExporter { } } while (spans.isEmpty()); } - spansCopy = new ArrayList<SpanImpl>(spans); + spansCopy = new ArrayList<RecordEventsSpanImpl>(spans); spans.clear(); } // Execute the batch export outside the synchronized to not block all producers. @@ -199,9 +199,9 @@ public final class SpanExporterImpl extends SpanExporter { } void flush() { - List<SpanImpl> spansCopy; + List<RecordEventsSpanImpl> spansCopy; synchronized (monitor) { - spansCopy = new ArrayList<SpanImpl>(spans); + spansCopy = new ArrayList<RecordEventsSpanImpl>(spans); spans.clear(); } |