libsnapshot: Use a two-phase merge for VABC.
If a partition shrinks in an update, it must be merged before any other partitions. Otherwise, a copy operation may source from the tail of the shrunk partition, which could be overwritten by a merge operation in another partition. This patch adds a "MergePhase" indicator to the update status that is valid only when the state is MERGING. Partitions that shrink are merged first, and the phase will be FIRST_PHASE. Once ProcessUpdateState() has determined that all first-phase snapshots are merged, it will switch to SECOND_PHASE and remaining snapshots can start merging. Otherwise, there is no change to the merge algorithm. The phase split is an implementation detail and not exposed to update_engine. Bug: 177935716 Test: vts_libsnapshot_test Change-Id: I06043f8e3b81bdecefb6a4b5944a97b7086eeb49
Loading
Please register or sign in to comment