Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ae1ce4b authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Improve logging for failed scenario in staged install flow" into...

Merge "Improve logging for failed scenario in staged install flow" into rvc-dev am: 45019d2f am: dab38a2e am: 9de2f856

Change-Id: I59a3246aed0d6dae7f2f21304f35c274f96c9402
parents 66317dae 9de2f856
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -331,7 +331,8 @@ public class StagingManager {
    }

    // 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 @@ public class StagingManager {
            // 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 @@ public class StagingManager {

        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 @@ public class StagingManager {
            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) {