diff options
| author | 2019-02-27 11:18:45 +0000 | |
|---|---|---|
| committer | 2019-02-27 14:41:41 +0000 | |
| commit | f16ebd08113fd6060a6420be6a436688bc797211 (patch) | |
| tree | 1a1887948ec08935600b6247725452a1a6546789 | |
| parent | 479a296d6d3e0058e78791f1d272376b9a1032e0 (diff) | |
Miscellaneous cleanup in RollbackStore.
* Factor out code for reading and writing RollbackInfo from json.
* Make methods static where appropriate.
* Minor other cleanup.
In preparation for having RollbackData reuse RollbackInfo so we don't
end up with duplicate copies of PackageRollbackInfo for a rollback so we
can fix the bug when doing userdata restore for staged installs.
Test: atest RollbackTest
Bug: 124044231
Change-Id: I4f579393c1ffe8d519560ed223f61b002d730c50
| -rw-r--r-- | services/core/java/com/android/server/rollback/RollbackStore.java | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java index 99e102a2edb4..23defadf5421 100644 --- a/services/core/java/com/android/server/rollback/RollbackStore.java +++ b/services/core/java/com/android/server/rollback/RollbackStore.java @@ -183,6 +183,25 @@ class RollbackStore { return ceSnapshotInodes; } + private static JSONObject rollbackInfoToJson(RollbackInfo rollback) throws JSONException { + JSONObject json = new JSONObject(); + json.put("rollbackId", rollback.getRollbackId()); + json.put("packages", toJson(rollback.getPackages())); + json.put("isStaged", rollback.isStaged()); + json.put("causePackages", versionedPackagesToJson(rollback.getCausePackages())); + json.put("committedSessionId", rollback.getCommittedSessionId()); + return json; + } + + private static RollbackInfo rollbackInfoFromJson(JSONObject json) throws JSONException { + return new RollbackInfo( + json.getInt("rollbackId"), + packageRollbackInfosFromJson(json.getJSONArray("packages")), + json.getBoolean("isStaged"), + versionedPackagesFromJson(json.getJSONArray("causePackages")), + json.getInt("committedSessionId")); + } + /** * Reads the list of recently executed rollbacks from persistent storage. */ @@ -197,17 +216,7 @@ class RollbackStore { JSONObject object = new JSONObject(jsonString); JSONArray array = object.getJSONArray("recentlyExecuted"); for (int i = 0; i < array.length(); ++i) { - JSONObject element = array.getJSONObject(i); - int rollbackId = element.getInt("rollbackId"); - List<PackageRollbackInfo> packages = packageRollbackInfosFromJson( - element.getJSONArray("packages")); - boolean isStaged = element.getBoolean("isStaged"); - List<VersionedPackage> causePackages = versionedPackagesFromJson( - element.getJSONArray("causePackages")); - int committedSessionId = element.getInt("committedSessionId"); - RollbackInfo rollback = new RollbackInfo(rollbackId, packages, isStaged, - causePackages, committedSessionId); - recentlyExecutedRollbacks.add(rollback); + recentlyExecutedRollbacks.add(rollbackInfoFromJson(array.getJSONObject(i))); } } catch (IOException | JSONException e) { // TODO: What to do here? Surely we shouldn't just forget about @@ -303,13 +312,7 @@ class RollbackStore { for (int i = 0; i < recentlyExecutedRollbacks.size(); ++i) { RollbackInfo rollback = recentlyExecutedRollbacks.get(i); - JSONObject element = new JSONObject(); - element.put("rollbackId", rollback.getRollbackId()); - element.put("packages", toJson(rollback.getPackages())); - element.put("isStaged", rollback.isStaged()); - element.put("causePackages", versionedPackagesToJson(rollback.getCausePackages())); - element.put("committedSessionId", rollback.getCommittedSessionId()); - array.put(element); + array.put(rollbackInfoToJson(rollback)); } PrintWriter pw = new PrintWriter(mRecentlyExecutedRollbacksFile); @@ -325,17 +328,17 @@ class RollbackStore { * Reads the metadata for a rollback from the given directory. * @throws IOException in case of error reading the data. */ - private RollbackData loadRollbackData(File backupDir) throws IOException { + private static RollbackData loadRollbackData(File backupDir) throws IOException { try { File rollbackJsonFile = new File(backupDir, "rollback.json"); JSONObject dataJson = new JSONObject( IoUtils.readFileAsString(rollbackJsonFile.getAbsolutePath())); - int rollbackId = dataJson.getInt("rollbackId"); - int stagedSessionId = dataJson.getInt("stagedSessionId"); - boolean isAvailable = dataJson.getBoolean("isAvailable"); - RollbackData data = new RollbackData(rollbackId, backupDir, - stagedSessionId, isAvailable); + RollbackData data = new RollbackData( + dataJson.getInt("rollbackId"), + backupDir, + dataJson.getInt("stagedSessionId"), + dataJson.getBoolean("isAvailable")); data.packages.addAll(packageRollbackInfosFromJson(dataJson.getJSONArray("packages"))); data.timestamp = Instant.parse(dataJson.getString("timestamp")); data.apkSessionId = dataJson.getInt("apkSessionId"); @@ -346,20 +349,20 @@ class RollbackStore { } } - private JSONObject toJson(VersionedPackage pkg) throws JSONException { + private static JSONObject toJson(VersionedPackage pkg) throws JSONException { JSONObject json = new JSONObject(); json.put("packageName", pkg.getPackageName()); json.put("longVersionCode", pkg.getLongVersionCode()); return json; } - private VersionedPackage versionedPackageFromJson(JSONObject json) throws JSONException { + private static VersionedPackage versionedPackageFromJson(JSONObject json) throws JSONException { String packageName = json.getString("packageName"); long longVersionCode = json.getLong("longVersionCode"); return new VersionedPackage(packageName, longVersionCode); } - private JSONObject toJson(PackageRollbackInfo info) throws JSONException { + private static JSONObject toJson(PackageRollbackInfo info) throws JSONException { JSONObject json = new JSONObject(); json.put("versionRolledBackFrom", toJson(info.getVersionRolledBackFrom())); json.put("versionRolledBackTo", toJson(info.getVersionRolledBackTo())); @@ -378,7 +381,8 @@ class RollbackStore { return json; } - private PackageRollbackInfo packageRollbackInfoFromJson(JSONObject json) throws JSONException { + private static PackageRollbackInfo packageRollbackInfoFromJson(JSONObject json) + throws JSONException { VersionedPackage versionRolledBackFrom = versionedPackageFromJson( json.getJSONObject("versionRolledBackFrom")); VersionedPackage versionRolledBackTo = versionedPackageFromJson( @@ -399,7 +403,7 @@ class RollbackStore { pendingBackups, pendingRestores, isApex, installedUsers, ceSnapshotInodes); } - private JSONArray versionedPackagesToJson(List<VersionedPackage> packages) + private static JSONArray versionedPackagesToJson(List<VersionedPackage> packages) throws JSONException { JSONArray json = new JSONArray(); for (VersionedPackage pkg : packages) { @@ -408,7 +412,8 @@ class RollbackStore { return json; } - private List<VersionedPackage> versionedPackagesFromJson(JSONArray json) throws JSONException { + private static List<VersionedPackage> versionedPackagesFromJson(JSONArray json) + throws JSONException { List<VersionedPackage> packages = new ArrayList<>(); for (int i = 0; i < json.length(); ++i) { packages.add(versionedPackageFromJson(json.getJSONObject(i))); @@ -416,7 +421,7 @@ class RollbackStore { return packages; } - private JSONArray toJson(List<PackageRollbackInfo> infos) throws JSONException { + private static JSONArray toJson(List<PackageRollbackInfo> infos) throws JSONException { JSONArray json = new JSONArray(); for (PackageRollbackInfo info : infos) { json.put(toJson(info)); @@ -424,7 +429,7 @@ class RollbackStore { return json; } - private List<PackageRollbackInfo> packageRollbackInfosFromJson(JSONArray json) + private static List<PackageRollbackInfo> packageRollbackInfosFromJson(JSONArray json) throws JSONException { List<PackageRollbackInfo> infos = new ArrayList<>(); for (int i = 0; i < json.length(); ++i) { |