From 290fbbb9ee7c436b488f91c92ce9f059c05a975a Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 20 Jun 2022 15:30:50 -0400 Subject: [PATCH] Update backoff logic of ClearFallbackKbsEnclaveJob. --- .../jobs/ClearFallbackKbsEnclaveJob.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java index 7e8e8b825..645c208a7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ClearFallbackKbsEnclaveJob.java @@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.pin.KbsEnclaves; +import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import java.io.IOException; @@ -80,12 +81,30 @@ public class ClearFallbackKbsEnclaveJob extends BaseJob { @Override public boolean onShouldRetry(@NonNull Exception e) { + if (e instanceof NonSuccessfulResponseCodeException) { + switch (((NonSuccessfulResponseCodeException) e).getCode()) { + case 404: + return getRunAttempt() < 3; + case 508: + return false; + } + } + return true; } + @Override + public long getNextRunAttemptBackoff(int pastAttemptCount, @NonNull Exception e) { + if (e instanceof NonSuccessfulResponseCodeException && ((NonSuccessfulResponseCodeException) e).getCode() == 404) { + return TimeUnit.DAYS.toMillis(1); + } else { + return super.getNextRunAttemptBackoff(pastAttemptCount, e); + } + } + @Override public void onFailure() { - throw new AssertionError("This job should never fail. " + getClass().getSimpleName()); + Log.w(TAG, "Job failed! It is likely that the old enclave is offline."); } public static class Factory implements Job.Factory {