Add jitter to backup scheduling.

This commit is contained in:
Nicholas
2023-05-09 10:38:54 -04:00
committed by Cody Henthorne
parent 77751c1d28
commit e46564cb7e
5 changed files with 77 additions and 10 deletions

View File

@@ -12,7 +12,6 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.jobmanager.JobManager;
import org.thoughtcrime.securesms.jobs.RefreshAttributesJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.stickers.BlessedPacks;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
@@ -128,9 +127,10 @@ public class ApplicationMigrations {
static final int REBUILD_MESSAGE_FTS_INDEX_4 = 83;
static final int INDEX_DATABASE_MIGRATION = 84;
static final int ACCOUNT_CONSISTENCY_CHECK = 85;
static final int BACKUP_JITTER = 86;
}
public static final int CURRENT_VERSION = 85;
public static final int CURRENT_VERSION = 86;
/**
* This *must* be called after the {@link JobManager} has been instantiated, but *before* the call
@@ -572,6 +572,10 @@ public class ApplicationMigrations {
jobs.put(Version.ACCOUNT_CONSISTENCY_CHECK, new AccountConsistencyMigrationJob());
}
if (lastSeenVersion < Version.BACKUP_JITTER) {
jobs.put(Version.BACKUP_JITTER, new BackupJitterMigrationJob());
}
return jobs;
}

View File

@@ -0,0 +1,42 @@
/*
* Copyright 2023 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.migrations
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.keyvalue.SettingsValues
import org.thoughtcrime.securesms.keyvalue.SignalStore
import java.util.Random
internal class BackupJitterMigrationJob(parameters: Parameters = Parameters.Builder().build()) : MigrationJob(parameters) {
companion object {
const val KEY = "BackupJitterMigrationJob"
val TAG = Log.tag(BackupJitterMigrationJob::class.java)
}
override fun getFactoryKey(): String = KEY
override fun isUiBlocking(): Boolean = false
override fun performMigration() {
val hour = SignalStore.settings().backupHour
val minute = SignalStore.settings().backupMinute
if (hour == SettingsValues.BACKUP_DEFAULT_HOUR && minute == SettingsValues.BACKUP_DEFAULT_MINUTE) {
val rand = Random()
val newHour = rand.nextInt(3) + 1 // between 1AM - 3AM
val newMinute = rand.nextInt(12) * 5 // 5 minute intervals up to +55 minutes
SignalStore.settings().setBackupSchedule(newHour, newMinute)
}
}
override fun shouldRetry(e: Exception): Boolean = false
class Factory : Job.Factory<BackupJitterMigrationJob> {
override fun create(parameters: Parameters, serializedData: ByteArray?): BackupJitterMigrationJob {
return BackupJitterMigrationJob(parameters)
}
}
}