The data flow I am trying to instrument has a variety of in-band mechanisms for propagating context (SQS, Kinesis messages, entries written in a DB, etc.) In the process of manually instrumenting some components, I need to extract the context and create recording Spans which will reflect the work being done by those components. I have tried a couple of versions of this:
Span parentSpan = Span.wrap(SpanContext.createFromRemoteParent(traceId,
parentSpanId,
TraceFlags.getDefault(),
TraceState.getDefault()));
Context propagatedContext = Context.current().with(parentSpan);
Span span = tracer.spanBuilder("please-export-me")
.setParent(propagatedContext)
.startSpan();
However, the resulting span is of type PropagatedSpan and hence isRecording is false.
What is the correct way to solve this use case?
Figured this out! The problem in the above code is in the
TraceFlags.TraceFlags.getDefault()returns0x00, which marks it as not sampled. We need0x01- which is returned byTraceFlags.getSampled(). The code below works, withspannow being theSdkSpanimplementation, which is exported: