Merge pull request #669 from zcalusic/master
Fix REST backend HTTP keepalive
This commit is contained in:
commit
b1ed74eb43
1 changed files with 14 additions and 2 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
|
@ -59,7 +60,7 @@ func Open(cfg Config) (restic.Backend, error) {
|
||||||
for i := 0; i < connLimit; i++ {
|
for i := 0; i < connLimit; i++ {
|
||||||
connChan <- struct{}{}
|
connChan <- struct{}{}
|
||||||
}
|
}
|
||||||
tr := &http.Transport{}
|
tr := &http.Transport{MaxIdleConnsPerHost: connLimit}
|
||||||
client := http.Client{Transport: tr}
|
client := http.Client{Transport: tr}
|
||||||
|
|
||||||
return &restBackend{url: cfg.URL, connChan: connChan, client: client}, nil
|
return &restBackend{url: cfg.URL, connChan: connChan, client: client}, nil
|
||||||
|
@ -102,6 +103,7 @@ func (b *restBackend) Load(h restic.Handle, p []byte, off int64) (n int, err err
|
||||||
|
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
io.Copy(ioutil.Discard, resp.Body)
|
||||||
e := resp.Body.Close()
|
e := resp.Body.Close()
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -132,6 +134,7 @@ func (b *restBackend) Save(h restic.Handle, p []byte) (err error) {
|
||||||
|
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
io.Copy(ioutil.Discard, resp.Body)
|
||||||
e := resp.Body.Close()
|
e := resp.Body.Close()
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
@ -164,6 +167,7 @@ func (b *restBackend) Stat(h restic.Handle) (restic.FileInfo, error) {
|
||||||
return restic.FileInfo{}, errors.Wrap(err, "client.Head")
|
return restic.FileInfo{}, errors.Wrap(err, "client.Head")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
io.Copy(ioutil.Discard, resp.Body)
|
||||||
if err = resp.Body.Close(); err != nil {
|
if err = resp.Body.Close(); err != nil {
|
||||||
return restic.FileInfo{}, errors.Wrap(err, "Close")
|
return restic.FileInfo{}, errors.Wrap(err, "Close")
|
||||||
}
|
}
|
||||||
|
@ -216,6 +220,7 @@ func (b *restBackend) Remove(t restic.FileType, name string) error {
|
||||||
return errors.New("blob not removed")
|
return errors.New("blob not removed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
io.Copy(ioutil.Discard, resp.Body)
|
||||||
return resp.Body.Close()
|
return resp.Body.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +240,14 @@ func (b *restBackend) List(t restic.FileType, done <-chan struct{}) <-chan strin
|
||||||
b.connChan <- struct{}{}
|
b.connChan <- struct{}{}
|
||||||
|
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
defer resp.Body.Close()
|
defer func() {
|
||||||
|
io.Copy(ioutil.Discard, resp.Body)
|
||||||
|
e := resp.Body.Close()
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
err = errors.Wrap(e, "Close")
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue