No description
Find a file
David Anderson 5312c466b9 libsnapshot: Implement merge flow.
This implements InitiateMerge() and WaitForMerge(). InitiateMerge() is
meant to be called after an update has been marked successful.
WaitForMerge() is designed to be called either: immediately after
InitiateMerge, or during each subsequent boot where merging has not
completed.

InitiateMerge converts each snapshot device to a snapshot-merge device.

WaitForMerge polls each snapshot-merge device until no device reports a
"merging" state. One of the following states can result from this:
 - MergeFailed. This will happen if any device failed to merge, or we
   were unable to poll, or any other system-level failure occurred.
 - MergeNeedsReboot. This will happen if a snapshot-merge device has
   completed merging, but we were unable to clean it up due to something
   holding a resource open.
 - MergeCompleted. This indicates that all snapshots completed merging
   and were cleaned up.

If WaitForMerge() returns MergeCompleted, then all snapshots have been
removed and a new update can begin. GetUpdateState() will return None.

MergeFailed and MergeNeedsReboot, on the other hand, are "sticky". They
indicate a merge is still pending. When called again, WaitForMerge()
will poll again to attempt to make more progress in the merge. For
NeedsReboot, a single reboot will ensure all resources are released and
the next WaitForMerge() will successfully finish cleanup. In the failure
case, it is unlikely the next WaitForMerge will succeed, but we always
retry anyway (there is no harm in doing so, and if we get lucky, the
device can take more OTAs).

