From debf27aea05f1a41a64c332676558495c0a88b9f Mon Sep 17 00:00:00 2001 From: Katherine Blizard <414924+kabliz@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:59:24 -0700 Subject: [PATCH] [APT-10467] Retry with Exponential Backoff Adds graceful network retries to internet connectivity errors. And attempts to retry `ParserException`, in the event that the download partially failed for content being loaded over the internet. --- .../playback/error/ArmadilloHttpErrorHandlingPolicy.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Armadillo/src/main/java/com/scribd/armadillo/playback/error/ArmadilloHttpErrorHandlingPolicy.kt b/Armadillo/src/main/java/com/scribd/armadillo/playback/error/ArmadilloHttpErrorHandlingPolicy.kt index 2eb4282..c23b51d 100644 --- a/Armadillo/src/main/java/com/scribd/armadillo/playback/error/ArmadilloHttpErrorHandlingPolicy.kt +++ b/Armadillo/src/main/java/com/scribd/armadillo/playback/error/ArmadilloHttpErrorHandlingPolicy.kt @@ -11,11 +11,11 @@ class ArmadilloHttpErrorHandlingPolicy : DefaultLoadErrorHandlingPolicy(DEFAULT_ override fun getRetryDelayMsFor(loadErrorInfo: LoadErrorHandlingPolicy.LoadErrorInfo): Long { return if (loadErrorInfo.exception is UnknownHostException || loadErrorInfo.exception is SocketTimeoutException) { //retry every 10 seconds for potential loss of internet -keep buffering - internet may later succeed. - if (loadErrorInfo.errorCount > 8) { - C.TIME_UNSET //stop retrying after a few minutes + if (loadErrorInfo.errorCount > 6) { + C.TIME_UNSET //stop retrying after around 10 minutes } else { //exponential backoff based on a 10 second interval - (1 shl (loadErrorInfo.errorCount - 1).coerceAtMost(8)) * 10 * 1000L + (1 shl (loadErrorInfo.errorCount - 1).coerceAtMost(6)) * 10 * 1000L } } else if (loadErrorInfo.exception is ParserException) { /* @@ -23,11 +23,11 @@ class ArmadilloHttpErrorHandlingPolicy : DefaultLoadErrorHandlingPolicy(DEFAULT_ so Exoplayer will never retry ParserExceptions. We care about content failing to checksum correctly over the internet, so we wish to retry these. */ - if (loadErrorInfo.errorCount > 4) { + if (loadErrorInfo.errorCount > 3) { C.TIME_UNSET //stop retrying, the content is likely malformed } else { //This is exponential backoff based on a 1 second interval - (1 shl (loadErrorInfo.errorCount - 1).coerceAtMost(4)) * 1000L + (1 shl (loadErrorInfo.errorCount - 1).coerceAtMost(3)) * 1000L } } else { super.getRetryDelayMsFor(loadErrorInfo)