Skip to content

Support for Initializing Span with a Previously Started Context #233

Open
@dm03514

Description

@dm03514

👋 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
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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions