diff --git a/client/client.go b/client/client.go index 0546f4653..7a5282f64 100644 --- a/client/client.go +++ b/client/client.go @@ -6,7 +6,6 @@ import ( "crypto/x509" "io/ioutil" "net" - "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc" @@ -54,7 +53,7 @@ func New(ctx context.Context, address string, opts ...ClientOpt) (*Client, error stream = append(stream, otgrpc.OpenTracingStreamClientInterceptor(wt.tracer)) } if wd, ok := o.(*withDialer); ok { - gopts = append(gopts, grpc.WithDialer(wd.dialer)) + gopts = append(gopts, grpc.WithContextDialer(wd.dialer)) needDialer = false } } @@ -63,9 +62,7 @@ func New(ctx context.Context, address string, opts ...ClientOpt) (*Client, error if err != nil { return nil, err } - // TODO(AkihiroSuda): use WithContextDialer (requires grpc 1.19) - // https://github.com/grpc/grpc-go/commit/40cb5618f475e7b9d61aa7920ae4b04ef9bbaf89 - gopts = append(gopts, grpc.WithDialer(dialFn)) + gopts = append(gopts, grpc.WithContextDialer(dialFn)) } if needWithInsecure { gopts = append(gopts, grpc.WithInsecure()) @@ -118,10 +115,10 @@ func WithFailFast() ClientOpt { } type withDialer struct { - dialer func(string, time.Duration) (net.Conn, error) + dialer func(context.Context, string) (net.Conn, error) } -func WithDialer(df func(string, time.Duration) (net.Conn, error)) ClientOpt { +func WithContextDialer(df func(context.Context, string) (net.Conn, error)) ClientOpt { return &withDialer{dialer: df} } @@ -179,17 +176,13 @@ type withTracer struct { tracer opentracing.Tracer } -func resolveDialer(address string) (func(string, time.Duration) (net.Conn, error), error) { +func resolveDialer(address string) (func(context.Context, string) (net.Conn, error), error) { ch, err := connhelper.GetConnectionHelper(address) if err != nil { return nil, err } if ch != nil { - f := func(a string, _ time.Duration) (net.Conn, error) { - ctx := context.Background() - return ch.ContextDialer(ctx, a) - } - return f, nil + return ch.ContextDialer, nil } // basic dialer return dialer, nil diff --git a/client/client_unix.go b/client/client_unix.go index 93afb956f..888a8173a 100644 --- a/client/client_unix.go +++ b/client/client_unix.go @@ -3,17 +3,18 @@ package client import ( + "context" "net" "strings" - "time" "github.com/pkg/errors" ) -func dialer(address string, timeout time.Duration) (net.Conn, error) { +func dialer(ctx context.Context, address string) (net.Conn, error) { addrParts := strings.SplitN(address, "://", 2) if len(addrParts) != 2 { return nil, errors.Errorf("invalid address %s", address) } - return net.DialTimeout(addrParts[0], addrParts[1], timeout) + var d net.Dialer + return d.DialContext(ctx, addrParts[0], addrParts[1]) } diff --git a/client/client_windows.go b/client/client_windows.go index d0d8a1b40..a9eb87f24 100644 --- a/client/client_windows.go +++ b/client/client_windows.go @@ -1,15 +1,15 @@ package client import ( + "context" "net" "strings" - "time" winio "github.com/Microsoft/go-winio" "github.com/pkg/errors" ) -func dialer(address string, timeout time.Duration) (net.Conn, error) { +func dialer(ctx context.Context, address string) (net.Conn, error) { addrParts := strings.SplitN(address, "://", 2) if len(addrParts) != 2 { return nil, errors.Errorf("invalid address %s", address) @@ -17,8 +17,9 @@ func dialer(address string, timeout time.Duration) (net.Conn, error) { switch addrParts[0] { case "npipe": address = strings.Replace(addrParts[1], "/", "\\", -1) - return winio.DialPipe(address, &timeout) + return winio.DialPipeContext(ctx, address) default: - return net.DialTimeout(addrParts[0], addrParts[1], timeout) + var d net.Dialer + return d.DialContext(ctx, addrParts[0], addrParts[1]) } }