Delete rollbacks immediately when any of child sessions failed (2/n)
Currently rollbacks for abandoned sessions will be deleted after reboot.
This change deletes rollbacks immediately/proactively when a session is
abandoned to be more memory and disk efficient.
Bug: 134652027
Test: adb install TestAppAv1.apk
adb install --enable-rollback --staged TestAppAv2.apk
dumpsys rollback
adb shell pm install-abandon <stagedSessionId from dumpsys rollback>
dumpsys rollback, confirm rollback is no longer listed
Change-Id: I75005b2fd5b9f6035f4817b386e9e54f2b4243e6
This commit is contained in:
@@ -780,6 +780,33 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
return enableRollbackForPackageSession(newRollback.rollback, packageSession);
|
||||
}
|
||||
|
||||
private void removeRollbackForPackageSessionId(int sessionId) {
|
||||
if (LOCAL_LOGV) {
|
||||
Slog.v(TAG, "removeRollbackForPackageSessionId=" + sessionId);
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
NewRollback newRollback = getNewRollbackForPackageSessionLocked(sessionId);
|
||||
if (newRollback != null) {
|
||||
Slog.w(TAG, "Delete new rollback id=" + newRollback.rollback.info.getRollbackId()
|
||||
+ " for session id=" + sessionId);
|
||||
mNewRollbacks.remove(newRollback);
|
||||
newRollback.rollback.delete(mAppDataRollbackHelper);
|
||||
}
|
||||
Iterator<Rollback> iter = mRollbacks.iterator();
|
||||
while (iter.hasNext()) {
|
||||
Rollback rollback = iter.next();
|
||||
if (rollback.getStagedSessionId() == sessionId) {
|
||||
Slog.w(TAG, "Delete rollback id=" + rollback.info.getRollbackId()
|
||||
+ " for session id=" + sessionId);
|
||||
iter.remove();
|
||||
rollback.delete(mAppDataRollbackHelper);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do code and userdata backups to enable rollback of the given session.
|
||||
* In case of multiPackage sessions, <code>session</code> should be one of
|
||||
@@ -1110,7 +1137,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// TODO: delete rollbacks for this failed session
|
||||
removeRollbackForPackageSessionId(sessionId);
|
||||
}
|
||||
|
||||
// Clear the queue so it will never be leaked to next tests.
|
||||
|
||||
Reference in New Issue
Block a user