From b91a2e1450584e57f714ef6db3ac4e5c45ee35f0 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Tue, 8 Feb 2022 17:46:10 -0500 Subject: [PATCH] Increase backoff for 5xx errors in KbsMigrations. --- .../jobs/KbsEnclaveMigrationWorkerJob.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java index 927c73fa83..cb132c72ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/KbsEnclaveMigrationWorkerJob.java @@ -5,10 +5,13 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; +import org.thoughtcrime.securesms.jobmanager.impl.BackoffUtil; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.migrations.KbsEnclaveMigrationJob; import org.thoughtcrime.securesms.pin.PinState; +import org.thoughtcrime.securesms.util.FeatureFlags; +import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import java.io.IOException; @@ -71,6 +74,17 @@ public class KbsEnclaveMigrationWorkerJob extends BaseJob { e instanceof UnauthenticatedResponseException; } + @Override + public long getNextRunAttemptBackoff(int pastAttemptCount, @NonNull Exception exception) { + if (exception instanceof NonSuccessfulResponseCodeException) { + if (((NonSuccessfulResponseCodeException) exception).is5xx()) { + return BackoffUtil.exponentialBackoff(pastAttemptCount, FeatureFlags.getServerErrorMaxBackoff()); + } + } + + return super.getNextRunAttemptBackoff(pastAttemptCount, exception); + } + @Override public void onFailure() { throw new AssertionError("This job should never fail. " + getClass().getSimpleName());