diff --git a/src/org/thoughtcrime/securesms/database/JobDatabase.java b/src/org/thoughtcrime/securesms/database/JobDatabase.java index 2f1d5bf43..88eded398 100644 --- a/src/org/thoughtcrime/securesms/database/JobDatabase.java +++ b/src/org/thoughtcrime/securesms/database/JobDatabase.java @@ -126,11 +126,12 @@ public class JobDatabase extends Database { databaseHelper.getWritableDatabase().update(Jobs.TABLE_NAME, contentValues, query, args); } - public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime) { + public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) { ContentValues contentValues = new ContentValues(); contentValues.put(Jobs.IS_RUNNING, isRunning ? 1 : 0); contentValues.put(Jobs.RUN_ATTEMPT, runAttempt); contentValues.put(Jobs.NEXT_RUN_ATTEMPT_TIME, nextRunAttemptTime); + contentValues.put(Jobs.SERIALIZED_DATA, serializedData); String query = Jobs.JOB_SPEC_ID + " = ?"; String[] args = new String[]{ id }; diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobController.java b/src/org/thoughtcrime/securesms/jobmanager/JobController.java index 9c8e4e0f6..db9447178 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/src/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -98,10 +98,11 @@ class JobController { @WorkerThread synchronized void onRetry(@NonNull Job job) { - int nextRunAttempt = job.getRunAttempt() + 1; - long nextRunAttemptTime = calculateNextRunAttemptTime(System.currentTimeMillis(), nextRunAttempt, job.getParameters().getMaxBackoff()); + int nextRunAttempt = job.getRunAttempt() + 1; + long nextRunAttemptTime = calculateNextRunAttemptTime(System.currentTimeMillis(), nextRunAttempt, job.getParameters().getMaxBackoff()); + String serializedData = dataSerializer.serialize(job.serialize()); - jobStorage.updateJobAfterRetry(job.getId(), false, nextRunAttempt, nextRunAttemptTime); + jobStorage.updateJobAfterRetry(job.getId(), false, nextRunAttempt, nextRunAttemptTime, serializedData); jobTracker.onStateChange(job.getId(), JobTracker.JobState.PENDING); List constraints = Stream.of(jobStorage.getConstraintSpecs(job.getId())) diff --git a/src/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java b/src/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java index 3f05abff9..64ba6e6f5 100644 --- a/src/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java +++ b/src/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java @@ -30,7 +30,7 @@ public interface JobStorage { void updateJobRunningState(@NonNull String id, boolean isRunning); @WorkerThread - void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime); + void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData); @WorkerThread void updateAllJobsToBePending(); diff --git a/src/org/thoughtcrime/securesms/jobs/FastJobStorage.java b/src/org/thoughtcrime/securesms/jobs/FastJobStorage.java index 80360d264..b9d33a55f 100644 --- a/src/org/thoughtcrime/securesms/jobs/FastJobStorage.java +++ b/src/org/thoughtcrime/securesms/jobs/FastJobStorage.java @@ -163,8 +163,8 @@ public class FastJobStorage implements JobStorage { } @Override - public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime) { - jobDatabase.updateJobAfterRetry(id, isRunning, runAttempt, nextRunAttemptTime); + public synchronized void updateJobAfterRetry(@NonNull String id, boolean isRunning, int runAttempt, long nextRunAttemptTime, @NonNull String serializedData) { + jobDatabase.updateJobAfterRetry(id, isRunning, runAttempt, nextRunAttemptTime, serializedData); ListIterator iter = jobs.listIterator(); @@ -181,7 +181,7 @@ public class FastJobStorage implements JobStorage { existing.getMaxBackoff(), existing.getLifespan(), existing.getMaxInstances(), - existing.getSerializedData(), + serializedData, isRunning); iter.set(updated); } diff --git a/test/unitTest/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java b/test/unitTest/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java index 7cf4b9ee0..08fff4000 100644 --- a/test/unitTest/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java +++ b/test/unitTest/java/org/thoughtcrime/securesms/jobs/FastJobStorageTest.java @@ -165,9 +165,9 @@ public class FastJobStorageTest { JobDatabase database = noopDatabase(); FastJobStorage subject = new FastJobStorage(database); - subject.updateJobAfterRetry("1", true, 1, 10); + subject.updateJobAfterRetry("1", true, 1, 10, "a"); - verify(database).updateJobAfterRetry("1", true, 1, 10); + verify(database).updateJobAfterRetry("1", true, 1, 10, "a"); } @Test @@ -179,7 +179,7 @@ public class FastJobStorageTest { FastJobStorage subject = new FastJobStorage(fixedDataDatabase(Collections.singletonList(fullSpec))); subject.init(); - subject.updateJobAfterRetry("1", false, 1, 10); + subject.updateJobAfterRetry("1", false, 1, 10, "a"); JobSpec job = subject.getJobSpec("1"); @@ -187,6 +187,7 @@ public class FastJobStorageTest { assertFalse(job.isRunning()); assertEquals(1, job.getRunAttempt()); assertEquals(10, job.getNextRunAttemptTime()); + assertEquals("a", job.getSerializedData()); } @Test