From b7bcaee622aa649b368cb7270899bb1d66f8320e Mon Sep 17 00:00:00 2001 From: Anshul Pundir Date: Tue, 24 Oct 2017 13:11:03 -0700 Subject: [PATCH] Provide custom gRPC dialer to override default proxy dialer (#2419) Signed-off-by: Anshul Pundir (cherry picked from commit 312be5983e2d2f01f0cbcc99d027b28433256705) Signed-off-by: Sebastiaan van Stijn --- connectionbroker/broker.go | 9 ++++++++- manager/state/raft/transport/transport.go | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/connectionbroker/broker.go b/connectionbroker/broker.go index a0ba7cf0a8..43b384ab2a 100644 --- a/connectionbroker/broker.go +++ b/connectionbroker/broker.go @@ -4,7 +4,9 @@ package connectionbroker import ( + "net" "sync" + "time" "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/remotes" @@ -60,9 +62,14 @@ func (b *Broker) SelectRemote(dialOpts ...grpc.DialOption) (*Conn, error) { return nil, err } + // gRPC dialer connects to proxy first. Provide a custom dialer here avoid that. + // TODO(anshul) Add an option to configure this. dialOpts = append(dialOpts, grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor), - grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor)) + grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor), + grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) { + return net.DialTimeout("tcp", addr, timeout) + })) cc, err := grpc.Dial(peer.Addr, dialOpts...) if err != nil { diff --git a/manager/state/raft/transport/transport.go b/manager/state/raft/transport/transport.go index bd5a04eec7..6f096ef9b2 100644 --- a/manager/state/raft/transport/transport.go +++ b/manager/state/raft/transport/transport.go @@ -3,6 +3,7 @@ package transport import ( + "net" "sync" "time" @@ -348,6 +349,13 @@ func (t *Transport) dial(addr string) (*grpc.ClientConn, error) { grpcOptions = append(grpcOptions, grpc.WithTimeout(t.config.SendTimeout)) } + // gRPC dialer connects to proxy first. Provide a custom dialer here avoid that. + // TODO(anshul) Add an option to configure this. + grpcOptions = append(grpcOptions, + grpc.WithDialer(func(addr string, timeout time.Duration) (net.Conn, error) { + return net.DialTimeout("tcp", addr, timeout) + })) + cc, err := grpc.Dial(addr, grpcOptions...) if err != nil { return nil, err