Add dumpsys for RollbackManager
Add a dump method to RollbackServiceManagerImpl that dumps the rollback
info of all rollbacks. The info includes:
* Rollback Id
* Rollback State
* Staged session Id (if any)
* Is rollback staged
* Packages
* Cause Packages (if any)
* Committed session Id (if committed)
Example of format:
868886202:
-state: committed
-timestamp: 2019-03-11T15:53:30.101Z
-stagedSessionId: 1452111490
-packages:
com.android.tests.rollback.testapex 2 -> 1
-causePackages:
-committedSessionId: 1263657628
Fixes: 128404022
Test: adb shell dumpsys rollback
Change-Id: I624bfe465731d8e29fe65cd9f2587e59e348997a
This commit is contained in:
@@ -23,9 +23,11 @@ import android.content.rollback.RollbackInfo;
|
||||
import java.io.File;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.text.ParseException;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
/**
|
||||
* Information about a rollback available for a set of atomically installed
|
||||
* packages.
|
||||
@@ -138,4 +140,27 @@ class RollbackData {
|
||||
public boolean isStaged() {
|
||||
return info.isStaged();
|
||||
}
|
||||
|
||||
static String rollbackStateToString(@RollbackState int state) {
|
||||
switch (state) {
|
||||
case RollbackData.ROLLBACK_STATE_ENABLING: return "enabling";
|
||||
case RollbackData.ROLLBACK_STATE_AVAILABLE: return "available";
|
||||
case RollbackData.ROLLBACK_STATE_COMMITTED: return "committed";
|
||||
}
|
||||
throw new AssertionError("Invalid rollback state: " + state);
|
||||
}
|
||||
|
||||
static @RollbackState int rollbackStateFromString(String state)
|
||||
throws ParseException {
|
||||
switch (state) {
|
||||
case "enabling": return RollbackData.ROLLBACK_STATE_ENABLING;
|
||||
case "available": return RollbackData.ROLLBACK_STATE_AVAILABLE;
|
||||
case "committed": return RollbackData.ROLLBACK_STATE_COMMITTED;
|
||||
}
|
||||
throw new ParseException("Invalid rollback state: " + state, 0);
|
||||
}
|
||||
|
||||
public String getStateAsString() {
|
||||
return rollbackStateToString(state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,11 +50,14 @@ import android.util.SparseLongArray;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.pm.Installer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.security.SecureRandom;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@@ -1268,4 +1271,39 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
+ rollbackData.info.getRollbackId(), ioe);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||
IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ");
|
||||
synchronized (mLock) {
|
||||
for (RollbackData data : mRollbacks) {
|
||||
RollbackInfo info = data.info;
|
||||
ipw.println(info.getRollbackId() + ":");
|
||||
ipw.increaseIndent();
|
||||
ipw.println("-state: " + data.getStateAsString());
|
||||
ipw.println("-timestamp: " + data.timestamp);
|
||||
if (data.stagedSessionId != -1) {
|
||||
ipw.println("-stagedSessionId: " + data.stagedSessionId);
|
||||
}
|
||||
ipw.println("-packages:");
|
||||
ipw.increaseIndent();
|
||||
for (PackageRollbackInfo pkg : info.getPackages()) {
|
||||
ipw.println(pkg.getPackageName()
|
||||
+ " " + pkg.getVersionRolledBackFrom().getLongVersionCode()
|
||||
+ " -> " + pkg.getVersionRolledBackTo().getLongVersionCode());
|
||||
}
|
||||
ipw.decreaseIndent();
|
||||
if (data.state == RollbackData.ROLLBACK_STATE_COMMITTED) {
|
||||
ipw.println("-causePackages:");
|
||||
ipw.increaseIndent();
|
||||
for (VersionedPackage cPkg : info.getCausePackages()) {
|
||||
ipw.println(cPkg.getPackageName() + " " + cPkg.getLongVersionCode());
|
||||
}
|
||||
ipw.decreaseIndent();
|
||||
ipw.println("-committedSessionId: " + info.getCommittedSessionId());
|
||||
}
|
||||
ipw.decreaseIndent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.android.server.rollback;
|
||||
|
||||
import static com.android.server.rollback.RollbackData.rollbackStateFromString;
|
||||
import static com.android.server.rollback.RollbackData.rollbackStateToString;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.pm.VersionedPackage;
|
||||
import android.content.rollback.PackageRollbackInfo;
|
||||
@@ -401,23 +404,4 @@ class RollbackStore {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
|
||||
private static String rollbackStateToString(@RollbackData.RollbackState int state) {
|
||||
switch (state) {
|
||||
case RollbackData.ROLLBACK_STATE_ENABLING: return "enabling";
|
||||
case RollbackData.ROLLBACK_STATE_AVAILABLE: return "available";
|
||||
case RollbackData.ROLLBACK_STATE_COMMITTED: return "committed";
|
||||
}
|
||||
throw new AssertionError("Invalid rollback state: " + state);
|
||||
}
|
||||
|
||||
private static @RollbackData.RollbackState int rollbackStateFromString(String state)
|
||||
throws ParseException {
|
||||
switch (state) {
|
||||
case "enabling": return RollbackData.ROLLBACK_STATE_ENABLING;
|
||||
case "available": return RollbackData.ROLLBACK_STATE_AVAILABLE;
|
||||
case "committed": return RollbackData.ROLLBACK_STATE_COMMITTED;
|
||||
}
|
||||
throw new ParseException("Invalid rollback state: " + state, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user