From 1155cc0d3fd6939784c4587d4192b76e2505d2d7 Mon Sep 17 00:00:00 2001 From: Ninh Pham Date: Mon, 6 Mar 2023 22:02:36 +0700 Subject: [PATCH] drive: Make --drive-stop-on-upload-limit to respond to storageQuotaExceeded Before this change, if a "--drive-stop-on-upload-limit" was set, rclone would not stop the upload if a "storageQuotaExceeded" error occurred. This fix now checks for the "storageQuotaExceeded" error and "--drive-stop-on-upload-limit", and fails fast. --- backend/drive/drive.go | 2 +- backend/drive/drive_internal_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/drive/drive.go b/backend/drive/drive.go index e6cac2b1c..96214d503 100644 --- a/backend/drive/drive.go +++ b/backend/drive/drive.go @@ -761,7 +761,7 @@ func (f *Fs) shouldRetry(ctx context.Context, err error) (bool, error) { } else if f.opt.StopOnDownloadLimit && reason == "downloadQuotaExceeded" { fs.Errorf(f, "Received download limit error: %v", err) return false, fserrors.FatalError(err) - } else if f.opt.StopOnUploadLimit && reason == "quotaExceeded" { + } else if f.opt.StopOnUploadLimit && (reason == "quotaExceeded" || reason == "storageQuotaExceeded") { fs.Errorf(f, "Received upload limit error: %v", err) return false, fserrors.FatalError(err) } else if f.opt.StopOnUploadLimit && reason == "teamDriveFileLimitExceeded" { diff --git a/backend/drive/drive_internal_test.go b/backend/drive/drive_internal_test.go index 58bdb1313..c2e6da05b 100644 --- a/backend/drive/drive_internal_test.go +++ b/backend/drive/drive_internal_test.go @@ -243,6 +243,15 @@ func (f *Fs) InternalTestShouldRetry(t *testing.T) { quotaExceededRetry, quotaExceededError := f.shouldRetry(ctx, &generic403) assert.False(t, quotaExceededRetry) assert.Equal(t, quotaExceededError, expectedQuotaError) + + sqEItem := googleapi.ErrorItem{ + Reason: "storageQuotaExceeded", + } + generic403.Errors[0] = sqEItem + expectedStorageQuotaError := fserrors.FatalError(&generic403) + storageQuotaExceededRetry, storageQuotaExceededError := f.shouldRetry(ctx, &generic403) + assert.False(t, storageQuotaExceededRetry) + assert.Equal(t, storageQuotaExceededError, expectedStorageQuotaError) } func (f *Fs) InternalTestDocumentImport(t *testing.T) {