Merge "Check error status after installing each DSU partition"

This commit is contained in:
Yo Chiang
2020-09-02 04:02:43 +00:00
committed by Gerrit Code Review
4 changed files with 41 additions and 0 deletions

View File

@@ -154,6 +154,19 @@ public class DynamicSystemManager {
throw new RuntimeException(e.toString());
}
}
/**
* Complete the current partition installation.
*
* @return true if the partition installation completes without error.
*/
@RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM)
public boolean closePartition() {
try {
return mService.closePartition();
} catch (RemoteException e) {
throw new RuntimeException(e.toString());
}
}
/**
* Finish a previously started installation. Installations without a cooresponding
* finishInstallation() will be cleaned up during device boot.

View File

@@ -38,6 +38,13 @@ interface IDynamicSystemService
*/
boolean createPartition(@utf8InCpp String name, long size, boolean readOnly);
/**
* Complete the current partition installation.
*
* @return true if the partition installation completes without error.
*/
boolean closePartition();
/**
* Finish a previously started installation. Installations without
* a cooresponding finishInstallation() will be cleaned up during device boot.

View File

@@ -334,6 +334,11 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog
throw new IOException(
"Failed to start installation with requested size: " + mUserdataSize);
}
// Reset installation session and verify that installation completes successfully.
mInstallationSession = null;
if (!mDynSystem.closePartition()) {
throw new IOException("Failed to complete partition installation: userdata");
}
}
private void installImages()
@@ -503,6 +508,12 @@ class InstallationAsyncTask extends AsyncTask<String, InstallationAsyncTask.Prog
imageValidationThrowOrWarning(new KeyRevokedException(publicKey));
}
}
// Reset installation session and verify that installation completes successfully.
mInstallationSession = null;
if (!mDynSystem.closePartition()) {
throw new IOException("Failed to complete partition installation: " + partitionName);
}
}
private static String toHexString(byte[] bytes) {

View File

@@ -125,6 +125,16 @@ public class DynamicSystemService extends IDynamicSystemService.Stub {
return true;
}
@Override
public boolean closePartition() throws RemoteException {
IGsiService service = getGsiService();
if (service.closePartition() != 0) {
Slog.i(TAG, "Partition installation completes with error");
return false;
}
return true;
}
@Override
public boolean finishInstallation() throws RemoteException {
IGsiService service = getGsiService();