aboutsummaryrefslogtreecommitdiffstats
path: root/drive/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'drive/errors.go')
-rw-r--r--drive/errors.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/drive/errors.go b/drive/errors.go
index e7631f7..f70f0f0 100644
--- a/drive/errors.go
+++ b/drive/errors.go
@@ -1,11 +1,16 @@
package drive
import (
+ "golang.org/x/net/context"
"google.golang.org/api/googleapi"
"time"
)
-const MaxBackendErrorRetries = 5
+const MaxErrorRetries = 5
+
+func isBackendOrRateLimitError(err error) bool {
+ return isBackendError(err) || isRateLimitError(err)
+}
func isBackendError(err error) bool {
if err == nil {
@@ -16,6 +21,19 @@ func isBackendError(err error) bool {
return ok && ae.Code >= 500 && ae.Code <= 599
}
+func isRateLimitError(err error) bool {
+ if err == nil {
+ return false
+ }
+
+ ae, ok := err.(*googleapi.Error)
+ return ok && ae.Code == 403
+}
+
+func isTimeoutError(err error) bool {
+ return err == context.Canceled
+}
+
func exponentialBackoffSleep(try int) {
seconds := pow(2, try)
time.Sleep(time.Duration(seconds) * time.Second)