From 98c80144a9a17e74a4bad61a95a4a609f7d4e6d8 Mon Sep 17 00:00:00 2001 From: mackjmr Date: Tue, 10 May 2022 14:31:21 +0200 Subject: [PATCH] handle synthetics origin parent id --- ddtrace/tracer/textmap.go | 2 +- ddtrace/tracer/textmap_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/ddtrace/tracer/textmap.go b/ddtrace/tracer/textmap.go index 66a3047b4d..c281bce69e 100644 --- a/ddtrace/tracer/textmap.go +++ b/ddtrace/tracer/textmap.go @@ -310,7 +310,7 @@ func (p *propagator) extractTextMap(reader TextMapReader) (ddtrace.SpanContext, if err != nil { return nil, err } - if ctx.traceID == 0 || ctx.spanID == 0 { + if ctx.traceID == 0 || (ctx.spanID == 0 && ctx.origin != "synthetics") { return nil, ErrSpanContextNotFound } return &ctx, nil diff --git a/ddtrace/tracer/textmap_test.go b/ddtrace/tracer/textmap_test.go index dd878f14fb..0307eb031f 100644 --- a/ddtrace/tracer/textmap_test.go +++ b/ddtrace/tracer/textmap_test.go @@ -117,6 +117,12 @@ func TestTextMapPropagatorErrors(t *testing.T) { DefaultParentIDHeader: "0", })) assert.Equal(ErrSpanContextNotFound, err) + + _, err = propagator.Extract(TextMapCarrier(map[string]string{ + DefaultTraceIDHeader: "3", + DefaultParentIDHeader: "0", + })) + assert.Equal(ErrSpanContextNotFound, err) } func TestTextMapPropagatorInjectHeader(t *testing.T) { @@ -175,6 +181,26 @@ func TestTextMapPropagatorOrigin(t *testing.T) { } } +func TestExtractOriginSynthetics(t *testing.T) { + src := TextMapCarrier(map[string]string{ + originHeader: "synthetics", + DefaultTraceIDHeader: "3", + DefaultParentIDHeader: "0", + }) + tracer := newTracer() + ctx, err := tracer.Extract(src) + if err != nil { + t.Fatal(err) + } + sctx, ok := ctx.(*spanContext) + if !ok { + t.Fatal("not a *spanContext") + } + assert.Equal(t, sctx.spanID, uint64(0)) + assert.Equal(t, sctx.traceID, uint64(3)) + assert.Equal(t, sctx.origin, "synthetics") +} + func TestTextMapPropagatorInvalidTraceTagsHeader(t *testing.T) { src := TextMapCarrier(map[string]string{ DefaultTraceIDHeader: "1",