diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index 6581856fd..e2a7d820f 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -116,7 +116,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) { return nil, fmt.Errorf("error setting up initial cluster: %v", err) } - pt, err := transport.NewTimeoutTransport(cfg.peerTLSInfo, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) + pt, err := transport.NewTimeoutTransport(cfg.peerTLSInfo, rafthttp.DialTimeout, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) if err != nil { return nil, err } diff --git a/integration/cluster_test.go b/integration/cluster_test.go index 3100d9f5e..4a9d798a1 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -663,7 +663,7 @@ func mustNewHTTPClient(t *testing.T, eps []string) client.HTTPClient { } func mustNewTransport(t *testing.T) *http.Transport { - tr, err := transport.NewTimeoutTransport(transport.TLSInfo{}, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) + tr, err := transport.NewTimeoutTransport(transport.TLSInfo{}, rafthttp.DialTimeout, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) if err != nil { t.Fatal(err) } diff --git a/pkg/transport/timeout_transport.go b/pkg/transport/timeout_transport.go index 151b818cd..63da483ff 100644 --- a/pkg/transport/timeout_transport.go +++ b/pkg/transport/timeout_transport.go @@ -23,7 +23,7 @@ import ( // NewTimeoutTransport returns a transport created using the given TLS info. // If read/write on the created connection blocks longer than its time limit, // it will return timeout error. -func NewTimeoutTransport(info TLSInfo, rdtimeoutd, wtimeoutd time.Duration) (*http.Transport, error) { +func NewTimeoutTransport(info TLSInfo, dialtimeoutd, rdtimeoutd, wtimeoutd time.Duration) (*http.Transport, error) { tr, err := NewTransport(info) if err != nil { return nil, err @@ -33,7 +33,7 @@ func NewTimeoutTransport(info TLSInfo, rdtimeoutd, wtimeoutd time.Duration) (*ht tr.MaxIdleConnsPerHost = -1 tr.Dial = (&rwTimeoutDialer{ Dialer: net.Dialer{ - Timeout: 30 * time.Second, + Timeout: dialtimeoutd, KeepAlive: 30 * time.Second, }, rdtimeoutd: rdtimeoutd, diff --git a/pkg/transport/timeout_transport_test.go b/pkg/transport/timeout_transport_test.go index 15305d000..e218ebeab 100644 --- a/pkg/transport/timeout_transport_test.go +++ b/pkg/transport/timeout_transport_test.go @@ -26,7 +26,7 @@ import ( // TestNewTimeoutTransport tests that NewTimeoutTransport returns a transport // that can dial out timeout connections. func TestNewTimeoutTransport(t *testing.T) { - tr, err := NewTimeoutTransport(TLSInfo{}, time.Hour, time.Hour) + tr, err := NewTimeoutTransport(TLSInfo{}, time.Hour, time.Hour, time.Hour) if err != nil { t.Fatalf("unexpected NewTimeoutTransport error: %v", err) } diff --git a/rafthttp/peer.go b/rafthttp/peer.go index 209abfef0..0e1ca28a3 100644 --- a/rafthttp/peer.go +++ b/rafthttp/peer.go @@ -40,6 +40,7 @@ const ( appRespBatchMs = 50 propBatchMs = 10 + DialTimeout = time.Second ConnReadTimeout = 5 * time.Second ConnWriteTimeout = 5 * time.Second )