mirror of
https://github.com/minio/minio.git
synced 2025-04-09 14:10:10 -04:00
federation: Avoid printing context canceled error (#7997)
Golang proactively prints this error `http: proxy error: context canceled` when a request arrived to the current deployment and redirected to another deployment in a federated setup. Since this error can confuse users, this commit will just hide it.
This commit is contained in:
parent
c71895f225
commit
cbd02c58be
@ -746,6 +746,9 @@ func setBucketForwardingHandler(h http.Handler) http.Handler {
|
|||||||
fwd := handlers.NewForwarder(&handlers.Forwarder{
|
fwd := handlers.NewForwarder(&handlers.Forwarder{
|
||||||
PassHost: true,
|
PassHost: true,
|
||||||
RoundTripper: NewCustomHTTPTransport(),
|
RoundTripper: NewCustomHTTPTransport(),
|
||||||
|
Logger: func(err error) {
|
||||||
|
logger.LogIf(context.Background(), err)
|
||||||
|
},
|
||||||
})
|
})
|
||||||
return bucketForwardingHandler{fwd, h}
|
return bucketForwardingHandler{fwd, h}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* MinIO Cloud Storage, (C) 2018 MinIO, Inc.
|
* MinIO Cloud Storage, (C) 2018-2019 MinIO, Inc.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -32,6 +32,7 @@ const defaultFlushInterval = time.Duration(100) * time.Millisecond
|
|||||||
type Forwarder struct {
|
type Forwarder struct {
|
||||||
RoundTripper http.RoundTripper
|
RoundTripper http.RoundTripper
|
||||||
PassHost bool
|
PassHost bool
|
||||||
|
Logger func(error)
|
||||||
|
|
||||||
// internal variables
|
// internal variables
|
||||||
rewriter *headerRewriter
|
rewriter *headerRewriter
|
||||||
@ -58,10 +59,20 @@ func (f *Forwarder) ServeHTTP(w http.ResponseWriter, inReq *http.Request) {
|
|||||||
},
|
},
|
||||||
Transport: f.RoundTripper,
|
Transport: f.RoundTripper,
|
||||||
FlushInterval: defaultFlushInterval,
|
FlushInterval: defaultFlushInterval,
|
||||||
|
ErrorHandler: f.customErrHandler,
|
||||||
}
|
}
|
||||||
revproxy.ServeHTTP(w, outReq)
|
revproxy.ServeHTTP(w, outReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// customErrHandler is originally implemented to avoid having the following error
|
||||||
|
// `http: proxy error: context canceled` printed by Golang
|
||||||
|
func (f *Forwarder) customErrHandler(w http.ResponseWriter, r *http.Request, err error) {
|
||||||
|
if f.Logger != nil && err != context.Canceled {
|
||||||
|
f.Logger(err)
|
||||||
|
}
|
||||||
|
w.WriteHeader(http.StatusBadGateway)
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Forwarder) getURLFromRequest(req *http.Request) *url.URL {
|
func (f *Forwarder) getURLFromRequest(req *http.Request) *url.URL {
|
||||||
// If the Request was created by Go via a real HTTP request, RequestURI will
|
// If the Request was created by Go via a real HTTP request, RequestURI will
|
||||||
// contain the original query string. If the Request was created in code, RequestURI
|
// contain the original query string. If the Request was created in code, RequestURI
|
||||||
|
Loading…
x
Reference in New Issue
Block a user