fix webhook timeout bug (#15613)
* Also fix the potential problem in httplib
This commit is contained in:
		
							parent
							
								
									6ea6e2b4eb
								
							
						
					
					
						commit
						3d5bb3e6a3
					
				
					 2 changed files with 7 additions and 10 deletions
				
			
		|  | @ -325,7 +325,7 @@ func (r *Request) getResponse() (*http.Response, error) { | ||||||
| 		trans = &http.Transport{ | 		trans = &http.Transport{ | ||||||
| 			TLSClientConfig: r.setting.TLSClientConfig, | 			TLSClientConfig: r.setting.TLSClientConfig, | ||||||
| 			Proxy:           proxy, | 			Proxy:           proxy, | ||||||
| 			Dial:            TimeoutDialer(r.setting.ConnectTimeout, r.setting.ReadWriteTimeout), | 			Dial:            TimeoutDialer(r.setting.ConnectTimeout), | ||||||
| 		} | 		} | ||||||
| 	} else if t, ok := trans.(*http.Transport); ok { | 	} else if t, ok := trans.(*http.Transport); ok { | ||||||
| 		if t.TLSClientConfig == nil { | 		if t.TLSClientConfig == nil { | ||||||
|  | @ -335,7 +335,7 @@ func (r *Request) getResponse() (*http.Response, error) { | ||||||
| 			t.Proxy = r.setting.Proxy | 			t.Proxy = r.setting.Proxy | ||||||
| 		} | 		} | ||||||
| 		if t.Dial == nil { | 		if t.Dial == nil { | ||||||
| 			t.Dial = TimeoutDialer(r.setting.ConnectTimeout, r.setting.ReadWriteTimeout) | 			t.Dial = TimeoutDialer(r.setting.ConnectTimeout) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -352,6 +352,7 @@ func (r *Request) getResponse() (*http.Response, error) { | ||||||
| 	client := &http.Client{ | 	client := &http.Client{ | ||||||
| 		Transport: trans, | 		Transport: trans, | ||||||
| 		Jar:       jar, | 		Jar:       jar, | ||||||
|  | 		Timeout:   r.setting.ReadWriteTimeout, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if len(r.setting.UserAgent) > 0 && len(r.req.Header.Get("User-Agent")) == 0 { | 	if len(r.setting.UserAgent) > 0 && len(r.req.Header.Get("User-Agent")) == 0 { | ||||||
|  | @ -457,12 +458,12 @@ func (r *Request) Response() (*http.Response, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TimeoutDialer returns functions of connection dialer with timeout settings for http.Transport Dial field.
 | // TimeoutDialer returns functions of connection dialer with timeout settings for http.Transport Dial field.
 | ||||||
| func TimeoutDialer(cTimeout time.Duration, rwTimeout time.Duration) func(net, addr string) (c net.Conn, err error) { | func TimeoutDialer(cTimeout time.Duration) func(net, addr string) (c net.Conn, err error) { | ||||||
| 	return func(netw, addr string) (net.Conn, error) { | 	return func(netw, addr string) (net.Conn, error) { | ||||||
| 		conn, err := net.DialTimeout(netw, addr, cTimeout) | 		conn, err := net.DialTimeout(netw, addr, cTimeout) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 		return conn, conn.SetDeadline(time.Now().Add(rwTimeout)) | 		return conn, nil | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -271,14 +271,10 @@ func InitDeliverHooks() { | ||||||
| 			TLSClientConfig: &tls.Config{InsecureSkipVerify: setting.Webhook.SkipTLSVerify}, | 			TLSClientConfig: &tls.Config{InsecureSkipVerify: setting.Webhook.SkipTLSVerify}, | ||||||
| 			Proxy:           webhookProxy(), | 			Proxy:           webhookProxy(), | ||||||
| 			Dial: func(netw, addr string) (net.Conn, error) { | 			Dial: func(netw, addr string) (net.Conn, error) { | ||||||
| 				conn, err := net.DialTimeout(netw, addr, timeout) | 				return net.DialTimeout(netw, addr, timeout) // dial timeout
 | ||||||
| 				if err != nil { |  | ||||||
| 					return nil, err |  | ||||||
| 				} |  | ||||||
| 
 |  | ||||||
| 				return conn, conn.SetDeadline(time.Now().Add(timeout)) |  | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
|  | 		Timeout: timeout, // request timeout
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	go graceful.GetManager().RunWithShutdownContext(DeliverHooks) | 	go graceful.GetManager().RunWithShutdownContext(DeliverHooks) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue