Description
👋 Hello, I was wondering if there was any way you'd be open to allowing a span to be created with an already existing SpanContext? I have a unique use case where I need to save an in-progress span and ship it out of memory, and then later reload it into memory and finish the span. I was wondering if you'd be open to supporting this feature in the lightstep go client?
I was able to add support for this in the jaeger client, and was hoping to use the same functionality with LightStep:
jaegertracing/jaeger-client-go#397
The strategy we took for jaeger was to add a SelfRef type that bhs proposed:
opentracing/specification#81 (comment)
If you're interested I would be happy to contribute this!
I was imagining the same API and approach as the jaeger library:
span := tracer.StartSpan(
"continued_span",
lightstep.SelfRef(aSpanContext),
)
Which would require:
- adding a new reference type
SelfRefType
:
SelfRefType opentracing.SpanReferenceType = 99
- Add a conditional in
newSpan
to check forSelfRefType
and setsp.raw.Context
equal to the provided context reference context:
sp.raw.Context = refCtx
- Expose Tags From Span:
func (s *spanImpl) Tags() opentracing.Tags {
return s.raw.Tags
}
I think this is everything needed to then export a context:
spanCtx := span.Context()
saveContext(key, spanCtx, spanCtx.Tags())
...
Then starting a span with a previously started context:
span := tracer.StartSpan(
"continued_span",
lightstep.SelfRef(getPreviousContext(key)),
)
I really appreciate your time! Thank you
Danny