Bug: 136678799
Test: libsnapshot_test gtests
Change-Id: I5e93fcbffee1973da5ff76363df12d6317a7a7c7
2019-08-07 18:42:23 -07:00
adb Merge "adb: fail better in install-multiple." 2019-08-06 19:33:34 +00:00
base Merge "Implement unique_fd.ok()" 2019-07-24 13:51:43 +00:00
bootstat bootstat: power_on* handling 2019-07-09 11:35:49 -07:00
cpio Switch from dist-for-goals to dist in Android.bp 2018-11-19 23:06:12 -08:00
debuggerd Merge "Add wchan data to ANR dump" 2019-07-20 16:40:54 +00:00
deprecated-adf adf: rename. 2019-02-14 16:30:24 -08:00
diagnose_usb Build adbd for recovery 2018-05-24 14:11:11 +09:00
fastboot fs_mgr: Remove the timeout parameter to DestroyLogicalPartition. 2019-07-11 15:39:53 -07:00
fs_mgr libsnapshot: Implement merge flow. 2019-08-07 18:42:23 -07:00
gatekeeperd Gatekeeperd maintenance 2019-06-23 11:09:30 -07:00
healthd healthd: Convert libhealthd_{draw,charger} to Soong. 2019-07-24 17:01:40 -07:00
include Move android_filesystem_config.h => fs_config.h 2017-08-02 16:31:19 -07:00
init Merge "Adds check_interface_{restart,start,stop} check_builtins." 2019-08-06 23:21:29 +00:00
janitors Add the two best build system janitors. 2019-03-25 10:25:13 -07:00
libappfuse Close /dev/fuse FD before calling onClosed 2019-05-31 17:06:52 +01:00
libasyncio Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libbacktrace Move to the libc++ demangler. 2019-07-18 17:57:04 -07:00
libbinderwrapper Make libbinderwrapper available in /vendor partition 2018-04-06 08:41:21 +09:00
libcrypto_utils Convert more modules to Android.bp 2018-10-31 21:53:37 -07:00
libcutils Merge "Add reserved AID ranges for all partitions" 2019-07-15 23:19:41 +00:00
libdiskconfig Rename target.linux[_x86[_64]] to target.linux_glibc[_x86[_64]] 2017-10-02 10:44:29 -07:00
libgrallocusage Merge "Build both static and shared lib." 2018-09-25 22:29:31 +00:00
libion libion: make tests work with Ion from common kernel. 2019-07-30 14:40:24 -07:00
libkeyutils mini-keyctl: fix key id parsing by "0x" prefix 2019-04-15 15:19:08 -07:00
liblog Remove an ancient spam-busting hack from logd. 2019-07-08 11:10:11 -07:00
libmeminfo VtsKernelMemInfoTest: only enforce on Q+ launching devices 2019-07-23 17:06:54 -07:00
libmemtrack Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libmemunreachable Merge "memunreachable_test: don't use write to escape addresses" 2019-05-25 00:20:24 +00:00
libmetricslogger DO NOT MERGE - Merge pie-platform-release (PPRL.181205.001) into master 2018-12-11 14:46:12 -08:00
libmodprobe Merge changes from topic "toolbox-modprobe" 2019-08-07 17:09:09 +00:00
libnativebridge Update OWNERS for libnativebridge 2019-02-13 19:20:59 +09:00
libnativeloader Don't fail if default namespace isn't found 2019-08-01 09:30:01 +09:00
libnetutils Refactor OWNERS files for Android Core Networking 2019-02-12 13:25:13 +08:00
libpackagelistparser Add versionCode parser for package list. 2019-03-19 17:04:46 +00:00
libpixelflinger Mark gglMulx and gglMulAddx as always_inline 2019-02-14 11:59:48 -08:00
libprocessgroup Fix IsUsable to check for each controller separately 2019-06-26 11:35:11 -07:00
libprocinfo Merge "Revert "Mark libs as double_loadable"" 2019-03-12 22:11:27 +00:00
libqtaguid Redirect qtaguid native call to netd fwmark client 2017-11-09 18:02:22 -08:00
libsparse Fix an unintialized return value. 2019-05-02 12:54:09 -07:00
libstats libstats: remove _USING_LIBCXX. 2019-08-05 08:15:17 -07:00
libsuspend Remove libsuspend from VNDK. 2018-08-14 13:39:55 -07:00
libsync Enable native_bridge_support for libsync 2019-05-15 12:40:33 +02:00
libsystem Enable native_bridge_support for libsystem_headers 2019-05-16 14:13:38 +02:00
libsysutils Enable clang-tidy for libsysutils. 2019-04-24 00:35:58 +09:00
libunwindstack Merge "Move to isolated testing." 2019-07-18 19:00:46 +00:00
libusbhost Revert "Mark libs as double_loadable" 2019-03-11 14:10:34 +00:00
libutils Merge "Remove two more unused utf32 functions." 2019-08-02 19:29:45 +00:00
libvndksupport Make android_load_sphal_library thread-safe 2019-07-15 13:58:51 -07:00
libziparchive Avoid using data descriptors in ZIP files when possible. 2019-07-23 06:58:53 +00:00
llkd llkd: do not call sync() 2019-01-10 12:52:35 -08:00
lmkd lmkd: Prevent non-main threads being registered or killed by lmkd 2019-07-12 15:11:54 +00:00
logcat logcat: error on multiple PID argument 2019-08-02 10:14:37 -07:00
logd Revert "Modularize logd." 2019-06-28 14:16:13 -07:00
logwrapper Build adbd for recovery 2018-05-24 14:11:11 +09:00
property_service init: ro.boottime.init.first_stage 2019-05-08 16:07:10 +00:00
qemu_pipe Build adbd for recovery 2018-05-24 14:11:11 +09:00
reboot reboot: only pause indefinitely for non-shutdown operations 2017-09-29 16:29:52 +00:00
rootdir Implement basic libsnapshot functionality. 2019-08-02 13:30:08 -07:00
run-as run-as: improve diagnostics on failure. 2019-03-13 11:16:03 -07:00
sdcard Allow callers to pass a flag to not link obb dirs of multiple users. 2019-03-05 14:41:54 -08:00
shell_and_utilities Include ldd in /system/bin. 2019-07-25 12:47:34 -07:00
storaged Merge "Fix storaged memory leak" 2019-08-02 00:15:28 +00:00
toolbox toolbox: add modprobe 2019-08-06 13:58:13 -07:00
trusty Replace legacy trusty gatekeeper HAL with HIDLized version 2019-06-23 11:11:09 -07:00
usbd usbd: Exit in case of charger mode. 2019-06-20 12:13:31 -07:00
watchdogd Move watchdogd out of init 2018-08-02 12:25:58 -07:00
.clang-format Add a 2 width option of clang format. 2017-03-10 13:01:39 -08:00
.clang-format-2 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.clang-format-4 Move clang-formats to build. 2019-01-18 14:26:33 -08:00
.gitignore Ignore adb/*.pyc files 2015-08-11 12:59:58 -07:00
Android.bp Export android_filesystem_config.h as a filegroup 2017-01-17 18:20:28 -08:00
CleanSpec.mk Rename product_services to system_ext 2019-07-09 08:56:53 +00:00
MODULE_LICENSE_APACHE2 auto import from //depot/cupcake/@135843 2013-07-30 13:56:49 -07:00
NOTICE Fix omission in NOTICE file. 2013-07-30 13:56:55 -07:00
OWNERS Move per-file OWNERS directives to their directories. 2018-06-06 11:49:40 +09:00
PREUPLOAD.cfg Add a PREUPLOAD.cfg file to run git-clang-format on every commit 2017-03-08 16:51:26 +08:00
TEST_MAPPING Hide most symbols in libmemunreachable 2019-05-20 15:18:03 -07:00