Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 516ac957 authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

Remove transport dir name from TransportClient

To be able to re-use the TransportClient infra for transport
registration, I need to remove transport dir name property from
TransportClient because it's not available before registration
itself. As a result callsites that used getTransportDirName()
from TransportClient will have to go through the
TransportManager for that. Bryan suggested that the
TransportClient wasn't the best place for the property before.

Ref: http://go/br-binding-on-demand
Bug: 17140907
Test: m -j RunFrameworksServicesTests
Change-Id: I3fa335faf97d63adfad1a929336073a70fc8bc02
parent fa51853a
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -1604,9 +1604,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,
@@ -1651,12 +1657,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;
    }
+55 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -370,7 +383,6 @@ public class TransportManager {
        return description;
    }


    @GuardedBy("mTransportLock")
    @Nullable
    private Map.Entry<ComponentName, TransportDescription> getRegisteredTransportEntryLocked(
@@ -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);
        }
    }

@@ -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}.
+6 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();

+3 −1
Original line number Diff line number Diff line
@@ -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();

+6 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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();
@@ -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