Merge "Fix headings to be correct Markdown." am: abab751a70
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2284473 Change-Id: I8f084661b57142d61954676b698fa9471e330a2d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
#Rollback Manager
|
# Rollback Manager
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
@@ -7,9 +7,9 @@ updatability efforts. RollbackManager adds support for rolling back an APK or
|
|||||||
APEX update to the previous version installed on the device, and reverting any
|
APEX update to the previous version installed on the device, and reverting any
|
||||||
APK or APEX data to the state it was in at the time of install.
|
APK or APEX data to the state it was in at the time of install.
|
||||||
|
|
||||||
##Rollback Basics
|
## Rollback Basics
|
||||||
|
|
||||||
###How Rollbacks Work
|
### How Rollbacks Work
|
||||||
|
|
||||||
A new install parameter ENABLE_ROLLBACK can be specified to enable rollback when
|
A new install parameter ENABLE_ROLLBACK can be specified to enable rollback when
|
||||||
updating an application. For example:
|
updating an application. For example:
|
||||||
@@ -42,27 +42,27 @@ data taken when FooV2.apk was first installed.
|
|||||||
|
|
||||||
See below for more details of shell commands for rollback.
|
See below for more details of shell commands for rollback.
|
||||||
|
|
||||||
###Rollback Triggers
|
### Rollback Triggers
|
||||||
|
|
||||||
####Manually Triggered Rollback
|
#### Manually Triggered Rollback
|
||||||
|
|
||||||
As mentioned above, it is possible to trigger rollback on device using a shell
|
As mentioned above, it is possible to trigger rollback on device using a shell
|
||||||
command. This is for testing purposes only. We do not expect this mechanism to
|
command. This is for testing purposes only. We do not expect this mechanism to
|
||||||
be used in production in practice.
|
be used in production in practice.
|
||||||
|
|
||||||
####Watchdog Triggered Rollback
|
#### Watchdog Triggered Rollback
|
||||||
|
|
||||||
Watchdog triggered rollback is intended to address severe issues with the
|
Watchdog triggered rollback is intended to address severe issues with the
|
||||||
device. The platform provides several different watchdogs that can trigger
|
device. The platform provides several different watchdogs that can trigger
|
||||||
rollback.
|
rollback.
|
||||||
|
|
||||||
#####Package Watchdog
|
##### Package Watchdog
|
||||||
|
|
||||||
There is a package watchdog service running on device that will trigger rollback
|
There is a package watchdog service running on device that will trigger rollback
|
||||||
of an update if there are 5 ANRs or process crashes within a 1 minute window for
|
of an update if there are 5 ANRs or process crashes within a 1 minute window for
|
||||||
a package in the update.
|
a package in the update.
|
||||||
|
|
||||||
#####Native Watchdog
|
##### Native Watchdog
|
||||||
|
|
||||||
If a native service crashes repeatedly after an update is installed, rollback
|
If a native service crashes repeatedly after an update is installed, rollback
|
||||||
will be triggered. This particularly applies to updates that include APEXes
|
will be triggered. This particularly applies to updates that include APEXes
|
||||||
@@ -70,25 +70,25 @@ that may update native services, but note that as it is difficult to tell which
|
|||||||
native services have been affected by an update, *any* crashing native service
|
native services have been affected by an update, *any* crashing native service
|
||||||
will cause the rollback to be triggered.
|
will cause the rollback to be triggered.
|
||||||
|
|
||||||
#####Explicit Health Check
|
##### Explicit Health Check
|
||||||
|
|
||||||
There is an explicit check to verify the network stack is functional after an
|
There is an explicit check to verify the network stack is functional after an
|
||||||
update. If there is no network connectivity within a certain time period after
|
update. If there is no network connectivity within a certain time period after
|
||||||
an update, rollback is triggered.
|
an update, rollback is triggered.
|
||||||
|
|
||||||
####Server Triggered Rollback
|
#### Server Triggered Rollback
|
||||||
The RollbackManager API may be used by the installer to roll back an update
|
The RollbackManager API may be used by the installer to roll back an update
|
||||||
based on a request from the server.
|
based on a request from the server.
|
||||||
|
|
||||||
##Rollback Details
|
## Rollback Details
|
||||||
|
|
||||||
###RollbackManager API
|
### RollbackManager API
|
||||||
|
|
||||||
The RollbackManager API is an @SystemAPI guarded by the MANAGE_ROLLBACKS and
|
The RollbackManager API is an @SystemAPI guarded by the MANAGE_ROLLBACKS and
|
||||||
TEST_MANAGE_ROLLBACKS permissions. See RollbackManager.java for details about
|
TEST_MANAGE_ROLLBACKS permissions. See RollbackManager.java for details about
|
||||||
the RollbackManager API.
|
the RollbackManager API.
|
||||||
|
|
||||||
###Rollback of APEX modules
|
### Rollback of APEX modules
|
||||||
|
|
||||||
Rollback is supported for APEX modules in addition to APK modules. In Q, there
|
Rollback is supported for APEX modules in addition to APK modules. In Q, there
|
||||||
was no concept of data associated with an APEX, so only the APEX itself is
|
was no concept of data associated with an APEX, so only the APEX itself is
|
||||||
@@ -100,7 +100,7 @@ terms of any state they persist on the system (outside of the APEX data
|
|||||||
directories). For example, FooV2.apex must not change the file format of some
|
directories). For example, FooV2.apex must not change the file format of some
|
||||||
state stored on the device in such a way that FooV1.apex cannot read the file.
|
state stored on the device in such a way that FooV1.apex cannot read the file.
|
||||||
|
|
||||||
###Rollback of MultiPackage Installs
|
### Rollback of MultiPackage Installs
|
||||||
|
|
||||||
Rollback can be enabled for multi-package installs. This requires that all
|
Rollback can be enabled for multi-package installs. This requires that all
|
||||||
packages in the install session, including the parent session, have the
|
packages in the install session, including the parent session, have the
|
||||||
@@ -119,7 +119,7 @@ If there is a problem enabling rollback for any package in the multi-package
|
|||||||
install session, rollback will not be enabled for any package in the
|
install session, rollback will not be enabled for any package in the
|
||||||
multi-package install session.
|
multi-package install session.
|
||||||
|
|
||||||
###Rollback of Staged Installs
|
### Rollback of Staged Installs
|
||||||
|
|
||||||
Rollback can be enabled for staged installs, which require reboot to take
|
Rollback can be enabled for staged installs, which require reboot to take
|
||||||
effect. If reboot was required when the package was updated, then reboot is
|
effect. If reboot was required when the package was updated, then reboot is
|
||||||
@@ -127,21 +127,21 @@ required when the package is rolled back. If no reboot was required when the
|
|||||||
package was updated, then no reboot is required when the package is rolled back.
|
package was updated, then no reboot is required when the package is rolled back.
|
||||||
|
|
||||||
|
|
||||||
###Rollbacks on Multi User Devices
|
### Rollbacks on Multi User Devices
|
||||||
|
|
||||||
Rollbacks should work properly on devices with multiple users. There is special
|
Rollbacks should work properly on devices with multiple users. There is special
|
||||||
handling of user data backup to ensure app user data is properly backed up and
|
handling of user data backup to ensure app user data is properly backed up and
|
||||||
restored for all users, even for credential encrypted users that have not been
|
restored for all users, even for credential encrypted users that have not been
|
||||||
unlocked at various points during the flow.
|
unlocked at various points during the flow.
|
||||||
|
|
||||||
###Rollback whitelist
|
### Rollback whitelist
|
||||||
|
|
||||||
Outside of testing, rollback may only be enabled for packages listed in the
|
Outside of testing, rollback may only be enabled for packages listed in the
|
||||||
sysconfig rollback whitelist - see
|
sysconfig rollback whitelist - see
|
||||||
`SystemConfig#getRollbackWhitelistedPackages`. Attempts to enable rollback for
|
`SystemConfig#getRollbackWhitelistedPackages`. Attempts to enable rollback for
|
||||||
non-whitelisted packages will fail.
|
non-whitelisted packages will fail.
|
||||||
|
|
||||||
###Failure to Enable Rollback
|
### Failure to Enable Rollback
|
||||||
|
|
||||||
There are a number of reasons why we may be unable to enable rollback for a
|
There are a number of reasons why we may be unable to enable rollback for a
|
||||||
package, including:
|
package, including:
|
||||||
@@ -158,13 +158,13 @@ If we are unable to enable rollback, the installation will proceed without
|
|||||||
rollback enabled. Failing to enable rollback does not cause the installation to
|
rollback enabled. Failing to enable rollback does not cause the installation to
|
||||||
fail.
|
fail.
|
||||||
|
|
||||||
###Failure to Commit Rollback
|
### Failure to Commit Rollback
|
||||||
|
|
||||||
For the most part, a rollback will remain available after failure to commit it.
|
For the most part, a rollback will remain available after failure to commit it.
|
||||||
This allows the caller to retry the rollback if they have reason to believe it
|
This allows the caller to retry the rollback if they have reason to believe it
|
||||||
will not fail again the next time the commit of the rollback is attempted.
|
will not fail again the next time the commit of the rollback is attempted.
|
||||||
|
|
||||||
###Installing Previously Rolled Back Packages
|
### Installing Previously Rolled Back Packages
|
||||||
There is no logic in the platform itself to prevent installing a version of a
|
There is no logic in the platform itself to prevent installing a version of a
|
||||||
package that was previously rolled back.
|
package that was previously rolled back.
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ package versions believed to be the main source of the bad update. The list of
|
|||||||
installer to prevent reinstall of a previously rolled back package version if so
|
installer to prevent reinstall of a previously rolled back package version if so
|
||||||
desired.
|
desired.
|
||||||
|
|
||||||
###Rollback Expiration
|
### Rollback Expiration
|
||||||
|
|
||||||
An available rollback is expired if the rollback lifetime has been exceeded or
|
An available rollback is expired if the rollback lifetime has been exceeded or
|
||||||
if there is a new update to package associated with the rollback. When an
|
if there is a new update to package associated with the rollback. When an
|
||||||
@@ -183,9 +183,9 @@ available rollback is expired, the backed up apk and userdata associated with
|
|||||||
the rollback are deleted. Once a rollback is expired, it can no longer be
|
the rollback are deleted. Once a rollback is expired, it can no longer be
|
||||||
executed.
|
executed.
|
||||||
|
|
||||||
##Shell Commands for Rollback
|
## Shell Commands for Rollback
|
||||||
|
|
||||||
###Installing an App with Rollback Enabled
|
### Installing an App with Rollback Enabled
|
||||||
|
|
||||||
The `adb install` command accepts the `--enable-rollback` flag to install an app
|
The `adb install` command accepts the `--enable-rollback` flag to install an app
|
||||||
with rollback enabled. For example:
|
with rollback enabled. For example:
|
||||||
@@ -194,7 +194,7 @@ with rollback enabled. For example:
|
|||||||
$ adb install --enable-rollback FooV2.apk
|
$ adb install --enable-rollback FooV2.apk
|
||||||
```
|
```
|
||||||
|
|
||||||
###Triggering Rollback Manually
|
### Triggering Rollback Manually
|
||||||
|
|
||||||
If rollback is available for an application, the pm command can be used to
|
If rollback is available for an application, the pm command can be used to
|
||||||
trigger rollback manually on device:
|
trigger rollback manually on device:
|
||||||
@@ -206,7 +206,7 @@ $ adb shell pm rollback-app com.example.foo
|
|||||||
For rollback of staged installs, you have to manually reboot the device for the
|
For rollback of staged installs, you have to manually reboot the device for the
|
||||||
rollback to take effect after running the 'pm rollback-app' command.
|
rollback to take effect after running the 'pm rollback-app' command.
|
||||||
|
|
||||||
###Listing the Status of Rollbacks on Device
|
### Listing the Status of Rollbacks on Device
|
||||||
|
|
||||||
You can get a list with details about available and recently committed rollbacks
|
You can get a list with details about available and recently committed rollbacks
|
||||||
using dumpsys. For example:
|
using dumpsys. For example:
|
||||||
@@ -246,9 +246,9 @@ committed.
|
|||||||
The list of rollbacks is also included in bug reports. Search for "DUMP OF
|
The list of rollbacks is also included in bug reports. Search for "DUMP OF
|
||||||
SERVICE rollback".
|
SERVICE rollback".
|
||||||
|
|
||||||
##Configuration Properties
|
## Configuration Properties
|
||||||
|
|
||||||
###Rollback Lifetime
|
### Rollback Lifetime
|
||||||
|
|
||||||
Rollback lifetime refers to the maximum duration of time after the rollback is
|
Rollback lifetime refers to the maximum duration of time after the rollback is
|
||||||
first enabled that it will be available. The default is for rollbacks to be
|
first enabled that it will be available. The default is for rollbacks to be
|
||||||
@@ -263,7 +263,7 @@ $ adb shell device_config put rollback_boot rollback_lifetime_in_millis 17280000
|
|||||||
|
|
||||||
The update will not take effect until after system server has been restarted.
|
The update will not take effect until after system server has been restarted.
|
||||||
|
|
||||||
###Enable Rollback Timeout
|
### Enable Rollback Timeout
|
||||||
|
|
||||||
The enable rollback timeout is how long RollbackManager is allowed to take to
|
The enable rollback timeout is how long RollbackManager is allowed to take to
|
||||||
enable rollback when performing an update. This includes the time needed to make
|
enable rollback when performing an update. This includes the time needed to make
|
||||||
@@ -279,7 +279,7 @@ $ adb shell device_config put rollback enable_rollback_timeout 10000
|
|||||||
|
|
||||||
The update will take effect for the next install with rollback enabled.
|
The update will take effect for the next install with rollback enabled.
|
||||||
|
|
||||||
##Limitations
|
## Limitations
|
||||||
|
|
||||||
* You cannot enable rollback for the first version of an application installed
|
* You cannot enable rollback for the first version of an application installed
|
||||||
on the device. Only updates to a package previously installed on the device can
|
on the device. Only updates to a package previously installed on the device can
|
||||||
|
|||||||
Reference in New Issue
Block a user