diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index 28105c53d..4ff494a78 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -174,7 +174,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.DialTimeout, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) + pt, err := transport.NewTimeoutTransport(cfg.peerTLSInfo, peerDialTimeout(cfg.ElectionMs), rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) if err != nil { return nil, err } @@ -503,3 +503,9 @@ func setupLogging(cfg *config) { repoLog.SetLogLevel(settings) } } + +func peerDialTimeout(electionMs uint) time.Duration { + // 1s for queue wait and system delay + // + one RTT, which is smaller than 1/5 election timeout + return time.Second + time.Duration(electionMs)*time.Millisecond/5 +} diff --git a/integration/cluster_test.go b/integration/cluster_test.go index fa3ebf2aa..ecb66da3c 100644 --- a/integration/cluster_test.go +++ b/integration/cluster_test.go @@ -842,7 +842,8 @@ func mustNewHTTPClient(t *testing.T, eps []string) client.Client { } func mustNewTransport(t *testing.T, tlsInfo transport.TLSInfo) *http.Transport { - tr, err := transport.NewTimeoutTransport(tlsInfo, rafthttp.DialTimeout, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) + // tick in integration test is short, so 1s dial timeout could play well. + tr, err := transport.NewTimeoutTransport(tlsInfo, time.Second, rafthttp.ConnReadTimeout, rafthttp.ConnWriteTimeout) if err != nil { t.Fatal(err) } diff --git a/rafthttp/peer.go b/rafthttp/peer.go index 95ab2db4b..78af0e3f5 100644 --- a/rafthttp/peer.go +++ b/rafthttp/peer.go @@ -26,7 +26,6 @@ import ( ) const ( - DialTimeout = time.Second // ConnRead/WriteTimeout is the i/o timeout set on each connection rafthttp pkg creates. // A 5 seconds timeout is good enough for recycling bad connections. Or we have to wait for // tcp keepalive failing to detect a bad connection, which is at minutes level.