Merge pull request 2100 from restic/fix-1989

gs: Respect bandwidth limiting
This commit is contained in:
Alexander Neumann 2018-11-28 21:39:42 +01:00
commit 98526b8dbe
3 changed files with 21 additions and 4 deletions

View File

@ -0,0 +1,7 @@
Bugfix: Google Cloud Storage: Respect bandwidth limit
The GCS backend did not respect the bandwidth limit configured, a previous
commit accidentally removed support for it.
https://github.com/restic/restic/issues/1989
https://github.com/restic/restic/pull/2100

View File

@ -15,6 +15,7 @@ import (
"github.com/restic/restic/internal/debug"
"github.com/restic/restic/internal/restic"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/googleapi"
storage "google.golang.org/api/storage/v1"
@ -40,8 +41,17 @@ type Backend struct {
// Ensure that *Backend implements restic.Backend.
var _ restic.Backend = &Backend{}
func getStorageService() (*storage.Service, error) {
client, err := google.DefaultClient(context.TODO(), storage.DevstorageReadWriteScope)
func getStorageService(rt http.RoundTripper) (*storage.Service, error) {
// create a new HTTP client
httpClient := &http.Client{
Transport: rt,
}
// create a now context with the HTTP client stored at the oauth2.HTTPClient key
ctx := context.WithValue(context.Background(), oauth2.HTTPClient, httpClient)
// use this context
client, err := google.DefaultClient(ctx, storage.DevstorageReadWriteScope)
if err != nil {
return nil, err
}
@ -59,7 +69,7 @@ const defaultListMaxItems = 1000
func open(cfg Config, rt http.RoundTripper) (*Backend, error) {
debug.Log("open, config %#v", cfg)
service, err := getStorageService()
service, err := getStorageService(rt)
if err != nil {
return nil, errors.Wrap(err, "getStorageService")
}

2
vendor/modules.txt vendored
View File

@ -109,8 +109,8 @@ golang.org/x/net/http/httpguts
golang.org/x/net/http2/hpack
golang.org/x/net/idna
# golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be
golang.org/x/oauth2/google
golang.org/x/oauth2
golang.org/x/oauth2/google
golang.org/x/oauth2/internal
golang.org/x/oauth2/jws
golang.org/x/oauth2/jwt