Patch for concurrent iterator & others (onto v1.11.6) #386
@ -39,10 +39,11 @@ func StartHTTPEndpoint(endpoint string, timeouts rpc.HTTPTimeouts, handler http.
|
|||||||
CheckTimeouts(&timeouts)
|
CheckTimeouts(&timeouts)
|
||||||
// Bundle and start the HTTP server
|
// Bundle and start the HTTP server
|
||||||
httpSrv := &http.Server{
|
httpSrv := &http.Server{
|
||||||
Handler: handler,
|
Handler: handler,
|
||||||
ReadTimeout: timeouts.ReadTimeout,
|
ReadTimeout: timeouts.ReadTimeout,
|
||||||
WriteTimeout: timeouts.WriteTimeout,
|
ReadHeaderTimeout: timeouts.ReadHeaderTimeout,
|
||||||
IdleTimeout: timeouts.IdleTimeout,
|
WriteTimeout: timeouts.WriteTimeout,
|
||||||
|
IdleTimeout: timeouts.IdleTimeout,
|
||||||
}
|
}
|
||||||
go httpSrv.Serve(listener)
|
go httpSrv.Serve(listener)
|
||||||
return httpSrv, listener.Addr(), err
|
return httpSrv, listener.Addr(), err
|
||||||
@ -75,6 +76,10 @@ func CheckTimeouts(timeouts *rpc.HTTPTimeouts) {
|
|||||||
log.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadTimeout)
|
log.Warn("Sanitizing invalid HTTP read timeout", "provided", timeouts.ReadTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadTimeout)
|
||||||
timeouts.ReadTimeout = rpc.DefaultHTTPTimeouts.ReadTimeout
|
timeouts.ReadTimeout = rpc.DefaultHTTPTimeouts.ReadTimeout
|
||||||
}
|
}
|
||||||
|
if timeouts.ReadHeaderTimeout < time.Second {
|
||||||
|
log.Warn("Sanitizing invalid HTTP read header timeout", "provided", timeouts.ReadHeaderTimeout, "updated", rpc.DefaultHTTPTimeouts.ReadHeaderTimeout)
|
||||||
|
timeouts.ReadHeaderTimeout = rpc.DefaultHTTPTimeouts.ReadHeaderTimeout
|
||||||
|
}
|
||||||
if timeouts.WriteTimeout < time.Second {
|
if timeouts.WriteTimeout < time.Second {
|
||||||
log.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", rpc.DefaultHTTPTimeouts.WriteTimeout)
|
log.Warn("Sanitizing invalid HTTP write timeout", "provided", timeouts.WriteTimeout, "updated", rpc.DefaultHTTPTimeouts.WriteTimeout)
|
||||||
timeouts.WriteTimeout = rpc.DefaultHTTPTimeouts.WriteTimeout
|
timeouts.WriteTimeout = rpc.DefaultHTTPTimeouts.WriteTimeout
|
||||||
|
@ -134,6 +134,7 @@ func (h *httpServer) start() error {
|
|||||||
if h.timeouts != (rpc.HTTPTimeouts{}) {
|
if h.timeouts != (rpc.HTTPTimeouts{}) {
|
||||||
CheckTimeouts(&h.timeouts)
|
CheckTimeouts(&h.timeouts)
|
||||||
h.server.ReadTimeout = h.timeouts.ReadTimeout
|
h.server.ReadTimeout = h.timeouts.ReadTimeout
|
||||||
|
h.server.ReadHeaderTimeout = h.timeouts.ReadHeaderTimeout
|
||||||
h.server.WriteTimeout = h.timeouts.WriteTimeout
|
h.server.WriteTimeout = h.timeouts.WriteTimeout
|
||||||
h.server.IdleTimeout = h.timeouts.IdleTimeout
|
h.server.IdleTimeout = h.timeouts.IdleTimeout
|
||||||
}
|
}
|
||||||
|
15
rpc/http.go
15
rpc/http.go
@ -87,6 +87,14 @@ type HTTPTimeouts struct {
|
|||||||
// ReadHeaderTimeout. It is valid to use them both.
|
// ReadHeaderTimeout. It is valid to use them both.
|
||||||
ReadTimeout time.Duration
|
ReadTimeout time.Duration
|
||||||
|
|
||||||
|
// ReadHeaderTimeout is the amount of time allowed to read
|
||||||
|
// request headers. The connection's read deadline is reset
|
||||||
|
// after reading the headers and the Handler can decide what
|
||||||
|
// is considered too slow for the body. If ReadHeaderTimeout
|
||||||
|
// is zero, the value of ReadTimeout is used. If both are
|
||||||
|
// zero, there is no timeout.
|
||||||
|
ReadHeaderTimeout time.Duration
|
||||||
|
|
||||||
// WriteTimeout is the maximum duration before timing out
|
// WriteTimeout is the maximum duration before timing out
|
||||||
// writes of the response. It is reset whenever a new
|
// writes of the response. It is reset whenever a new
|
||||||
// request's header is read. Like ReadTimeout, it does not
|
// request's header is read. Like ReadTimeout, it does not
|
||||||
@ -103,9 +111,10 @@ type HTTPTimeouts struct {
|
|||||||
// DefaultHTTPTimeouts represents the default timeout values used if further
|
// DefaultHTTPTimeouts represents the default timeout values used if further
|
||||||
// configuration is not provided.
|
// configuration is not provided.
|
||||||
var DefaultHTTPTimeouts = HTTPTimeouts{
|
var DefaultHTTPTimeouts = HTTPTimeouts{
|
||||||
ReadTimeout: 30 * time.Second,
|
ReadTimeout: 30 * time.Second,
|
||||||
WriteTimeout: 30 * time.Second,
|
ReadHeaderTimeout: 30 * time.Second,
|
||||||
IdleTimeout: 120 * time.Second,
|
WriteTimeout: 30 * time.Second,
|
||||||
|
IdleTimeout: 120 * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
// DialHTTPWithClient creates a new RPC client that connects to an RPC server over HTTP
|
// DialHTTPWithClient creates a new RPC client that connects to an RPC server over HTTP
|
||||||
|
Loading…
Reference in New Issue
Block a user