Loading services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +11 −6 Original line number Diff line number Diff line Loading @@ -1606,9 +1606,15 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter return BackupManager.ERROR_BACKUP_NOT_ALLOWED; } TransportClient transportClient = mTransportManager.getCurrentTransportClient("BMS.requestBackup()"); if (transportClient == null) { final TransportClient transportClient; final String transportDirName; try { transportDirName = mTransportManager.getTransportDirName( mTransportManager.getCurrentTransportName()); transportClient = mTransportManager.getCurrentTransportClientOrThrow("BMS.requestBackup()"); } catch (TransportNotRegisteredException e) { BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED); monitor = BackupManagerMonitorUtils.monitorEvent(monitor, BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL, Loading Loading @@ -1653,12 +1659,11 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter + " k/v backups"); } String dirName = transportClient.getTransportDirName(); boolean nonIncrementalBackup = (flags & BackupManager.FLAG_NON_INCREMENTAL_BACKUP) != 0; Message msg = mBackupHandler.obtainMessage(MSG_REQUEST_BACKUP); msg.obj = new BackupParams(transportClient, dirName, kvBackupList, fullBackupList, observer, monitor, listener, true, nonIncrementalBackup); msg.obj = new BackupParams(transportClient, transportDirName, kvBackupList, fullBackupList, observer, monitor, listener, true, nonIncrementalBackup); mBackupHandler.sendMessage(msg); return BackupManager.SUCCESS; } Loading services/backup/java/com/android/server/backup/TransportManager.java +55 −7 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.server.EventLogTags; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.transport.TransportClientManager; import com.android.server.backup.transport.TransportConnectionListener; import com.android.server.backup.transport.TransportNotAvailableException; import com.android.server.backup.transport.TransportNotRegisteredException; import java.util.ArrayList; Loading Loading @@ -301,6 +302,18 @@ public class TransportManager { } } /** * Retrieve the transport dir name of {@code transportComponent}. * @throws TransportNotRegisteredException if the transport is not registered. */ public String getTransportDirName(ComponentName transportComponent) throws TransportNotRegisteredException { synchronized (mTransportLock) { return getRegisteredTransportDescriptionOrThrowLocked(transportComponent) .transportDirName; } } /** * Execute {@code transportConsumer} for each registered transport passing the transport name. * This is called with an internal lock held, ensuring that the transport will remain registered Loading Loading @@ -370,7 +383,6 @@ public class TransportManager { return description; } @GuardedBy("mTransportLock") @Nullable private Map.Entry<ComponentName, TransportDescription> getRegisteredTransportEntryLocked( Loading @@ -385,17 +397,35 @@ public class TransportManager { return null; } @GuardedBy("mTransportLock") private TransportDescription getRegisteredTransportDescriptionOrThrowLocked( ComponentName transportComponent) throws TransportNotRegisteredException { TransportDescription description = mRegisteredTransportsDescriptionMap.get(transportComponent); if (description == null) { throw new TransportNotRegisteredException(transportComponent); } return description; } @Nullable public TransportClient getTransportClient(String transportName, String caller) { try { return getTransportClientOrThrow(transportName, caller); } catch (TransportNotRegisteredException e) { Slog.w(TAG, "Transport " + transportName + " not registered"); return null; } } public TransportClient getTransportClientOrThrow(String transportName, String caller) throws TransportNotRegisteredException { synchronized (mTransportLock) { ComponentName component = getRegisteredTransportComponentLocked(transportName); if (component == null) { Slog.w(TAG, "Transport " + transportName + " not registered"); return null; throw new TransportNotRegisteredException(transportName); } TransportDescription description = mRegisteredTransportsDescriptionMap.get(component); return mTransportClientManager.getTransportClient( component, description.transportDirName, caller); return mTransportClientManager.getTransportClient(component, caller); } } Loading @@ -415,8 +445,26 @@ public class TransportManager { */ @Nullable public TransportClient getCurrentTransportClient(String caller) { synchronized (mTransportLock) { return getTransportClient(mCurrentTransportName, caller); } } /** * Returns a {@link TransportClient} for the current transport or throws if not registered. * * @param caller A {@link String} identifying the caller for logging/debugging purposes. Check * {@link TransportClient#connectAsync(TransportConnectionListener, String)} for more * details. * @return A {@link TransportClient}. * @throws TransportNotRegisteredException if the transport is not registered. */ public TransportClient getCurrentTransportClientOrThrow(String caller) throws TransportNotRegisteredException { synchronized (mTransportLock) { return getTransportClientOrThrow(mCurrentTransportName, caller); } } /** * Disposes of the {@link TransportClient}. Loading services/backup/java/com/android/server/backup/internal/PerformClearTask.java +6 −2 Original line number Diff line number Diff line Loading @@ -23,12 +23,14 @@ import android.util.Slog; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.transport.TransportClient; import java.io.File; public class PerformClearTask implements Runnable { private final RefactoredBackupManagerService mBackupManagerService; private final TransportManager mTransportManager; private final TransportClient mTransportClient; private final PackageInfo mPackage; private final OnTaskFinishedListener mListener; Loading @@ -37,6 +39,7 @@ public class PerformClearTask implements Runnable { TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { mBackupManagerService = backupManagerService; mTransportManager = backupManagerService.getTransportManager(); mTransportClient = transportClient; mPackage = packageInfo; mListener = listener; Loading @@ -47,8 +50,9 @@ public class PerformClearTask implements Runnable { IBackupTransport transport = null; try { // Clear the on-device backup state to ensure a full backup next time File stateDir = new File(mBackupManagerService.getBaseStateDir(), mTransportClient.getTransportDirName()); String transportDirName = mTransportManager.getTransportDirName(mTransportClient.getTransportComponent()); File stateDir = new File(mBackupManagerService.getBaseStateDir(), transportDirName); File stateFile = new File(stateDir, mPackage.packageName); stateFile.delete(); Loading services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java +3 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,9 @@ public class PerformInitializeTask implements Runnable { transportClientsToDisposeOf.add(transportClient); Slog.i(TAG, "Initializing (wiping) backup transport storage: " + transportName); String transportDirName = transportClient.getTransportDirName(); String transportDirName = mTransportManager.getTransportDirName( transportClient.getTransportComponent()); EventLog.writeEvent(EventLogTags.BACKUP_START, transportDirName); long startRealtime = SystemClock.elapsedRealtime(); Loading services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +6 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.server.backup.BackupUtils; import com.android.server.backup.PackageManagerBackupAgent; import com.android.server.backup.PackageManagerBackupAgent.Metadata; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.utils.AppBackupUtils; Loading @@ -78,6 +79,7 @@ import java.util.List; public class PerformUnifiedRestoreTask implements BackupRestoreTask { private RefactoredBackupManagerService backupManagerService; private final TransportManager mTransportManager; // Transport client we're working with to do the restore private final TransportClient mTransportClient; Loading Loading @@ -164,6 +166,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { int pmToken, boolean isFullSystemRestore, String[] filterSet, OnTaskFinishedListener listener) { this.backupManagerService = backupManagerService; mTransportManager = backupManagerService.getTransportManager(); mEphemeralOpToken = backupManagerService.generateRandomIntegerToken(); mState = UnifiedRestoreState.INITIAL; mStartRealtime = SystemClock.elapsedRealtime(); Loading Loading @@ -349,8 +352,9 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } try { String transportDir = mTransportClient.getTransportDirName(); mStateDir = new File(backupManagerService.getBaseStateDir(), transportDir); String transportDirName = mTransportManager.getTransportDirName(mTransportClient.getTransportComponent()); mStateDir = new File(backupManagerService.getBaseStateDir(), transportDirName); // Fetch the current metadata from the dataset first PackageInfo pmPackage = new PackageInfo(); Loading Loading
services/backup/java/com/android/server/backup/RefactoredBackupManagerService.java +11 −6 Original line number Diff line number Diff line Loading @@ -1606,9 +1606,15 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter return BackupManager.ERROR_BACKUP_NOT_ALLOWED; } TransportClient transportClient = mTransportManager.getCurrentTransportClient("BMS.requestBackup()"); if (transportClient == null) { final TransportClient transportClient; final String transportDirName; try { transportDirName = mTransportManager.getTransportDirName( mTransportManager.getCurrentTransportName()); transportClient = mTransportManager.getCurrentTransportClientOrThrow("BMS.requestBackup()"); } catch (TransportNotRegisteredException e) { BackupObserverUtils.sendBackupFinished(observer, BackupManager.ERROR_TRANSPORT_ABORTED); monitor = BackupManagerMonitorUtils.monitorEvent(monitor, BackupManagerMonitor.LOG_EVENT_ID_TRANSPORT_IS_NULL, Loading Loading @@ -1653,12 +1659,11 @@ public class RefactoredBackupManagerService implements BackupManagerServiceInter + " k/v backups"); } String dirName = transportClient.getTransportDirName(); boolean nonIncrementalBackup = (flags & BackupManager.FLAG_NON_INCREMENTAL_BACKUP) != 0; Message msg = mBackupHandler.obtainMessage(MSG_REQUEST_BACKUP); msg.obj = new BackupParams(transportClient, dirName, kvBackupList, fullBackupList, observer, monitor, listener, true, nonIncrementalBackup); msg.obj = new BackupParams(transportClient, transportDirName, kvBackupList, fullBackupList, observer, monitor, listener, true, nonIncrementalBackup); mBackupHandler.sendMessage(msg); return BackupManager.SUCCESS; } Loading
services/backup/java/com/android/server/backup/TransportManager.java +55 −7 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.server.EventLogTags; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.transport.TransportClientManager; import com.android.server.backup.transport.TransportConnectionListener; import com.android.server.backup.transport.TransportNotAvailableException; import com.android.server.backup.transport.TransportNotRegisteredException; import java.util.ArrayList; Loading Loading @@ -301,6 +302,18 @@ public class TransportManager { } } /** * Retrieve the transport dir name of {@code transportComponent}. * @throws TransportNotRegisteredException if the transport is not registered. */ public String getTransportDirName(ComponentName transportComponent) throws TransportNotRegisteredException { synchronized (mTransportLock) { return getRegisteredTransportDescriptionOrThrowLocked(transportComponent) .transportDirName; } } /** * Execute {@code transportConsumer} for each registered transport passing the transport name. * This is called with an internal lock held, ensuring that the transport will remain registered Loading Loading @@ -370,7 +383,6 @@ public class TransportManager { return description; } @GuardedBy("mTransportLock") @Nullable private Map.Entry<ComponentName, TransportDescription> getRegisteredTransportEntryLocked( Loading @@ -385,17 +397,35 @@ public class TransportManager { return null; } @GuardedBy("mTransportLock") private TransportDescription getRegisteredTransportDescriptionOrThrowLocked( ComponentName transportComponent) throws TransportNotRegisteredException { TransportDescription description = mRegisteredTransportsDescriptionMap.get(transportComponent); if (description == null) { throw new TransportNotRegisteredException(transportComponent); } return description; } @Nullable public TransportClient getTransportClient(String transportName, String caller) { try { return getTransportClientOrThrow(transportName, caller); } catch (TransportNotRegisteredException e) { Slog.w(TAG, "Transport " + transportName + " not registered"); return null; } } public TransportClient getTransportClientOrThrow(String transportName, String caller) throws TransportNotRegisteredException { synchronized (mTransportLock) { ComponentName component = getRegisteredTransportComponentLocked(transportName); if (component == null) { Slog.w(TAG, "Transport " + transportName + " not registered"); return null; throw new TransportNotRegisteredException(transportName); } TransportDescription description = mRegisteredTransportsDescriptionMap.get(component); return mTransportClientManager.getTransportClient( component, description.transportDirName, caller); return mTransportClientManager.getTransportClient(component, caller); } } Loading @@ -415,8 +445,26 @@ public class TransportManager { */ @Nullable public TransportClient getCurrentTransportClient(String caller) { synchronized (mTransportLock) { return getTransportClient(mCurrentTransportName, caller); } } /** * Returns a {@link TransportClient} for the current transport or throws if not registered. * * @param caller A {@link String} identifying the caller for logging/debugging purposes. Check * {@link TransportClient#connectAsync(TransportConnectionListener, String)} for more * details. * @return A {@link TransportClient}. * @throws TransportNotRegisteredException if the transport is not registered. */ public TransportClient getCurrentTransportClientOrThrow(String caller) throws TransportNotRegisteredException { synchronized (mTransportLock) { return getTransportClientOrThrow(mCurrentTransportName, caller); } } /** * Disposes of the {@link TransportClient}. Loading
services/backup/java/com/android/server/backup/internal/PerformClearTask.java +6 −2 Original line number Diff line number Diff line Loading @@ -23,12 +23,14 @@ import android.util.Slog; import com.android.internal.backup.IBackupTransport; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.transport.TransportClient; import java.io.File; public class PerformClearTask implements Runnable { private final RefactoredBackupManagerService mBackupManagerService; private final TransportManager mTransportManager; private final TransportClient mTransportClient; private final PackageInfo mPackage; private final OnTaskFinishedListener mListener; Loading @@ -37,6 +39,7 @@ public class PerformClearTask implements Runnable { TransportClient transportClient, PackageInfo packageInfo, OnTaskFinishedListener listener) { mBackupManagerService = backupManagerService; mTransportManager = backupManagerService.getTransportManager(); mTransportClient = transportClient; mPackage = packageInfo; mListener = listener; Loading @@ -47,8 +50,9 @@ public class PerformClearTask implements Runnable { IBackupTransport transport = null; try { // Clear the on-device backup state to ensure a full backup next time File stateDir = new File(mBackupManagerService.getBaseStateDir(), mTransportClient.getTransportDirName()); String transportDirName = mTransportManager.getTransportDirName(mTransportClient.getTransportComponent()); File stateDir = new File(mBackupManagerService.getBaseStateDir(), transportDirName); File stateFile = new File(stateDir, mPackage.packageName); stateFile.delete(); Loading
services/backup/java/com/android/server/backup/internal/PerformInitializeTask.java +3 −1 Original line number Diff line number Diff line Loading @@ -122,7 +122,9 @@ public class PerformInitializeTask implements Runnable { transportClientsToDisposeOf.add(transportClient); Slog.i(TAG, "Initializing (wiping) backup transport storage: " + transportName); String transportDirName = transportClient.getTransportDirName(); String transportDirName = mTransportManager.getTransportDirName( transportClient.getTransportComponent()); EventLog.writeEvent(EventLogTags.BACKUP_START, transportDirName); long startRealtime = SystemClock.elapsedRealtime(); Loading
services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +6 −2 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import com.android.server.backup.BackupUtils; import com.android.server.backup.PackageManagerBackupAgent; import com.android.server.backup.PackageManagerBackupAgent.Metadata; import com.android.server.backup.RefactoredBackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.transport.TransportClient; import com.android.server.backup.utils.AppBackupUtils; Loading @@ -78,6 +79,7 @@ import java.util.List; public class PerformUnifiedRestoreTask implements BackupRestoreTask { private RefactoredBackupManagerService backupManagerService; private final TransportManager mTransportManager; // Transport client we're working with to do the restore private final TransportClient mTransportClient; Loading Loading @@ -164,6 +166,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { int pmToken, boolean isFullSystemRestore, String[] filterSet, OnTaskFinishedListener listener) { this.backupManagerService = backupManagerService; mTransportManager = backupManagerService.getTransportManager(); mEphemeralOpToken = backupManagerService.generateRandomIntegerToken(); mState = UnifiedRestoreState.INITIAL; mStartRealtime = SystemClock.elapsedRealtime(); Loading Loading @@ -349,8 +352,9 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } try { String transportDir = mTransportClient.getTransportDirName(); mStateDir = new File(backupManagerService.getBaseStateDir(), transportDir); String transportDirName = mTransportManager.getTransportDirName(mTransportClient.getTransportComponent()); mStateDir = new File(backupManagerService.getBaseStateDir(), transportDirName); // Fetch the current metadata from the dataset first PackageInfo pmPackage = new PackageInfo(); Loading