diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index 2554433fb6598..c17aa4ecabbbc 100644 --- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java @@ -156,6 +156,7 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Queue; @@ -1084,19 +1085,31 @@ public class UserBackupManagerService { private void parseLeftoverJournals() { ArrayList journals = DataChangedJournal.listJournals(mJournalDir); + // TODO(b/162022005): Fix DataChangedJournal implementing equals() but not hashCode(). + journals.removeAll(Collections.singletonList(mJournal)); + if (!journals.isEmpty()) { + Slog.i(TAG, "Found " + journals.size() + " stale backup journal(s), scheduling."); + } + Set packageNames = new LinkedHashSet<>(); for (DataChangedJournal journal : journals) { - if (!journal.equals(mJournal)) { - try { - journal.forEach(packageName -> { - Slog.i(TAG, "Found stale backup journal, scheduling"); - if (MORE_DEBUG) Slog.i(TAG, " " + packageName); + try { + journal.forEach(packageName -> { + if (packageNames.add(packageName)) { dataChangedImpl(packageName); - }); - } catch (IOException e) { - Slog.e(TAG, "Can't read " + journal, e); - } + } + }); + } catch (IOException e) { + Slog.e(TAG, "Can't read " + journal, e); } } + if (!packageNames.isEmpty()) { + String msg = "Stale backup journals: Scheduled " + packageNames.size() + + " package(s) total"; + if (MORE_DEBUG) { + msg += ": " + packageNames; + } + Slog.i(TAG, msg); + } } /** Used for generating random salts or passwords. */