Loading services/core/java/com/android/server/rollback/RollbackStore.java +33 −10 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.pm.VersionedPackage; import android.content.rollback.PackageRollbackInfo; import android.content.rollback.PackageRollbackInfo.RestoreInfo; import android.content.rollback.RollbackInfo; import android.os.SystemProperties; import android.os.UserHandle; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -227,6 +228,15 @@ class RollbackStore { packageSessionIds, extensionVersions); } private static boolean isLinkPossible(File oldFile, File newFile) { try { return Os.stat(oldFile.getAbsolutePath()).st_dev == Os.stat(newFile.getAbsolutePath()).st_dev; } catch (ErrnoException ignore) { return false; } } /** * Creates a backup copy of an apk or apex for a package. * For packages containing splits, this method should be called for each Loading @@ -239,6 +249,8 @@ class RollbackStore { targetDir.mkdirs(); File targetFile = new File(targetDir, sourceFile.getName()); boolean fallbackToCopy = !isLinkPossible(sourceFile, targetFile); if (!fallbackToCopy) { try { // Create a hard link to avoid copy // TODO(b/168562373) Loading @@ -248,7 +260,18 @@ class RollbackStore { // longer the case when compressed apex rolls out. We have to handle this case in // order not to fall back to copy. Os.link(sourceFile.getAbsolutePath(), targetFile.getAbsolutePath()); } catch (ErrnoException ignore) { } catch (ErrnoException e) { boolean isRollbackTest = SystemProperties.getBoolean("persist.rollback.is_test", false); if (isRollbackTest) { throw new IOException(e); } else { fallbackToCopy = true; } } } if (fallbackToCopy) { // Fall back to copy if hardlink can't be created Files.copy(sourceFile.toPath(), targetFile.toPath()); } Loading tests/RollbackTest/MultiUserRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.MultiUserRollbackTest" /> Loading tests/RollbackTest/NetworkStagedRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ <option name="run-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es package "com.google.android.gms.platformconfigurator" --es user '\\*' --esa flags "ModuleConfig__versioned_immediate_commit_packages" --esa types "bytes" --esa values "Cm5vdGFwYWNrYWdlOgA=" com.google.android.gms" /> <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package "com.google.android.gms.platformconfigurator" --es user '\*' --esa flag "ModuleConfig__immediate_commit_packages" com.google.android.gms" /> <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package "com.google.android.gms.platformconfigurator" --es user '\*' --esa flag "ModuleConfig__versioned_immediate_commit_packages" com.google.android.gms" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.NetworkStagedRollbackTest" /> Loading tests/RollbackTest/RollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.tests.rollback" /> Loading tests/RollbackTest/StagedRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.StagedRollbackTest" /> Loading Loading
services/core/java/com/android/server/rollback/RollbackStore.java +33 −10 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.content.pm.VersionedPackage; import android.content.rollback.PackageRollbackInfo; import android.content.rollback.PackageRollbackInfo.RestoreInfo; import android.content.rollback.RollbackInfo; import android.os.SystemProperties; import android.os.UserHandle; import android.system.ErrnoException; import android.system.Os; Loading Loading @@ -227,6 +228,15 @@ class RollbackStore { packageSessionIds, extensionVersions); } private static boolean isLinkPossible(File oldFile, File newFile) { try { return Os.stat(oldFile.getAbsolutePath()).st_dev == Os.stat(newFile.getAbsolutePath()).st_dev; } catch (ErrnoException ignore) { return false; } } /** * Creates a backup copy of an apk or apex for a package. * For packages containing splits, this method should be called for each Loading @@ -239,6 +249,8 @@ class RollbackStore { targetDir.mkdirs(); File targetFile = new File(targetDir, sourceFile.getName()); boolean fallbackToCopy = !isLinkPossible(sourceFile, targetFile); if (!fallbackToCopy) { try { // Create a hard link to avoid copy // TODO(b/168562373) Loading @@ -248,7 +260,18 @@ class RollbackStore { // longer the case when compressed apex rolls out. We have to handle this case in // order not to fall back to copy. Os.link(sourceFile.getAbsolutePath(), targetFile.getAbsolutePath()); } catch (ErrnoException ignore) { } catch (ErrnoException e) { boolean isRollbackTest = SystemProperties.getBoolean("persist.rollback.is_test", false); if (isRollbackTest) { throw new IOException(e); } else { fallbackToCopy = true; } } } if (fallbackToCopy) { // Fall back to copy if hardlink can't be created Files.copy(sourceFile.toPath(), targetFile.toPath()); } Loading
tests/RollbackTest/MultiUserRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.MultiUserRollbackTest" /> Loading
tests/RollbackTest/NetworkStagedRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ <option name="run-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es package "com.google.android.gms.platformconfigurator" --es user '\\*' --esa flags "ModuleConfig__versioned_immediate_commit_packages" --esa types "bytes" --esa values "Cm5vdGFwYWNrYWdlOgA=" com.google.android.gms" /> <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package "com.google.android.gms.platformconfigurator" --es user '\*' --esa flag "ModuleConfig__immediate_commit_packages" com.google.android.gms" /> <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package "com.google.android.gms.platformconfigurator" --es user '\*' --esa flag "ModuleConfig__versioned_immediate_commit_packages" com.google.android.gms" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.NetworkStagedRollbackTest" /> Loading
tests/RollbackTest/RollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.tests.rollback" /> Loading
tests/RollbackTest/StagedRollbackTest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,8 @@ <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" /> <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" /> <option name="run-command" value="setprop persist.rollback.is_test 1" /> <option name="teardown-command" value="setprop persist.rollback.is_test 0" /> </target_preparer> <test class="com.android.tradefed.testtype.HostTest" > <option name="class" value="com.android.tests.rollback.host.StagedRollbackTest" /> Loading