acd: Fix panic on token expiry - fixes #1117

This commit is contained in:
Nick Craig-Wood 2017-02-11 17:49:59 +00:00
parent 50e190ff54
commit 40c02989f1
2 changed files with 16 additions and 12 deletions

View File

@ -88,16 +88,15 @@ func init() {
// Fs represents a remote acd server // Fs represents a remote acd server
type Fs struct { type Fs struct {
name string // name of this remote name string // name of this remote
features *fs.Features // optional features features *fs.Features // optional features
c *acd.Client // the connection to the acd server c *acd.Client // the connection to the acd server
noAuthClient *http.Client // unauthenticated http client noAuthClient *http.Client // unauthenticated http client
root string // the path we are working on root string // the path we are working on
dirCache *dircache.DirCache // Map of directory path to directory id dirCache *dircache.DirCache // Map of directory path to directory id
pacer *pacer.Pacer // pacer for API calls pacer *pacer.Pacer // pacer for API calls
ts *oauthutil.TokenSource // token source for oauth trueRootID string // ID of true root directory
trueRootID string // ID of true root directory tokenRenewer *oauthutil.Renew // renew the token on expiry
tokenRenewer *oauthutil.Renew // renew the token on expiry
} }
// Object describes a acd object // Object describes a acd object
@ -157,8 +156,8 @@ var retryErrorCodes = []int{
func (f *Fs) shouldRetry(resp *http.Response, err error) (bool, error) { func (f *Fs) shouldRetry(resp *http.Response, err error) (bool, error) {
if resp != nil { if resp != nil {
if resp.StatusCode == 401 { if resp.StatusCode == 401 {
f.ts.Invalidate() f.tokenRenewer.Invalidate()
fs.Log(f, "401 error received - invalidating token") fs.Debug(f, "401 error received - invalidating token")
return true, err return true, err
} }
// Work around receiving this error sporadically on authentication // Work around receiving this error sporadically on authentication

View File

@ -62,3 +62,8 @@ func (r *Renew) Start() {
func (r *Renew) Stop() { func (r *Renew) Stop() {
atomic.AddInt32(&r.uploads, -1) atomic.AddInt32(&r.uploads, -1)
} }
// Invalidate invalidates the token source
func (r *Renew) Invalidate() {
r.ts.Invalidate()
}