Skip to content

Commit 8d71881

Browse files
authored
[chore] [exporterhelper] Move to span context marshaling as a message (#13230)
Resolves #13220 (comment) Benchmarks: ``` goos: darwin goarch: arm64 pkg: go.opentelemetry.io/collector/pdata/xpdata/request cpu: Apple M1 Max before: BenchmarkEncodeDecodeContext-10 528876 2331 ns/op 1200 B/op 28 allocs/op after: BenchmarkEncodeDecodeContext-10 559353 1832 ns/op 864 B/op 16 allocs/op ```
1 parent c779925 commit 8d71881

File tree

5 files changed

+462
-119
lines changed

5 files changed

+462
-119
lines changed

pdata/xpdata/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ require (
88
go.opentelemetry.io/collector/pdata v1.34.0
99
go.opentelemetry.io/collector/pdata/pprofile v0.128.0
1010
go.opentelemetry.io/collector/pdata/testdata v0.128.0
11-
go.opentelemetry.io/otel v1.36.0
1211
go.opentelemetry.io/otel/trace v1.36.0
1312
)
1413

@@ -18,6 +17,7 @@ require (
1817
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
1918
github.com/modern-go/reflect2 v1.0.2 // indirect
2019
github.com/pmezard/go-difflib v1.0.0 // indirect
20+
go.opentelemetry.io/otel v1.36.0 // indirect
2121
go.uber.org/multierr v1.11.0 // indirect
2222
golang.org/x/net v0.39.0 // indirect
2323
golang.org/x/sys v0.32.0 // indirect

pdata/xpdata/request/context.go

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,44 @@ package request // import "go.opentelemetry.io/collector/pdata/xpdata/request"
66
import (
77
"context"
88

9-
"go.opentelemetry.io/otel/propagation"
9+
"go.opentelemetry.io/otel/trace"
1010

11-
pdataint "go.opentelemetry.io/collector/pdata/internal"
12-
"go.opentelemetry.io/collector/pdata/pcommon"
1311
"go.opentelemetry.io/collector/pdata/xpdata/request/internal"
1412
)
1513

16-
// Default trace context propagator
17-
var tracePropagator = propagation.TraceContext{}
18-
1914
// encodeContext encodes the context into a map of strings.
2015
func encodeContext(ctx context.Context) internal.RequestContext {
21-
carrier := pdataMapCarrier(pcommon.NewMap())
22-
tracePropagator.Inject(ctx, carrier)
23-
return internal.RequestContext{SpanContextMap: *pdataint.GetOrigMap(pdataint.Map(carrier))}
16+
rc := internal.RequestContext{}
17+
spanCtx := trace.SpanContextFromContext(ctx)
18+
if spanCtx.IsValid() {
19+
traceID := spanCtx.TraceID()
20+
spanID := spanCtx.SpanID()
21+
rc.SpanContext = &internal.SpanContext{
22+
TraceId: traceID[:],
23+
SpanId: spanID[:],
24+
TraceFlags: uint32(spanCtx.TraceFlags()),
25+
TraceState: spanCtx.TraceState().String(),
26+
Remote: spanCtx.IsRemote(),
27+
}
28+
}
29+
return rc
2430
}
2531

2632
// decodeContext decodes the context from the bytes map.
2733
func decodeContext(rc *internal.RequestContext) context.Context {
28-
if rc == nil || rc.SpanContextMap == nil {
34+
if rc == nil || rc.SpanContext == nil {
2935
return context.Background()
3036
}
31-
state := pdataint.StateMutable
32-
carrier := pdataMapCarrier(pdataint.NewMap(&rc.SpanContextMap, &state))
33-
return tracePropagator.Extract(context.Background(), carrier)
34-
}
35-
36-
type pdataMapCarrier pcommon.Map
37-
38-
var _ propagation.TextMapCarrier = pdataMapCarrier{}
39-
40-
func (m pdataMapCarrier) Get(key string) string {
41-
v, ok := pcommon.Map(m).Get(key)
42-
if !ok || v.Type() != pcommon.ValueTypeStr {
43-
return ""
44-
}
45-
return v.Str()
46-
}
47-
48-
func (m pdataMapCarrier) Set(key, value string) {
49-
pcommon.Map(m).PutStr(key, value)
50-
}
51-
52-
func (m pdataMapCarrier) Keys() []string {
53-
keys := make([]string, 0, pcommon.Map(m).Len())
54-
pcommon.Map(m).Range(func(k string, _ pcommon.Value) bool {
55-
keys = append(keys, k)
56-
return true
57-
})
58-
return keys
37+
traceID := trace.TraceID{}
38+
copy(traceID[:], rc.SpanContext.TraceId)
39+
spanID := trace.SpanID{}
40+
copy(spanID[:], rc.SpanContext.SpanId)
41+
traceState, _ := trace.ParseTraceState(rc.SpanContext.TraceState)
42+
return trace.ContextWithSpanContext(context.Background(), trace.NewSpanContext(trace.SpanContextConfig{
43+
TraceID: traceID,
44+
SpanID: spanID,
45+
TraceFlags: trace.TraceFlags(rc.SpanContext.TraceFlags),
46+
TraceState: traceState,
47+
Remote: rc.SpanContext.Remote,
48+
}))
5949
}

0 commit comments

Comments
 (0)