Binding on-demand #4: PerformClearTask usage
Migeate the clear flow. Change-Id: Id268f772ae0f7a88b3e060c9597d777e0b73121a Ref: http://go/br-binding-on-demand Bug: 17140907 Test: adb shell bmgr wipe <transport> <package> and observed logs Test: gts-tradefed run commandAndExit gts-dev -m GtsBackupTestCases Test: gts-tradefed run commandAndExit gts-dev -m GtsBackupHostTestCases Test: cts-tradefed run commandAndExit cts-dev -m CtsBackupTestCases
This commit is contained in:
@@ -2389,19 +2389,24 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter
|
||||
if (MORE_DEBUG) Slog.v(TAG, "Found the app - running clear process");
|
||||
mBackupHandler.removeMessages(MSG_RETRY_CLEAR);
|
||||
synchronized (mQueueLock) {
|
||||
final IBackupTransport transport =
|
||||
mTransportManager.getTransportBinder(transportName);
|
||||
if (transport == null) {
|
||||
// transport is currently unavailable -- make sure to retry
|
||||
TransportClient transportClient =
|
||||
mTransportManager
|
||||
.getTransportClient(transportName, "BMS.clearBackupData()");
|
||||
if (transportClient == null) {
|
||||
// transport is currently unregistered -- make sure to retry
|
||||
Message msg = mBackupHandler.obtainMessage(MSG_RETRY_CLEAR,
|
||||
new ClearRetryParams(transportName, packageName));
|
||||
mBackupHandler.sendMessageDelayed(msg, TRANSPORT_RETRY_INTERVAL);
|
||||
return;
|
||||
}
|
||||
long oldId = Binder.clearCallingIdentity();
|
||||
OnTaskFinishedListener listener =
|
||||
caller ->
|
||||
mTransportManager.disposeOfTransportClient(transportClient, caller);
|
||||
mWakelock.acquire();
|
||||
Message msg = mBackupHandler.obtainMessage(MSG_RUN_CLEAR,
|
||||
new ClearParams(transport, info));
|
||||
Message msg = mBackupHandler.obtainMessage(
|
||||
MSG_RUN_CLEAR,
|
||||
new ClearParams(transportClient, info, listener));
|
||||
mBackupHandler.sendMessage(msg);
|
||||
Binder.restoreCallingIdentity(oldId);
|
||||
}
|
||||
|
||||
@@ -268,8 +268,13 @@ public class BackupHandler extends Handler {
|
||||
|
||||
case MSG_RUN_CLEAR: {
|
||||
ClearParams params = (ClearParams) msg.obj;
|
||||
(new PerformClearTask(backupManagerService, params.transport,
|
||||
params.packageInfo)).run();
|
||||
Runnable task =
|
||||
new PerformClearTask(
|
||||
backupManagerService,
|
||||
params.transportClient,
|
||||
params.packageInfo,
|
||||
params.listener);
|
||||
task.run();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,46 +23,54 @@ import android.util.Slog;
|
||||
|
||||
import com.android.internal.backup.IBackupTransport;
|
||||
import com.android.server.backup.RefactoredBackupManagerService;
|
||||
import com.android.server.backup.transport.TransportClient;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class PerformClearTask implements Runnable {
|
||||
|
||||
private RefactoredBackupManagerService backupManagerService;
|
||||
IBackupTransport mTransport;
|
||||
PackageInfo mPackage;
|
||||
private final RefactoredBackupManagerService mBackupManagerService;
|
||||
private final TransportClient mTransportClient;
|
||||
private final PackageInfo mPackage;
|
||||
private final OnTaskFinishedListener mListener;
|
||||
|
||||
PerformClearTask(RefactoredBackupManagerService backupManagerService,
|
||||
IBackupTransport transport, PackageInfo packageInfo) {
|
||||
this.backupManagerService = backupManagerService;
|
||||
mTransport = transport;
|
||||
TransportClient transportClient, PackageInfo packageInfo,
|
||||
OnTaskFinishedListener listener) {
|
||||
mBackupManagerService = backupManagerService;
|
||||
mTransportClient = transportClient;
|
||||
mPackage = packageInfo;
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
String callerLogString = "PerformClearTask.run()";
|
||||
IBackupTransport transport = null;
|
||||
try {
|
||||
// Clear the on-device backup state to ensure a full backup next time
|
||||
File stateDir = new File(backupManagerService.getBaseStateDir(),
|
||||
mTransport.transportDirName());
|
||||
File stateDir = new File(mBackupManagerService.getBaseStateDir(),
|
||||
mTransportClient.getTransportDirName());
|
||||
File stateFile = new File(stateDir, mPackage.packageName);
|
||||
stateFile.delete();
|
||||
|
||||
transport = mTransportClient.connectOrThrow(callerLogString);
|
||||
// Tell the transport to remove all the persistent storage for the app
|
||||
// TODO - need to handle failures
|
||||
mTransport.clearBackupData(mPackage);
|
||||
transport.clearBackupData(mPackage);
|
||||
} catch (Exception e) {
|
||||
Slog.e(TAG, "Transport threw clearing data for " + mPackage + ": " + e.getMessage());
|
||||
} finally {
|
||||
try {
|
||||
// TODO - need to handle failures
|
||||
mTransport.finishBackup();
|
||||
} catch (Exception e) {
|
||||
// Nothing we can do here, alas
|
||||
Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage());
|
||||
if (transport != null) {
|
||||
try {
|
||||
// TODO - need to handle failures
|
||||
transport.finishBackup();
|
||||
} catch (Exception e) {
|
||||
// Nothing we can do here, alas
|
||||
Slog.e(TAG, "Unable to mark clear operation finished: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
mListener.onFinished(callerLogString);
|
||||
// Last but not least, release the cpu
|
||||
backupManagerService.getWakelock().release();
|
||||
mBackupManagerService.getWakelock().release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,15 +18,20 @@ package com.android.server.backup.params;
|
||||
|
||||
import android.content.pm.PackageInfo;
|
||||
|
||||
import com.android.internal.backup.IBackupTransport;
|
||||
import com.android.server.backup.internal.OnTaskFinishedListener;
|
||||
import com.android.server.backup.transport.TransportClient;
|
||||
|
||||
public class ClearParams {
|
||||
|
||||
public IBackupTransport transport;
|
||||
public TransportClient transportClient;
|
||||
public PackageInfo packageInfo;
|
||||
public OnTaskFinishedListener listener;
|
||||
|
||||
public ClearParams(IBackupTransport _transport, PackageInfo _info) {
|
||||
transport = _transport;
|
||||
packageInfo = _info;
|
||||
public ClearParams(
|
||||
TransportClient transportClient,
|
||||
PackageInfo packageInfo,
|
||||
OnTaskFinishedListener listener) {
|
||||
this.transportClient = transportClient;
|
||||
this.packageInfo = packageInfo;
|
||||
this.listener = listener;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,11 @@
|
||||
package com.android.server.backup.params;
|
||||
|
||||
public class ClearRetryParams {
|
||||
|
||||
public String transportName;
|
||||
public String packageName;
|
||||
|
||||
public ClearRetryParams(String transport, String pkg) {
|
||||
transportName = transport;
|
||||
packageName = pkg;
|
||||
public ClearRetryParams(String transportName, String packageName) {
|
||||
this.transportName = transportName;
|
||||
this.packageName = packageName;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user