Skip to content

Commit

Permalink
feat(propagator): add extractor for xds router metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
CoderPoet committed Jan 24, 2024
1 parent beff318 commit ee19918
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
11 changes: 11 additions & 0 deletions tracing/propagator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"context"

"github.com/bytedance/gopkg/cloud/metainfo"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/baggage"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
Expand Down Expand Up @@ -71,3 +72,13 @@ func CGIVariableToHTTPHeaderMetadata(metadata map[string]string) map[string]stri
}
return res
}

// ExtractFromPropagator get metadata from propagator
func ExtractFromPropagator(ctx context.Context) map[string]string {
metadata := metainfo.GetAllValues(ctx)
if metadata == nil {
metadata = make(map[string]string)
}
otel.GetTextMapPropagator().Inject(ctx, &metadataProvider{metadata: metadata})
return metadata
}
40 changes: 40 additions & 0 deletions tracing/propagator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/contrib/propagators/b3"
"go.opentelemetry.io/contrib/propagators/ot"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/baggage"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace"
Expand Down Expand Up @@ -161,3 +162,42 @@ func TestCGIVariableToHTTPHeaderMetadata(t *testing.T) {
})
}
}

func TestExtractFromPropagator(t *testing.T) {
otel.SetTextMapPropagator(propagation.Baggage{})

type args struct {
ctx context.Context
}
tests := []struct {
name string
args args
want map[string]string
}{
{
name: "valid",
args: args{
ctx: metainfo.WithValue(context.Background(), "baggage", "foo=bar"),
},
want: map[string]string{
"baggage": "foo=bar",
},
},
{
name: "not valid",
args: args{
ctx: metainfo.WithValue(context.Background(), "other", "foo=bar"),
},
want: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctx := otel.GetTextMapPropagator().Extract(
tt.args.ctx,
&metadataProvider{metadata: ExtractFromPropagator(tt.args.ctx)},
)
assert.Equal(t, baggage.FromContext(ctx).String(), tt.want["baggage"])
})
}
}

0 comments on commit ee19918

Please sign in to comment.