From 3a85019ce4dff8ac4c265472560f534c35bc3a27 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Wed, 15 Jan 2020 15:30:49 +0800 Subject: [PATCH 1/3] Squash runnables in onBootCompleted (1/n) Some code clean-up to makes it easier to register OnPropertiesChangedListener there in the next patch. Bug: 147712943 Test: atest StagedRollbackTest RollbackTest Change-Id: I46d08fe2715b7c6a08d9a6d862dc0ab0dd3de12c --- .../server/rollback/RollbackManagerServiceImpl.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 8f8a5c4b14e97..da93f1cf1f0f0 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -511,11 +511,10 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { @AnyThread void onBootCompleted() { - getHandler().post(() -> updateRollbackLifetimeDurationInMillis()); - // Also posts to handler thread - scheduleExpiration(0); - getHandler().post(() -> { + updateRollbackLifetimeDurationInMillis(); + runExpiration(); + // Check to see if any rollback-enabled staged sessions or staged // rollback sessions been applied. List enabling = new ArrayList<>(); From c63c1dae5211f073b4d281b96300b436097e9fb1 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Wed, 15 Jan 2020 15:44:25 +0800 Subject: [PATCH 2/3] Register an OnPropertiesChangedListener in onBootCompleted (2/n) Bug: 147712943 Test: atest StagedRollbackTest RollbackTest Change-Id: I329b1f1a503fd9f824cbe322f07ab653a99e5676 --- .../server/rollback/RollbackManagerServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index da93f1cf1f0f0..30f646c63cfb7 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -43,6 +43,7 @@ import android.content.rollback.RollbackManager; import android.os.Binder; import android.os.Environment; import android.os.Handler; +import android.os.HandlerExecutor; import android.os.HandlerThread; import android.os.Process; import android.os.SystemClock; @@ -78,6 +79,7 @@ import java.util.List; import java.util.Random; import java.util.Set; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -134,6 +136,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { private final Context mContext; private final HandlerThread mHandlerThread; + private final Executor mExecutor; private final Installer mInstaller; private final RollbackPackageHealthObserver mPackageHealthObserver; private final AppDataRollbackHelper mAppDataRollbackHelper; @@ -173,6 +176,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { mHandlerThread = new HandlerThread("RollbackManagerServiceHandler"); mHandlerThread.start(); Watchdog.getInstance().addThread(getHandler(), HANDLER_THREAD_TIMEOUT_DURATION_MILLIS); + mExecutor = new HandlerExecutor(getHandler()); for (UserInfo userInfo : UserManager.get(mContext).getUsers(true)) { registerUserCallbacks(userInfo.getUserHandle()); @@ -511,6 +515,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { @AnyThread void onBootCompleted() { + DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_ROLLBACK_BOOT, + mExecutor, properties -> updateRollbackLifetimeDurationInMillis()); + getHandler().post(() -> { updateRollbackLifetimeDurationInMillis(); runExpiration(); From 4ff9d08435fb565b35ec55f972c9bc9ebb59e28c Mon Sep 17 00:00:00 2001 From: JW Wang Date: Wed, 15 Jan 2020 15:46:39 +0800 Subject: [PATCH 3/3] No need to call #updateRollbackLifetimeDurationInMillis (3/n) No need to call #updateRollbackLifetimeDurationInMillis manually inside reloadPersistedData. Also fix tests since #reloadPersistedData no longer pulls DeviceConfig changes. Bug: 147712943 Test: atest StagedRollbackTest RollbackTest Change-Id: I7579d6c969117189e01e0767decd1faeaa811eb9 --- .../android/server/rollback/RollbackManagerServiceImpl.java | 1 - .../src/com/android/tests/rollback/RollbackTest.java | 6 ------ 2 files changed, 7 deletions(-) diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 30f646c63cfb7..958e401719313 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -408,7 +408,6 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { CountDownLatch latch = new CountDownLatch(1); getHandler().post(() -> { - updateRollbackLifetimeDurationInMillis(); synchronized (mLock) { mRollbacks.clear(); mRollbacks.addAll(mRollbackStore.loadRollbacks()); diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java index f6699faf7a617..5a92d68494342 100644 --- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java +++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/RollbackTest.java @@ -392,9 +392,6 @@ public class RollbackTest { RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(expirationTime), false /* makeDefault*/); - // Pull the new expiration time from DeviceConfig - rm.reloadPersistedData(); - // Uninstall TestApp.A Uninstall.packages(TestApp.A); assertThat(InstallUtils.getInstalledVersion(TestApp.A)).isEqualTo(-1); @@ -457,9 +454,6 @@ public class RollbackTest { RollbackManager.PROPERTY_ROLLBACK_LIFETIME_MILLIS, Long.toString(expirationTime), false /* makeDefault*/); - // Pull the new expiration time from DeviceConfig - rm.reloadPersistedData(); - // Install app A with rollback enabled Uninstall.packages(TestApp.A); Install.single(TestApp.A1).commit();