diff options
author | Ruslan Tkhakokhov <rthakohov@google.com> | 2021-03-18 12:28:47 +0000 |
---|---|---|
committer | Ruslan Tkhakokhov <rthakohov@google.com> | 2021-03-18 13:45:05 +0000 |
commit | 5c3913d9c1e51e8043c131891da43ae280955aeb (patch) | |
tree | d5e04e3e72b3f43559291a10477b6605b4388233 | |
parent | ef9671de172ad6356b05f248c071bf79dacee34e (diff) |
Determine restore operation type through RestoreSet
Determining the operation type (e.g. cloud backup or device transfer)
through transport flags doesn't work during restore. A cloud transport
can still be responsible for restore of D2D data. Instead, determine the
operation type for each restore set individually.
Bug: 182986784
Test: atest FullBackupRulesHostSideTest
Change-Id: I8109b99a712e6a60a15164416751d45e632264d6
-rw-r--r-- | packages/LocalTransport/src/com/android/localtransport/LocalTransport.java | 6 | ||||
-rw-r--r-- | services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java b/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java index 63edc776b3cb..4344e9401fc9 100644 --- a/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java +++ b/packages/LocalTransport/src/com/android/localtransport/LocalTransport.java @@ -66,6 +66,8 @@ public class LocalTransport extends BackupTransport { private static final String INCREMENTAL_DIR = "_delta"; private static final String FULL_DATA_DIR = "_full"; + private static final String DEVICE_NAME_FOR_D2D_RESTORE_SET = "D2D"; + private static final String DEFAULT_DEVICE_NAME_FOR_RESTORE_SET = "flash"; // The currently-active restore set always has the same (nonzero!) token private static final long CURRENT_SET_TOKEN = 1; @@ -603,8 +605,10 @@ public class LocalTransport extends BackupTransport { existing[num++] = CURRENT_SET_TOKEN; RestoreSet[] available = new RestoreSet[num]; + String deviceName = mParameters.isDeviceTransfer() ? DEVICE_NAME_FOR_D2D_RESTORE_SET + : DEFAULT_DEVICE_NAME_FOR_RESTORE_SET; for (int i = 0; i < available.length; i++) { - available[i] = new RestoreSet("Local disk image", "flash", existing[i]); + available[i] = new RestoreSet("Local disk image", deviceName, existing[i]); } return available; } diff --git a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java index 602dc24541b2..d0a88813fa5e 100644 --- a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java +++ b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java @@ -16,6 +16,8 @@ package com.android.server.backup.restore; +import static android.app.backup.BackupManager.OperationType; + import static com.android.server.backup.BackupManagerService.DEBUG; import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_SESSION_TIMEOUT; @@ -24,6 +26,7 @@ import static com.android.server.backup.internal.BackupHandler.MSG_RUN_RESTORE; import android.annotation.NonNull; import android.annotation.Nullable; +import android.app.backup.BackupManager; import android.app.backup.IBackupManagerMonitor; import android.app.backup.IRestoreObserver; import android.app.backup.IRestoreSession; @@ -51,6 +54,7 @@ import java.util.function.BiFunction; */ public class ActiveRestoreSession extends IRestoreSession.Stub { private static final String TAG = "RestoreSession"; + private static final String DEVICE_NAME_FOR_D2D_SET = "D2D"; private final TransportManager mTransportManager; private final String mTransportName; @@ -174,6 +178,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { for (int i = 0; i < mRestoreSets.length; i++) { if (token == mRestoreSets[i].token) { final long oldId = Binder.clearCallingIdentity(); + RestoreSet restoreSet = mRestoreSets[i]; try { return sendRestoreToHandlerLocked( (transportClient, listener) -> @@ -183,7 +188,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { monitor, token, listener, - mBackupEligibilityRules), + getBackupEligibilityRules(restoreSet)), "RestoreSession.restoreAll()"); } finally { Binder.restoreCallingIdentity(oldId); @@ -266,6 +271,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { for (int i = 0; i < mRestoreSets.length; i++) { if (token == mRestoreSets[i].token) { final long oldId = Binder.clearCallingIdentity(); + RestoreSet restoreSet = mRestoreSets[i]; try { return sendRestoreToHandlerLocked( (transportClient, listener) -> @@ -277,7 +283,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { packages, /* isSystemRestore */ packages.length > 1, listener, - mBackupEligibilityRules), + getBackupEligibilityRules(restoreSet)), "RestoreSession.restorePackages(" + packages.length + " packages)"); } finally { Binder.restoreCallingIdentity(oldId); @@ -290,6 +296,14 @@ public class ActiveRestoreSession extends IRestoreSession.Stub { return -1; } + private BackupEligibilityRules getBackupEligibilityRules(RestoreSet restoreSet) { + // TODO(b/182986784): Remove device name comparison once a designated field for operation + // type is added to RestoreSet object. + int operationType = DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device) + ? OperationType.MIGRATION : OperationType.BACKUP; + return mBackupManagerService.getEligibilityRulesForOperation(operationType); + } + public synchronized int restorePackage(String packageName, IRestoreObserver observer, IBackupManagerMonitor monitor) { if (DEBUG) { |