diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index 904c456f3..62503b57b 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -92,7 +92,7 @@ func startEtcd(cfg *config) (<-chan struct{}, error) { log.Printf("no data-dir provided, using default data-dir ./%s", cfg.dir) } - 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 59d8ac38c..648d3de85 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -623,7 +623,7 @@ func mustNewHTTPClient(t *testing.T, eps []string) client.Client { } 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 ae8767f7a..322b7997e 100644 --- a/pkg/transport/timeout_transport.go +++ b/pkg/transport/timeout_transport.go @@ -23,14 +23,14 @@ 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 } 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 71537a2e8..47ea216c2 100644 --- a/pkg/transport/timeout_transport_test.go +++ b/pkg/transport/timeout_transport_test.go @@ -24,7 +24,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 3ecf0b05f..a4e7557d3 100644 --- a/rafthttp/peer.go +++ b/rafthttp/peer.go @@ -30,6 +30,7 @@ const ( appRespBatchMs = 50 propBatchMs = 10 + DialTimeout = time.Second ConnReadTimeout = 5 * time.Second ConnWriteTimeout = 5 * time.Second )