From c126e4fda1bda784ac0b16e34ef02dc1d66389f1 Mon Sep 17 00:00:00 2001 From: Sarp Misoglu Date: Fri, 7 Mar 2025 12:15:11 +0000 Subject: Log cancellation reason for full backups to BMM Currently it's not possible to know from these logs if the backup was cancelled due to timeout or the app crashing or due to backups being explicitly cancelled by an external caller. This CL fixes that issue. Flag: EXEMPT log only update Test: manual // PFTBT is notoriously impossible to write unit tests for. Bug: 399645990 Change-Id: Ia18fdec1d9547130926bf62666ac055e320fb0b6 --- cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java | 4 ++++ core/java/android/app/backup/BackupManagerMonitor.java | 9 +++++++++ .../server/backup/fullbackup/PerformFullTransportBackupTask.java | 9 +++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java index 696bc82a9ffc..aefa6b53c2f0 100644 --- a/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java +++ b/cmds/bmgr/src/com/android/commands/bmgr/Bmgr.java @@ -1138,6 +1138,10 @@ public class Bmgr { } out.append("]"); } + if (event.containsKey(BackupManagerMonitor.EXTRA_LOG_CANCELLATION_REASON)) { + out.append(" cancellationReason: "); + out.append(event.getInt(BackupManagerMonitor.EXTRA_LOG_CANCELLATION_REASON)); + } if (mVerbose) { Set remainingKeys = new ArraySet<>(event.keySet()); remainingKeys.remove(BackupManagerMonitor.EXTRA_LOG_EVENT_ID); diff --git a/core/java/android/app/backup/BackupManagerMonitor.java b/core/java/android/app/backup/BackupManagerMonitor.java index e741bc2bf608..578dc6743f91 100644 --- a/core/java/android/app/backup/BackupManagerMonitor.java +++ b/core/java/android/app/backup/BackupManagerMonitor.java @@ -164,6 +164,15 @@ public class BackupManagerMonitor { public static final String EXTRA_LOG_V_TO_U_ALLOWLIST = "android.app.backup.extra.V_TO_U_ALLOWLIST"; + /** + * An int indicating why a backup was cancelled. One of {@link + * com.android.server.backup.BackupRestoreTask.CancellationReason}. + * + * @hide + */ + public static final String EXTRA_LOG_CANCELLATION_REASON = + "android.app.backup.extra.CANCELLATION_REASON"; + // TODO complete this list with all log messages. And document properly. public static final int LOG_EVENT_ID_FULL_BACKUP_CANCEL = 4; public static final int LOG_EVENT_ID_ILLEGAL_KEY = 5; diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java index f677c9dbf4d0..8715e1dcd78e 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java +++ b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java @@ -973,13 +973,18 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba @Override public void handleCancel(@CancellationReason int cancellationReason) { - Slog.w(TAG, "Full backup cancel of " + mTarget.packageName); + Slog.w( + TAG, + "Cancelled backup: " + mTarget.packageName + " reason:" + cancellationReason); mBackupManagerMonitorEventSender.monitorEvent( BackupManagerMonitor.LOG_EVENT_ID_FULL_BACKUP_CANCEL, mTarget, BackupManagerMonitor.LOG_EVENT_CATEGORY_AGENT, - /* extras= */ null); + BackupManagerMonitorEventSender.putMonitoringExtra( + /* extras= */ null, + BackupManagerMonitor.EXTRA_LOG_CANCELLATION_REASON, + cancellationReason)); mIsCancelled = true; // Cancel tasks spun off by this task. mUserBackupManagerService.handleCancel(mEphemeralToken, cancellationReason); -- cgit v1.2.3-59-g8ed1b