Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Preserve trace metadata in Unsampled#deepClone
Previously cloning an unsampled trace would lose track of originatingSpanId,
which mainly mattered when recovering the original trace after a `withTrace`
call.
  • Loading branch information
JacekLach committed Nov 19, 2019
commit bbb23769b6f34c0874becbb33f71c72a686a58e8
20 changes: 12 additions & 8 deletions tracing/src/main/java/com/palantir/tracing/Trace.java
Original file line number Diff line number Diff line change
Expand Up @@ -236,17 +236,23 @@ private static final class Unsampled extends Trace {
* This allows thread trace state to be cleared when all "started" spans have been "removed".
*/
private int numberOfSpans;
private Optional<String> originatingSpanId = Optional.empty();
private Optional<String> topSpanId = Optional.empty();

private Unsampled(int numberOfSpans, String traceId) {
private Optional<String> originatingSpanId;
private Optional<String> topSpanId;

private Unsampled(
int numberOfSpans,
String traceId,
Optional<String> originatingSpanId,
Optional<String> topSpanId) {
super(traceId);
this.numberOfSpans = numberOfSpans;
this.originatingSpanId = originatingSpanId;
this.topSpanId = topSpanId;
validateNumberOfSpans();
}

private Unsampled(String traceId) {
this(0, traceId);
this(0, traceId, Optional.empty(), Optional.empty());
}

@Override
Expand All @@ -269,7 +275,6 @@ void fastStartSpan(String _operation, SpanType _type) {
@Override
protected void push(OpenSpan span) {
if (numberOfSpans == 0) {
// TODO: shouldn't this be span.getOriginatingSpanId?
originatingSpanId = span.getParentSpanId();
topSpanId = Optional.of(span.getSpanId());
}
Expand Down Expand Up @@ -317,8 +322,7 @@ Optional<String> getOriginatingSpanId() {

@Override
Trace deepCopy() {
// TODO: shouldn't this preserve originatingSpanId / topSpanId?
return new Unsampled(numberOfSpans, getTraceId());
return new Unsampled(numberOfSpans, getTraceId(), getOriginatingSpanId(), getTopSpanId());
}

/** Internal validation, this should never fail because {@link #pop()} only decrements positive values. */
Expand Down