diff options
| author | 2020-09-07 16:29:53 +0800 | |
|---|---|---|
| committer | 2020-09-09 16:28:46 +0800 | |
| commit | ce3b19f00f7c0f887facd0a1b2ee9afd3ab7c405 (patch) | |
| tree | 070f06e5ceb4def216ba10ef9948381e4075694c | |
| parent | 1acf5d2fe79041f869a2fef5710b3becc3942c57 (diff) | |
Rewrite #restoreSession (2/n)
Since we can retrieve child sessions from a parent session, we can
start restoration immediately when a parent session is received by
restoreSession().
Also remove #isMultiPackageSessionComplete which is no longer needed.
Bug: 167946370
Test: atest StagedInstallTest StagedInstallInternalTest
Change-Id: I8f253e0ff710e52a8e930ce1fe67e22d82a00b81
| -rw-r--r-- | services/core/java/com/android/server/pm/StagingManager.java | 39 |
1 files changed, 3 insertions, 36 deletions
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 7ab880de15d1..e5e94482da12 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -1064,46 +1064,13 @@ public class StagingManager { || apexSessionInfo.isRevertFailed; } - @GuardedBy("mStagedSessions") - private boolean isMultiPackageSessionComplete(@NonNull PackageInstallerSession session) { - // This method assumes that the argument is either a parent session of a multi-package - // i.e. isMultiPackage() returns true, or that it is a child session, i.e. - // hasParentSessionId() returns true. - if (session.isMultiPackage()) { - // Parent session of a multi-package group. Check that we restored all the children. - for (int childSession : session.getChildSessionIds()) { - if (mStagedSessions.get(childSession) == null) { - return false; - } - } - return true; - } - if (session.hasParentSessionId()) { - PackageInstallerSession parent = mStagedSessions.get(session.getParentSessionId()); - if (parent == null) { - return false; - } - return isMultiPackageSessionComplete(parent); - } - Slog.wtf(TAG, "Attempting to restore an invalid multi-package session."); - return false; - } - void restoreSession(@NonNull PackageInstallerSession session, boolean isDeviceUpgrading) { PackageInstallerSession sessionToResume = session; synchronized (mStagedSessions) { mStagedSessions.append(session.sessionId, session); - // For multi-package sessions, we don't know in which order they will be restored. We - // need to wait until we have restored all the session in a group before restoring them. - if (session.isMultiPackage() || session.hasParentSessionId()) { - if (!isMultiPackageSessionComplete(session)) { - // Still haven't recovered all sessions of the group, return. - return; - } - // Group recovered, find the parent if necessary and resume the installation. - if (session.hasParentSessionId()) { - sessionToResume = mStagedSessions.get(session.getParentSessionId()); - } + if (session.hasParentSessionId()) { + // Only parent sessions can be restored + return; } } // The preconditions used during pre-reboot verification might have changed when device |