From 0eee88a3d92052c029a828837ff8e471a8dc7fe0 Mon Sep 17 00:00:00 2001 From: Yicheng Qin Date: Mon, 2 Nov 2015 21:53:48 -0800 Subject: [PATCH] etcdserver: use timeout transport as peer transport This pairs with remote timeout listeners. etcd uses timeout listener, and times out the accepted connections if there is no activity. So the idle connections may time out easily. Becaus timeout transport doesn't reuse connections, it prevents using timeouted connection. This fixes the problem that etcd fail to get version of peers. --- etcdserver/server.go | 3 ++- rafthttp/transport.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/etcdserver/server.go b/etcdserver/server.go index 33e116cbb..7465d1712 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -211,7 +211,8 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) { haveWAL := wal.Exist(cfg.WALDir()) ss := snap.New(cfg.SnapDir()) - pt, err := transport.NewTransport(cfg.PeerTLSInfo, cfg.peerDialTimeout()) + // use timeout transport to pair with remote timeout listeners + pt, err := transport.NewTimeoutTransport(cfg.PeerTLSInfo, cfg.peerDialTimeout(), 0, 0) if err != nil { return nil, err } diff --git a/rafthttp/transport.go b/rafthttp/transport.go index 6a6fa12f6..3625bd001 100644 --- a/rafthttp/transport.go +++ b/rafthttp/transport.go @@ -143,7 +143,8 @@ func (t *Transport) Start() error { if err != nil { return err } - t.pipelineRt, err = transport.NewTransport(t.TLSInfo, t.DialTimeout) + // use timeout transport to pair with remote timeout listeners + t.pipelineRt, err = transport.NewTimeoutTransport(t.TLSInfo, t.DialTimeout, 0, 0) if err != nil { return err }