From 90d49e1b0d14a56801b1fe140136c0aeaf51a314 Mon Sep 17 00:00:00 2001 From: Manfred Endres <2523575+Larusso@users.noreply.github.com> Date: Thu, 4 Mar 2021 20:30:31 +0100 Subject: [PATCH] Improve upload stability by retry upload for any server error (#37) Description =========== This is my latest attempt to make appcenter more stable. The developers still fight with a list off issues which results in random server errors. I will now add another exception to the retry worthy cases. I only do this for the `releaseID poll` call since this is the one we always see errors and I don't want to rewrite the whole plugin. If this will also not yield better stability I'm inclined to wrap the whole upload in a try catch and repeat each upload multiple times no matter the error. Changes ======= * ![IMPROVE] upload stability by retry upload for any server error --- .../gradle/appcenter/api/AppCenterReleaseUploader.groovy | 9 +++++++++ .../appcenter/error/AppCenterUploadException.groovy | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/main/groovy/wooga/gradle/appcenter/api/AppCenterReleaseUploader.groovy b/src/main/groovy/wooga/gradle/appcenter/api/AppCenterReleaseUploader.groovy index c75bee5..7620fe6 100644 --- a/src/main/groovy/wooga/gradle/appcenter/api/AppCenterReleaseUploader.groovy +++ b/src/main/groovy/wooga/gradle/appcenter/api/AppCenterReleaseUploader.groovy @@ -14,6 +14,7 @@ import org.apache.http.entity.ContentType import org.apache.http.entity.StringEntity import wooga.gradle.appcenter.api.AppCenterRest.AppCenterError import wooga.gradle.appcenter.error.AppCenterAppExtractionException +import wooga.gradle.appcenter.error.AppCenterAppUploadServerErrorException import wooga.gradle.appcenter.error.AppCenterMalwareDetectionException import wooga.gradle.appcenter.error.AppCenterUploadException @@ -152,6 +153,12 @@ class AppCenterReleaseUploader { return upload(binary) } throw e + } catch (AppCenterAppUploadServerErrorException e) { + if (retryCounter <= 3) { + retryCounter += 1 + return upload(binary) + } + throw e } Map release = getRelease(releaseId) @@ -253,6 +260,8 @@ class AppCenterReleaseUploader { break } break + case 500..600: + throw new AppCenterAppUploadServerErrorException("unable to poll release id of upload ${uploadId} ${owner}/${applicationIdentifier}: server error ${response.toString()}") default: onUnhandledResponse("Unable to poll for release id '${uploadId}'", response) } diff --git a/src/main/groovy/wooga/gradle/appcenter/error/AppCenterUploadException.groovy b/src/main/groovy/wooga/gradle/appcenter/error/AppCenterUploadException.groovy index 1ea8c30..ea7f057 100644 --- a/src/main/groovy/wooga/gradle/appcenter/error/AppCenterUploadException.groovy +++ b/src/main/groovy/wooga/gradle/appcenter/error/AppCenterUploadException.groovy @@ -8,7 +8,10 @@ class AppCenterUploadException extends Exception { @InheritConstructors class AppCenterAppExtractionException extends Exception { +} +@InheritConstructors +class AppCenterAppUploadServerErrorException extends Exception { } @InheritConstructors