diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index ff21a733223c0..8c914391d677c 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.Objects; @@ -1154,24 +1155,32 @@ 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, addUserIdToLogMessage(mUserId, + "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, - addUserIdToLogMessage( - mUserId, "Found stale backup journal, scheduling")); - if (MORE_DEBUG) { - Slog.i(TAG, addUserIdToLogMessage(mUserId, " " + packageName)); - } + try { + journal.forEach(packageName -> { + if (packageNames.add(packageName)) { dataChangedImpl(packageName); - }); - } catch (IOException e) { - Slog.e(TAG, addUserIdToLogMessage(mUserId, "Can't read " + journal), e); - } + } + }); + } catch (IOException e) { + Slog.e(TAG, addUserIdToLogMessage(mUserId, "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, addUserIdToLogMessage(mUserId, msg)); + } } public Set getExcludedRestoreKeys(String packageName) {