diff options
| author | 2009-11-02 14:10:33 -0800 | |
|---|---|---|
| committer | 2009-11-02 14:10:33 -0800 | |
| commit | 96c178498c7c65388955cb8d2f8f11b0fac76c8d (patch) | |
| tree | af25458ac7a0fdbf1f662b703eab5d37d30551cd | |
| parent | 384b4b4efc6166268b9ac009cb375e035ceb46c0 (diff) | |
| parent | cc1d35e2e5e0c2370361294a64ff0e580856b9d2 (diff) | |
am cc1d35e2: am afd81beb: Merge change Icbb3aa0a into eclair
Merge commit 'cc1d35e2e5e0c2370361294a64ff0e580856b9d2' into eclair-mr2-plus-aosp
* commit 'cc1d35e2e5e0c2370361294a64ff0e580856b9d2':
Use setRepeating() rather than setInexactRepeating() for backup scheduling,
| -rw-r--r-- | services/java/com/android/server/BackupManagerService.java | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index 82a7c1c6d90e..754e6e578b53 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -76,6 +76,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Random; class BackupManagerService extends IBackupManager.Stub { private static final String TAG = "BackupManagerService"; @@ -85,6 +86,9 @@ class BackupManagerService extends IBackupManager.Stub { // trigger an immediate pass. private static final long BACKUP_INTERVAL = AlarmManager.INTERVAL_HOUR; + // Random variation in backup scheduling time to avoid server load spikes + private static final int FUZZ_MILLIS = 5 * 60 * 1000; + // The amount of time between the initial provisioning of the device and // the first backup pass. private static final long FIRST_BACKUP_INTERVAL = 12 * AlarmManager.INTERVAL_HOUR; @@ -1949,9 +1953,15 @@ class BackupManagerService extends IBackupManager.Stub { } private void startBackupAlarmsLocked(long delayBeforeFirstBackup) { - long when = System.currentTimeMillis() + delayBeforeFirstBackup; - mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, when, - BACKUP_INTERVAL, mRunBackupIntent); + // We used to use setInexactRepeating(), but that may be linked to + // backups running at :00 more often than not, creating load spikes. + // Schedule at an exact time for now, and also add a bit of "fuzz". + + Random random = new Random(); + long when = System.currentTimeMillis() + delayBeforeFirstBackup + + random.nextInt(FUZZ_MILLIS); + mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when, + BACKUP_INTERVAL + random.nextInt(FUZZ_MILLIS), mRunBackupIntent); mNextBackupPass = when; } |