OLD | NEW |
1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
4 | 4 |
5 package gs | 5 package gs |
6 | 6 |
7 import ( | 7 import ( |
8 "fmt" | 8 "fmt" |
9 "io" | 9 "io" |
10 "net/http" | 10 "net/http" |
11 "time" | 11 "time" |
12 | 12 |
13 "github.com/luci/luci-go/common/errors" | 13 "github.com/luci/luci-go/common/errors" |
14 log "github.com/luci/luci-go/common/logging" | 14 log "github.com/luci/luci-go/common/logging" |
15 "github.com/luci/luci-go/common/retry" | 15 "github.com/luci/luci-go/common/retry" |
| 16 |
| 17 gs "cloud.google.com/go/storage" |
16 "golang.org/x/net/context" | 18 "golang.org/x/net/context" |
17 "google.golang.org/api/googleapi" | 19 "google.golang.org/api/googleapi" |
18 » "google.golang.org/cloud" | 20 » "google.golang.org/api/option" |
19 » gs "google.golang.org/cloud/storage" | |
20 ) | 21 ) |
21 | 22 |
22 var ( | 23 var ( |
23 // ReadWriteScopes is the set of scopes needed for read/write Google Sto
rage | 24 // ReadWriteScopes is the set of scopes needed for read/write Google Sto
rage |
24 // access. | 25 // access. |
25 ReadWriteScopes = []string{gs.ScopeReadWrite} | 26 ReadWriteScopes = []string{gs.ScopeReadWrite} |
26 | 27 |
27 // ReadOnlyScopes is the set of scopes needed for read/write Google Stor
age | 28 // ReadOnlyScopes is the set of scopes needed for read/write Google Stor
age |
28 // read-only access. | 29 // read-only access. |
29 ReadOnlyScopes = []string{gs.ScopeReadOnly} | 30 ReadOnlyScopes = []string{gs.ScopeReadOnly} |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 return nil | 191 return nil |
191 }, func(err error, d time.Duration) { | 192 }, func(err error, d time.Duration) { |
192 log.Fields{ | 193 log.Fields{ |
193 log.ErrorKey: err, | 194 log.ErrorKey: err, |
194 "delay": d, | 195 "delay": d, |
195 }.Warningf(c, "Transient error deleting file. Retrying...") | 196 }.Warningf(c, "Transient error deleting file. Retrying...") |
196 }) | 197 }) |
197 } | 198 } |
198 | 199 |
199 func (c *prodClient) newClient() (*gs.Client, error) { | 200 func (c *prodClient) newClient() (*gs.Client, error) { |
200 » var optsArray [1]cloud.ClientOption | 201 » var optsArray [1]option.ClientOption |
201 opts := optsArray[:0] | 202 opts := optsArray[:0] |
202 if c.rt != nil { | 203 if c.rt != nil { |
203 » » opts = append(opts, cloud.WithBaseHTTP(&http.Client{ | 204 » » opts = append(opts, option.WithHTTPClient(&http.Client{ |
204 Transport: c.rt, | 205 Transport: c.rt, |
205 })) | 206 })) |
206 } | 207 } |
207 return gs.NewClient(c, opts...) | 208 return gs.NewClient(c, opts...) |
208 } | 209 } |
209 | 210 |
210 func (c *prodClient) handleForPath(p Path) (*gs.ObjectHandle, error) { | 211 func (c *prodClient) handleForPath(p Path) (*gs.ObjectHandle, error) { |
211 bucket, filename, err := splitPathErr(p) | 212 bucket, filename, err := splitPathErr(p) |
212 if err != nil { | 213 if err != nil { |
213 return nil, err | 214 return nil, err |
(...skipping 16 matching lines...) Expand all Loading... |
230 // The storage library doesn't return gs.ErrObjectNotExist when Delete | 231 // The storage library doesn't return gs.ErrObjectNotExist when Delete |
231 // returns a 404. Catch that explicitly. | 232 // returns a 404. Catch that explicitly. |
232 if t, ok := err.(*googleapi.Error); ok { | 233 if t, ok := err.(*googleapi.Error); ok { |
233 switch t.Code { | 234 switch t.Code { |
234 case http.StatusNotFound: | 235 case http.StatusNotFound: |
235 return true | 236 return true |
236 } | 237 } |
237 } | 238 } |
238 return false | 239 return false |
239 } | 240 } |
OLD | NEW |