diff options
Diffstat (limited to 'drive/sync_download.go')
| -rw-r--r-- | drive/sync_download.go | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drive/sync_download.go b/drive/sync_download.go index f18cb18..10a8d18 100644 --- a/drive/sync_download.go +++ b/drive/sync_download.go @@ -137,7 +137,7 @@ func (self *Drive) downloadMissingFiles(files *syncFiles, args DownloadSyncArgs) continue } - err = self.downloadRemoteFile(rf.file.Id, localPath, args) + err = self.downloadRemoteFile(rf.file.Id, localPath, args, 0) if err != nil { return err } @@ -166,7 +166,7 @@ func (self *Drive) downloadChangedFiles(files *syncFiles, args DownloadSyncArgs) continue } - err = self.downloadRemoteFile(cf.remote.file.Id, localPath, args) + err = self.downloadRemoteFile(cf.remote.file.Id, localPath, args, 0) if err != nil { return err } @@ -175,10 +175,16 @@ func (self *Drive) downloadChangedFiles(files *syncFiles, args DownloadSyncArgs) return nil } -func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs) error { +func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs, try int) error { res, err := self.service.Files.Get(id).Download() if err != nil { - return fmt.Errorf("Failed to download file: %s", err) + if isBackendError(err) && try < MaxBackendErrorRetries { + exponentialBackoffSleep(try) + try++ + self.downloadRemoteFile(id, fpath, args, try) + } else { + return fmt.Errorf("Failed to download file: %s", err) + } } // Close body on function exit @@ -203,7 +209,11 @@ func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs) e // Save file to disk _, err = io.Copy(outFile, srcReader) - if err != nil { + if err != nil && try < MaxBackendErrorRetries { + exponentialBackoffSleep(try) + try++ + self.downloadRemoteFile(id, fpath, args, try) + } else { return fmt.Errorf("Download was interrupted: %s", err) } |
