From 43a6ff8fd45be07ca44ab9fbf21379b072f60c6b Mon Sep 17 00:00:00 2001 From: Ryan Leung Date: Tue, 2 Jul 2019 20:02:23 +0800 Subject: [PATCH] server: use a different timeout for http clients (#1574) (#1576) * use a different timeout for http clients --- pdctl/command/global.go | 11 ++++++----- server/api/redirector.go | 2 +- server/api/util.go | 14 ++++++++++---- server/server.go | 2 +- server/util.go | 19 ++++++++++++------- 5 files changed, 30 insertions(+), 18 deletions(-) diff --git a/pdctl/command/global.go b/pdctl/command/global.go index 8f6215b6f0b..cac3ee2a2f4 100644 --- a/pdctl/command/global.go +++ b/pdctl/command/global.go @@ -29,8 +29,7 @@ import ( ) var ( - dialClient = &http.Client{} - + dialClient = &http.Client{} pingPrefix = "pd/ping" errInvalidAddr = errors.New("Invalid pd address, Cannot get connect to it") ) @@ -47,9 +46,11 @@ func InitHTTPSClient(CAPath, CertPath, KeyPath string) error { return errors.Trace(err) } - dialClient = &http.Client{Transport: &http.Transport{ - TLSClientConfig: tlsConfig, - }} + dialClient = &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: tlsConfig, + }, + } return nil } diff --git a/server/api/redirector.go b/server/api/redirector.go index aa38aea1d0c..f52fcb45a58 100644 --- a/server/api/redirector.go +++ b/server/api/redirector.go @@ -77,7 +77,7 @@ type customReverseProxies struct { func newCustomReverseProxies(urls []url.URL) *customReverseProxies { p := &customReverseProxies{ - client: server.DialClient, + client: dialClient, } p.urls = append(p.urls, urls...) diff --git a/server/api/util.go b/server/api/util.go index e97fcc0526b..d06b850fe7e 100644 --- a/server/api/util.go +++ b/server/api/util.go @@ -21,9 +21,15 @@ import ( "net/http" "github.com/juju/errors" - "github.com/pingcap/pd/server" ) +// dialClient used to dail http request. +var dialClient = &http.Client{ + Transport: &http.Transport{ + DisableKeepAlives: true, + }, +} + func readJSON(r io.ReadCloser, data interface{}) error { defer r.Close() @@ -40,7 +46,7 @@ func readJSON(r io.ReadCloser, data interface{}) error { } func postJSON(url string, data []byte) error { - resp, err := server.DialClient.Post(url, "application/json", bytes.NewBuffer(data)) + resp, err := dialClient.Post(url, "application/json", bytes.NewBuffer(data)) if err != nil { return errors.Trace(err) } @@ -60,7 +66,7 @@ func doDelete(url string) error { if err != nil { return err } - res, err := server.DialClient.Do(req) + res, err := dialClient.Do(req) if err != nil { return err } @@ -69,7 +75,7 @@ func doDelete(url string) error { } func doGet(url string) (*http.Response, error) { - resp, err := server.DialClient.Get(url) + resp, err := dialClient.Get(url) if err != nil { return nil, errors.Trace(err) } diff --git a/server/server.go b/server/server.go index dfb34f5e74a..a86a58c6902 100644 --- a/server/server.go +++ b/server/server.go @@ -648,7 +648,7 @@ func (s *Server) CheckHealth(members []*pdpb.Member) map[uint64]*pdpb.Member { unhealthMembers := make(map[uint64]*pdpb.Member) for _, member := range members { for _, cURL := range member.ClientUrls { - resp, err := DialClient.Get(fmt.Sprintf("%s%s", cURL, healthURL)) + resp, err := dialClient.Get(fmt.Sprintf("%s%s", cURL, healthURL)) if resp != nil { resp.Body.Close() } diff --git a/server/util.go b/server/util.go index be10b17d73c..10ab08c01e7 100644 --- a/server/util.go +++ b/server/util.go @@ -39,7 +39,8 @@ const ( defaultLogMaxAge = 28 // days defaultLogLevel = log.InfoLevel - logDirMode = 0755 + logDirMode = 0755 + clientTimeout = 3 * time.Second ) // Version information. @@ -50,8 +51,9 @@ var ( PDGitBranch = "None" ) -// DialClient used to dail http request. -var DialClient = &http.Client{ +// dialClient used to dail http request. +var dialClient = &http.Client{ + Timeout: clientTimeout, Transport: &http.Transport{ DisableKeepAlives: true, }, @@ -265,9 +267,12 @@ func InitHTTPClient(svr *Server) error { return errors.Trace(err) } - DialClient = &http.Client{Transport: &http.Transport{ - TLSClientConfig: tlsConfig, - DisableKeepAlives: true, - }} + dialClient = &http.Client{ + Timeout: clientTimeout, + Transport: &http.Transport{ + TLSClientConfig: tlsConfig, + DisableKeepAlives: true, + }, + } return nil }