Skip to content

Commit

Permalink
Adds support for registering client dial option handlers (open-teleme…
Browse files Browse the repository at this point in the history
…try#1)

* Adds RegisterClientDialOptionHandlers api to define DialOptions at the time of connection creation

* Removed unnecessary mutex
  • Loading branch information
mohit-a21 authored and Mohit Agarwal committed Mar 3, 2021
1 parent df2c141 commit 3a4e5de
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
24 changes: 24 additions & 0 deletions config/configgrpc/configgrpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,19 @@ const (
PerRPCAuthTypeBearer = "bearer"
)

type ClientDialOptionHandler func() grpc.DialOption

var (
// Map of opentelemetry compression types to grpc registered compression types
grpcCompressionKeyMap = map[string]string{
CompressionGzip: gzip.Name,
}
)

var (
clientOptionHandlerList = make([]ClientDialOptionHandler, 0)
)

// Allowed balancer names to be set in grpclb_policy to discover the servers
var allowedBalancerNames = []string{roundrobin.Name, grpc.PickFirstBalancerName}

Expand Down Expand Up @@ -98,6 +104,9 @@ type GRPCClientSettings struct {
// Sets the balancer in grpclb_policy to discover the servers. Default is pick_first
// https://github.com/grpc/grpc-go/blob/master/examples/features/load_balancing/README.md
BalancerName string `mapstructure:"balancer_name"`

// UseGlobalInterceptors defines config if the global client interceptors need to be used
SkipGlobalClientOption bool `mapstructure:"skip_global_client_option"`
}

type KeepaliveServerConfig struct {
Expand Down Expand Up @@ -219,6 +228,15 @@ func (gcs *GRPCClientSettings) ToDialOptions() ([]grpc.DialOption, error) {
opts = append(opts, grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"loadBalancingPolicy":"%s"}`, gcs.BalancerName)))
}

if !gcs.SkipGlobalClientOption {
for _, handler := range clientOptionHandlerList {
opt := handler()
if opt != nil {
opts = append(opts, opt)
}
}
}

return opts, nil
}

Expand Down Expand Up @@ -311,3 +329,9 @@ func GetGRPCCompressionKey(compressionType string) string {
}
return CompressionUnsupported
}

func RegisterClientDialOptionHandlers(handlers ...ClientDialOptionHandler) {
for _, handler := range handlers {
clientOptionHandlerList = append(clientOptionHandlerList, handler)
}
}
12 changes: 12 additions & 0 deletions config/configgrpc/configgrpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -521,3 +521,15 @@ func TestWithPerRPCAuthInvalidAuthType(t *testing.T) {
assert.Error(t, err)
assert.Nil(t, dialOpts)
}

func TestRegisterClientDialOptionHandler(t *testing.T) {
RegisterClientDialOptionHandlers(func() grpc.DialOption {
return grpc.WithUnaryInterceptor(func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
return invoker(ctx, method, req, reply, cc, opts...)
})
})
gcs := &GRPCClientSettings{}
opts, err := gcs.ToDialOptions()
assert.NoError(t, err)
assert.Len(t, opts, 2)
}

0 comments on commit 3a4e5de

Please sign in to comment.