Include NewRollbacks in result of getAvailableRollbacks.

am: dc4a36105b

Change-Id: I6d45d8a2c408e4d8def25895846d6b7c3bf0de29
This commit is contained in:
Oli Lan
2019-11-25 05:35:35 -08:00
committed by android-build-merger
2 changed files with 21 additions and 25 deletions

View File

@@ -74,7 +74,10 @@ public final class RollbackManager {
}
/**
* Returns a list of all currently available rollbacks.
* Returns a list of all currently available rollbacks. This includes ones for very recently
* installed packages (even if onFinished has not yet been called). As a result, packages that
* very recently failed to install may also be included, but those rollbacks will fail with
* 'rollback not available'.
*
* @throws SecurityException if the caller does not have appropriate permissions.
*/

View File

@@ -271,33 +271,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
}, filter, null, getHandler());
}
/**
* This method posts a blocking call to the handler thread, so it should not be called from
* that same thread.
* @throws {@link IllegalStateException} if called from {@link #mHandlerThread}
*/
@Override
public ParceledListSlice getAvailableRollbacks() {
enforceManageRollbacks("getAvailableRollbacks");
if (Thread.currentThread().equals(mHandlerThread)) {
Slog.wtf(TAG, "Calling getAvailableRollbacks from mHandlerThread "
+ "causes a deadlock");
throw new IllegalStateException("Cannot call RollbackManager#getAvailableRollbacks "
+ "from the handler thread!");
}
// Wait for the handler thread to get the list of available rollbacks
// to get the most up-to-date results. This is intended to reduce test
// flakiness when checking available rollbacks immediately after
// installing a package with rollback enabled.
CountDownLatch latch = new CountDownLatch(1);
getHandler().post(() -> latch.countDown());
try {
latch.await();
} catch (InterruptedException ie) {
throw new IllegalStateException("RollbackManagerHandlerThread interrupted");
}
synchronized (mLock) {
List<RollbackInfo> rollbacks = new ArrayList<>();
for (int i = 0; i < mRollbacks.size(); ++i) {
@@ -306,6 +282,15 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
rollbacks.add(rollback.info);
}
}
// Also return new rollbacks for which the PackageRollbackInfo is complete.
for (NewRollback newRollback : mNewRollbacks) {
if (newRollback.rollback.info.getPackages().size()
== newRollback.packageSessionIds.length
&& !newRollback.isCancelled) {
rollbacks.add(newRollback.rollback.info);
}
}
return new ParceledListSlice<>(rollbacks);
}
}
@@ -562,6 +547,14 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
}
}
}
for (NewRollback newRollback : mNewRollbacks) {
for (PackageRollbackInfo info : newRollback.rollback.info.getPackages()) {
if (info.getPackageName().equals(packageName)) {
newRollback.isCancelled = true;
break;
}
}
}
}
}