Skip to content

Commit 090962d

Browse files
committed
storage: propagate tenant to grpc backend
Signed-off-by: Benedikt Bongartz <[email protected]>
1 parent 99e9e0e commit 090962d

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

plugin/storage/grpc/shared/grpc_client.go

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,26 @@ import (
1818
"github.com/jaegertracing/jaeger/model"
1919
"github.com/jaegertracing/jaeger/pkg/bearertoken"
2020
_ "github.com/jaegertracing/jaeger/pkg/gogocodec" // force gogo codec registration
21+
"github.com/jaegertracing/jaeger/pkg/tenancy"
2122
"github.com/jaegertracing/jaeger/proto-gen/storage_v1"
2223
"github.com/jaegertracing/jaeger/storage/dependencystore"
2324
"github.com/jaegertracing/jaeger/storage/spanstore"
2425
)
2526

26-
// BearerTokenKey is the key name for the bearer token context value.
27-
const BearerTokenKey = "bearer.token"
27+
const (
28+
// BearerTokenKey is the key name for the bearer token context value.
29+
BearerTokenKey = "bearer.token"
30+
// TenantKey is the key name for the x-tenant context value.
31+
TenantKey = "x.tenant"
32+
)
2833

2934
var (
3035
_ StoragePlugin = (*GRPCClient)(nil)
3136
_ ArchiveStoragePlugin = (*GRPCClient)(nil)
3237
_ PluginCapabilities = (*GRPCClient)(nil)
3338

3439
// upgradeContext composites several steps of upgrading context
35-
upgradeContext = composeContextUpgradeFuncs(upgradeContextWithBearerToken)
40+
upgradeContext = composeContextUpgradeFuncs(upgradeContextWithBearerToken, upgradeContextWithXTenant)
3641
)
3742

3843
// GRPCClient implements shared.StoragePlugin and reads/writes spans and dependencies
@@ -88,6 +93,22 @@ func upgradeContextWithBearerToken(ctx context.Context) context.Context {
8893
return ctx
8994
}
9095

96+
// upgradeContextWithXTenant turns the context into a gRPC outgoing context with x tenant
97+
// in the request metadata, if the original context has x-tenant attached.
98+
// Otherwise returns original context.
99+
func upgradeContextWithXTenant(ctx context.Context) context.Context {
100+
tenant := tenancy.GetTenant(ctx)
101+
if tenant != "" {
102+
md, ok := metadata.FromOutgoingContext(ctx)
103+
if !ok {
104+
md = metadata.New(nil)
105+
}
106+
md.Set(TenantKey, tenant)
107+
return metadata.NewOutgoingContext(ctx, md)
108+
}
109+
return ctx
110+
}
111+
91112
// DependencyReader implements shared.StoragePlugin.
92113
func (c *GRPCClient) DependencyReader() dependencystore.Reader {
93114
return c

plugin/storage/grpc/shared/grpc_client_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/jaegertracing/jaeger/model"
2222
"github.com/jaegertracing/jaeger/pkg/bearertoken"
23+
"github.com/jaegertracing/jaeger/pkg/tenancy"
2324
"github.com/jaegertracing/jaeger/proto-gen/storage_v1"
2425
grpcMocks "github.com/jaegertracing/jaeger/proto-gen/storage_v1/mocks"
2526
"github.com/jaegertracing/jaeger/storage/spanstore"
@@ -132,6 +133,22 @@ func TestContextUpgradeWithoutToken(t *testing.T) {
132133
assert.Falsef(t, ok, "Expected no metadata in context")
133134
}
134135

136+
func TestContextUpgradeWithTenant(t *testing.T) {
137+
testTenantValue := "test-tenant-val-1"
138+
ctx := tenancy.WithTenant(context.Background(), testTenantValue)
139+
upgradedCtx := upgradeContextWithXTenant(ctx)
140+
md, ok := metadata.FromOutgoingContext(upgradedCtx)
141+
assert.Truef(t, ok, "Expected metadata in context")
142+
xTenantFromMetadata := md.Get(TenantKey)
143+
assert.Equal(t, []string{testTenantValue}, xTenantFromMetadata)
144+
}
145+
146+
func TestContextUpgradeWithoutTenant(t *testing.T) {
147+
upgradedTenant := upgradeContextWithXTenant(context.Background())
148+
_, ok := metadata.FromOutgoingContext(upgradedTenant)
149+
assert.Falsef(t, ok, "Expected no metadata in context")
150+
}
151+
135152
func TestGRPCClientGetServices(t *testing.T) {
136153
withGRPCClient(func(r *grpcClientTest) {
137154
r.spanReader.On("GetServices", mock.Anything, &storage_v1.GetServicesRequest{}).

0 commit comments

Comments
 (0)