Implement staged directory clean up for staged install

Staged files should be deleted from /data/staging once installation
is complete, regardless of failure or success. If a session fails
pre-reboot verification, then it can be deleted before reboot.

Bug: 123624108
Test: manual testing
      - create two apex files; aosp signed and dev signed
      - flash device with internal master
      - aosp signed apex file will fail pre-reboot verification
      - check that files are deleted in /data/staging
      - repeat with multiple package
      - dev signed package passes pre-reboot verification
      - on reboot, files should be deleted from /data/staging

Change-Id: I44a6cc72de26ad0216942623edb6e279c628d58d
This commit is contained in:
Mohammad Samiul Islam
2019-02-07 14:05:21 +00:00
committed by Shafik Nassar
parent 3deb23fead
commit 5eacf09ea4

View File

@@ -1998,6 +1998,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
mStagedSessionErrorMessage = errorMessage;
Slog.d(TAG, "Marking session " + sessionId + " as failed: " + errorMessage);
}
cleanStageDir();
mCallback.onStagedSessionChanged(this);
}
@@ -2009,7 +2010,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
mStagedSessionFailed = false;
mStagedSessionErrorCode = SessionInfo.STAGED_SESSION_NO_ERROR;
mStagedSessionErrorMessage = "";
Slog.d(TAG, "Marking session " + sessionId + " as applied");
}
cleanStageDir();
mCallback.onStagedSessionChanged(this);
}
@@ -2064,6 +2067,19 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
}
private void cleanStageDir() {
if (isMultiPackage()) {
for (int childSessionId : getChildSessionIds()) {
mSessionProvider.getSession(childSessionId).cleanStageDir();
}
} else {
try {
mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath());
} catch (InstallerException ignored) {
}
}
}
void dump(IndentingPrintWriter pw) {
synchronized (mLock) {
dumpLocked(pw);