mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-05-31 22:49:54 +02:00
use LinkedTo rather than ChildOf for PublicEndpoint (#272)
This causes us to no longer emit missing root spans if we do not have the trace associated with the tracing headers we receive on public endpoints.
This commit is contained in:
parent
ecf3bb9d7c
commit
9f82c642f5
@ -103,6 +103,7 @@ type SpanOption func(*SpanOptions)
|
||||
type SpanOptions struct {
|
||||
Attributes []core.KeyValue
|
||||
StartTime time.Time
|
||||
Links []Link
|
||||
Relation Relation
|
||||
Record bool
|
||||
SpanKind SpanKind
|
||||
@ -197,6 +198,13 @@ func FollowsFrom(sc core.SpanContext) SpanOption {
|
||||
}
|
||||
}
|
||||
|
||||
// LinkedTo allows instantiating a Span with initial Links.
|
||||
func LinkedTo(sc core.SpanContext, attrs ...core.KeyValue) SpanOption {
|
||||
return func(o *SpanOptions) {
|
||||
o.Links = append(o.Links, Link{sc, attrs})
|
||||
}
|
||||
}
|
||||
|
||||
// WithSpanKind specifies the role a Span on a Trace.
|
||||
func WithSpanKind(sk SpanKind) SpanOption {
|
||||
return func(o *SpanOptions) {
|
||||
|
@ -150,11 +150,9 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if sc.IsValid() { // not a valid span context, so no link / parent relationship to establish
|
||||
var opt trace.SpanOption
|
||||
if h.public {
|
||||
// TODO: If the endpoint is a public endpoint, it should start a new trace
|
||||
// and incoming remote sctx should be added as a link
|
||||
// (WithLinks(links...), this option doesn't exist yet). Replace ChildOf
|
||||
// below with something like: opt = trace.WithLinks(sc)
|
||||
opt = trace.ChildOf(sc)
|
||||
// If the endpoint is a public endpoint, it should start a new trace
|
||||
// and incoming remote sctx should be added as a link.
|
||||
opt = trace.LinkedTo(sc)
|
||||
} else { // not a private endpoint, so assume child relationship
|
||||
opt = trace.ChildOf(sc)
|
||||
}
|
||||
|
@ -60,6 +60,10 @@ func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.SpanOpti
|
||||
|
||||
spanName := tr.spanNameWithPrefix(name)
|
||||
span := startSpanInternal(tr, spanName, parent, remoteParent, opts)
|
||||
for _, l := range opts.Links {
|
||||
span.AddLink(l)
|
||||
}
|
||||
|
||||
span.tracer = tr
|
||||
|
||||
if span.IsRecording() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user