From 864ce5f946e1923900ba6fdb01921987451e7982 Mon Sep 17 00:00:00 2001 From: Wolfgang Ebner Date: Tue, 16 Jun 2015 20:39:42 +0200 Subject: [PATCH] proxy: handle canceled proxy request gracefully when a client of the proxy server cancels a request the proxy should not set the endpoint state to unavailable --- proxy/reverse.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/proxy/reverse.go b/proxy/reverse.go index 0db5bd111..a707a38b1 100644 --- a/proxy/reverse.go +++ b/proxy/reverse.go @@ -90,6 +90,7 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request return } + requestCanceled := false completeCh := make(chan bool, 1) closeNotifier, ok := rw.(http.CloseNotifier) if ok { @@ -98,6 +99,8 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request case <-closeNotifier.CloseNotify(): tp, ok := p.transport.(*http.Transport) if ok { + requestCanceled = true + log.Printf("proxy: request from %v canceled", clientreq.RemoteAddr) tp.CancelRequest(proxyreq) } case <-completeCh: @@ -118,6 +121,9 @@ func (p *reverseProxy) ServeHTTP(rw http.ResponseWriter, clientreq *http.Request redirectRequest(proxyreq, ep.URL) res, err = p.transport.RoundTrip(proxyreq) + if requestCanceled { + return + } if err != nil { log.Printf("proxy: failed to direct request to %s: %v", ep.URL.String(), err) ep.Failed()