Merge "Improve logging for failed scenario in staged install flow" into rvc-dev
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 7dd2e55..83fe556 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -331,7 +331,8 @@
}
// Reverts apex sessions and user data (if checkpoint is supported). Also reboots the device.
- private void abortCheckpoint() {
+ private void abortCheckpoint(String errorMsg) {
+ Slog.e(TAG, "Aborting checkpoint: " + errorMsg);
try {
if (supportsCheckpoint() && needsCheckpoint()) {
mApexManager.revertActiveSessions();
@@ -504,6 +505,8 @@
// mode. If not, we fail all sessions.
if (supportsCheckpoint() && !needsCheckpoint()) {
// TODO(b/146343545): Persist failure reason across checkpoint reboot
+ Slog.d(TAG, "Reverting back to safe state. Marking " + session.sessionId
+ + " as failed.");
session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_UNKNOWN,
"Reverting back to safe state");
return;
@@ -524,26 +527,29 @@
if (hasApex) {
if (apexSessionInfo == null) {
+ String errorMsg = "apexd did not know anything about a staged session supposed to"
+ + " be activated";
session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED,
- "apexd did not know anything about a staged session supposed to be"
- + "activated");
- abortCheckpoint();
+ errorMsg);
+ abortCheckpoint(errorMsg);
return;
}
if (isApexSessionFailed(apexSessionInfo)) {
+ String errorMsg = "APEX activation failed. Check logcat messages from apexd for "
+ + "more information.";
session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED,
- "APEX activation failed. Check logcat messages from apexd for "
- + "more information.");
- abortCheckpoint();
+ errorMsg);
+ abortCheckpoint(errorMsg);
return;
}
if (!apexSessionInfo.isActivated && !apexSessionInfo.isSuccess) {
// Apexd did not apply the session for some unknown reason. There is no guarantee
// that apexd will install it next time. Safer to proactively mark as failed.
+ String errorMsg = "Staged session " + session.sessionId + "at boot didn't "
+ + "activate nor fail. Marking it as failed anyway.";
session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED,
- "Staged session " + session.sessionId + "at boot didn't "
- + "activate nor fail. Marking it as failed anyway.");
- abortCheckpoint();
+ errorMsg);
+ abortCheckpoint(errorMsg);
return;
}
snapshotAndRestoreForApexSession(session);
@@ -556,7 +562,7 @@
installApksInSession(session);
} catch (PackageManagerException e) {
session.setStagedSessionFailed(e.error, e.getMessage());
- abortCheckpoint();
+ abortCheckpoint(e.getMessage());
// If checkpoint is not supported, we have to handle failure for one staged session.
if (!hasApex) {