Prevent crash when Exporter is not TracerDelegate

There is no enforcing Exporter + TracerDelegate via type system nor by rigorous runtime checking.
Thus the code previously crashed since `withTracerDelegate` (nor any callers) check whether embedded `TracerDelegate` is `nil`.
Now only passes `withTracerDelegate` if it can actually be called.

Signed-off-by: Andreas Bergmeier <abergmeier@gmx.net>
pull/925/head
Andreas Bergmeier 4 years ago
parent 11b771c789
commit e4b4594fb4

@ -341,11 +341,17 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) {
return nil, err
}
td, _ := exp.(client.TracerDelegate)
return client.New(ctx, "", client.WithContextDialer(func(context.Context, string) (net.Conn, error) {
clientOpts := []client.ClientOpt{
client.WithContextDialer(func(context.Context, string) (net.Conn, error) {
return conn, nil
}), client.WithTracerDelegate(td))
}),
}
if td, _ := exp.(client.TracerDelegate); td != nil {
clientOpts = append(clientOpts, client.WithTracerDelegate(td))
}
return client.New(ctx, "", clientOpts...)
}
func (d *Driver) Factory() driver.Factory {

@ -211,11 +211,17 @@ func (d *Driver) Client(ctx context.Context) (*client.Client, error) {
return nil, err
}
td, _ := exp.(client.TracerDelegate)
return client.New(ctx, "", client.WithContextDialer(func(context.Context, string) (net.Conn, error) {
clientOpts := []client.ClientOpt{
client.WithContextDialer(func(context.Context, string) (net.Conn, error) {
return conn, nil
}), client.WithTracerDelegate(td))
}),
}
if td, _ := exp.(client.TracerDelegate); td != nil {
clientOpts = append(clientOpts, client.WithTracerDelegate(td))
}
return client.New(ctx, "", clientOpts...)
}
func (d *Driver) Factory() driver.Factory {

Loading…
Cancel
Save