Go Keep client correctly closes response body on client requests, should fix
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 29 May 2014 13:22:43 +0000 (09:22 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 29 May 2014 13:22:43 +0000 (09:22 -0400)
lingering connections problem.  Also added graceful shutdown on SIGINT to
keepproxy. refs #1885

sdk/go/src/arvados.org/keepclient/support.go
services/keep/src/arvados.org/keepproxy/keepproxy.go

index b1d59f06d35db5c0ccb2ca36e8d586d1fd7326cd..5aeec125a126fcdfd7526de4de9d3bd9c9f1d95a 100644 (file)
@@ -63,6 +63,10 @@ func (this *KeepClient) DiscoverKeepServers() error {
                }
        }
 
+       // 'defer' is a stack, so it will drain the Body before closing it.
+       defer resp.Body.Close()
+       defer io.Copy(ioutil.Discard, resp.Body)
+
        type svcList struct {
                Items []keepDisk `json:"items"`
        }
@@ -198,6 +202,9 @@ func (this KeepClient) uploadToKeepServer(host string, hash string, body io.Read
                fmt.Sscanf(xr, "%d", &rep)
        }
 
+       defer resp.Body.Close()
+       defer io.Copy(ioutil.Discard, resp.Body)
+
        respbody, err2 := ioutil.ReadAll(&io.LimitedReader{resp.Body, 4096})
        if err2 != nil && err2 != io.EOF {
                upload_status <- uploadStatus{err2, url, resp.StatusCode, rep, string(respbody)}
index 414835c0e249cd9771f475a087793d6f923bd5bb..42f5a782311cb21b3d9200d81202811ee3916cf3 100644 (file)
@@ -100,6 +100,7 @@ func main() {
                listener.Close()
        }(term)
        signal.Notify(term, syscall.SIGTERM)
+       signal.Notify(term, syscall.SIGINT)
 
        if pidfile != "" {
                f, err := os.Create(pidfile)