Merge "Update libsnapshot to handle partial update" am: 8e1b80596f
am: dd513953ac
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1326217 Change-Id: Id7f0cd2bbe8c1cec431d369477f0fb1099a9c8cc
This commit is contained in:
commit
3423d5edc7
4 changed files with 25 additions and 0 deletions
|
@ -2277,6 +2277,10 @@ Return SnapshotManager::CreateUpdateSnapshotsInternal(
|
|||
auto operations_it = install_operation_map.find(target_partition->name());
|
||||
if (operations_it != install_operation_map.end()) {
|
||||
cow_creator->operations = operations_it->second;
|
||||
} else {
|
||||
LOG(INFO) << target_partition->name()
|
||||
<< " isn't included in the payload, skipping the cow creation.";
|
||||
continue;
|
||||
}
|
||||
|
||||
cow_creator->extra_extents.clear();
|
||||
|
|
|
@ -62,6 +62,8 @@ SnapshotMetadataUpdater::SnapshotMetadataUpdater(MetadataBuilder* builder, uint3
|
|||
std::string(it->second) + target_suffix_, &p});
|
||||
}
|
||||
}
|
||||
|
||||
partial_update_ = manifest.partial_update();
|
||||
}
|
||||
|
||||
bool SnapshotMetadataUpdater::ShrinkPartitions() const {
|
||||
|
@ -82,6 +84,18 @@ bool SnapshotMetadataUpdater::ShrinkPartitions() const {
|
|||
}
|
||||
|
||||
bool SnapshotMetadataUpdater::DeletePartitions() const {
|
||||
// For partial update, not all dynamic partitions are included in the payload.
|
||||
// TODO(xunchang) delete the untouched partitions whose group is in the payload.
|
||||
// e.g. Delete vendor in the following scenario
|
||||
// On device:
|
||||
// Group A: system, vendor
|
||||
// In payload:
|
||||
// Group A: system
|
||||
if (partial_update_) {
|
||||
LOG(INFO) << "Skip deleting partitions for partial update";
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<std::string> partitions_to_delete;
|
||||
// Don't delete partitions in groups where the group name doesn't have target_suffix,
|
||||
// e.g. default.
|
||||
|
@ -139,6 +153,11 @@ bool SnapshotMetadataUpdater::ShrinkGroups() const {
|
|||
}
|
||||
|
||||
bool SnapshotMetadataUpdater::DeleteGroups() const {
|
||||
if (partial_update_) {
|
||||
LOG(INFO) << "Skip deleting groups for partial update";
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<std::string> existing_groups = builder_->ListGroups();
|
||||
for (const auto& existing_group_name : existing_groups) {
|
||||
// Don't delete groups without target suffix, e.g. default.
|
||||
|
|
|
@ -79,6 +79,7 @@ class SnapshotMetadataUpdater {
|
|||
const std::string target_suffix_;
|
||||
std::vector<Group> groups_;
|
||||
std::vector<Partition> partitions_;
|
||||
bool partial_update_{false};
|
||||
};
|
||||
|
||||
} // namespace snapshot
|
||||
|
|
|
@ -77,4 +77,5 @@ message DynamicPartitionMetadata {
|
|||
message DeltaArchiveManifest {
|
||||
repeated PartitionUpdate partitions = 13;
|
||||
optional DynamicPartitionMetadata dynamic_partition_metadata = 15;
|
||||
optional bool partial_update = 16;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue