Merge "Abandon other staged sessions when a rollback is staged." into sc-dev

This commit is contained in:
Oli Lan
2021-07-01 15:58:03 +00:00
committed by Android (Google) Code Review

View File

@@ -737,31 +737,31 @@ public class StagingManager {
continue;
}
// New session cannot have same package name as one of the active sessions
if (stagedSession.sessionContains(s -> s.getPackageName().equals(packageName))) {
if (isRollback) {
// If the new session is a rollback, then it gets priority. The existing
// session is failed to unblock rollback.
final StagedSession root = stagedSession;
if (!ensureActiveApexSessionIsAborted(root)) {
Slog.e(TAG, "Failed to abort apex session " + root.sessionId());
// Safe to ignore active apex session abort failure since session
// will be marked failed on next step and staging directory for session
// will be deleted.
}
root.setSessionFailed(
SessionInfo.STAGED_SESSION_CONFLICT,
"Session was blocking rollback session: " + session.sessionId());
Slog.i(TAG, "Session " + root.sessionId() + " is marked failed due to "
+ "blocking rollback session: " + session.sessionId());
} else {
throw new PackageManagerException(
SessionInfo.STAGED_SESSION_VERIFICATION_FAILED,
"Package: " + session.getPackageName() + " in session: "
+ session.sessionId()
+ " has been staged already by session: "
+ stagedSession.sessionId(), null);
if (isRollback && !isRollback(stagedSession)) {
// If the new session is a rollback, then it gets priority. The existing
// session is failed to reduce risk and avoid an SDK extension dependency
// violation.
final StagedSession root = stagedSession;
if (!ensureActiveApexSessionIsAborted(root)) {
Slog.e(TAG, "Failed to abort apex session " + root.sessionId());
// Safe to ignore active apex session abort failure since session
// will be marked failed on next step and staging directory for session
// will be deleted.
}
root.setSessionFailed(
SessionInfo.STAGED_SESSION_CONFLICT,
"Session was failed by rollback session: " + session.sessionId());
Slog.i(TAG, "Session " + root.sessionId() + " is marked failed due to "
+ "rollback session: " + session.sessionId());
} else if (stagedSession.sessionContains(
s -> s.getPackageName().equals(packageName))) {
// New session cannot have same package name as one of the active sessions
throw new PackageManagerException(
SessionInfo.STAGED_SESSION_VERIFICATION_FAILED,
"Package: " + session.getPackageName() + " in session: "
+ session.sessionId()
+ " has been staged already by session: "
+ stagedSession.sessionId(), null);
}
// Staging multiple root sessions is not allowed if device doesn't support