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

Commit e5a6e444 authored by Martijn Coenen's avatar Martijn Coenen
Browse files

Start a filesystem checkpoint when committing staged install.

When submitting a staged session for installation, start a filesystem
checkpoint as well. This is a no-op on devices that don't support
filesystem checkpointing.

Bug: 126740531
Test: builds, manually inspect checkpoint state on subsequent boots
Change-Id: I7f73ece143926654628417d0c2384c3d0c1ef754
parent f04aca4f
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -42,11 +42,13 @@ import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.storage.IStorageManager;
import android.util.Slog;
import android.util.SparseArray;
import android.util.apk.ApkSignatureVerifier;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageHelper;
import com.android.internal.os.BackgroundThread;

import java.io.File;
@@ -252,6 +254,21 @@ public class StagingManager {
            }
        }

        // Make sure we start a filesystem checkpoint on the next boot.
        try {
            IStorageManager storageManager = PackageHelper.getStorageManager();
            if (storageManager.supportsCheckpoint()) {
                storageManager.startCheckpoint(1 /* numRetries */);
            }
        } catch (RemoteException e) {
            // While StorageManager lives in the same process, the native implementation
            // it calls through lives in 'vold'; so, this call can fail if 'vold' isn't
            // reachable.
            // Since we can live without filesystem checkpointing, just warn in this case
            // and continue.
            Slog.w(TAG, "Could not start filesystem checkpoint.");
        }

        session.setStagedSessionReady();
        if (sessionContainsApex(session)
                && !mApexManager.markStagedSessionReady(session.sessionId)) {