From 973cfbebdac9012e9b5dafa2de73014446c15c6f Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Thu, 12 Feb 2015 22:23:10 -0800 Subject: [PATCH] *: make dial timeout configurable Dial timeout is set shorter because 1. etcd is supposed to work in good environment, and the new value is long enough 2. shorter dial timeout makes dial fail faster, which is good for performance Conflicts: etcdmain/etcd.go --- etcdmain/etcd.go | 2 +- integration/cluster_test.go | 2 +- pkg/transport/timeout_transport.go | 4 ++-- pkg/transport/timeout_transport_test.go | 2 +- rafthttp/peer.go | 1 + 5 files changed, 6 insertions(+), 5 deletions(-) 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 )