From 2865eb7b2170d0690b748ee79e630a838b9139cd Mon Sep 17 00:00:00 2001 From: Sarp Misoglu Date: Thu, 11 May 2023 19:27:23 +0100 Subject: [PATCH] Retrieve BackupAgent logs after onRestoreFinished completes execution This fixes a race condition that was introduced in ag/20312251. The logs were requested right after doRestoreFinished was called. But because that method is async, this resulted in a timeout while waiting to retrieve logs if the BackupAgent took longer than 500ms to execute onRestoreFinished-- which WallpaperBackupAgent will almost always do (it sets the restored wallpapers in that method). Bug: 282013010 Test: this class is not unit testable. Tested manually by adding debug logs and doing a restore. Observed that the wallpaper restore took longer than 500ms and there was no timeout. The logs were successfully retrieved after the restore was finished. Change-Id: I697e1279b9e366da15a6e31a9730e91a8b3d0d0b --- .../server/backup/restore/PerformUnifiedRestoreTask.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index 77990af509796..8cbb5dc03b9ec 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -900,9 +900,6 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { mAgent.doRestoreFinished(mEphemeralOpToken, backupManagerService.getBackupManagerBinder()); - // Ask the agent for logs after doRestoreFinished() to allow it to finalize its logs. - BackupManagerMonitorUtils.monitorAgentLoggingResults(mMonitor, mCurrentPackage, mAgent); - // If we get this far, the callback or timeout will schedule the // next restore state, so we're done } catch (Exception e) { @@ -1323,6 +1320,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { EventLog.writeEvent(EventLogTags.RESTORE_PACKAGE, mCurrentPackage.packageName, size); + // Ask the agent for logs after doRestoreFinished() has completed executing to allow + // it to finalize its logs. + BackupManagerMonitorUtils.monitorAgentLoggingResults(mMonitor, mCurrentPackage, + mAgent); + // Just go back to running the restore queue keyValueAgentCleanup();