Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5b7b798 authored by Tianjie Xu's avatar Tianjie Xu Committed by Automerger Merge Worker
Browse files

Merge "Update libsnapshot to handle partial update" am: 8e1b8059 am: dd513953 am: 3423d5ed

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1326217

Change-Id: Iebf5f41416fc9505c7447b4ebfe6b515287af6c0
parents ad5f8f4a 3423d5ed
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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();
+19 −0
Original line number Diff line number Diff line
@@ -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.
+1 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -77,4 +77,5 @@ message DynamicPartitionMetadata {
message DeltaArchiveManifest {
    repeated PartitionUpdate partitions = 13;
    optional DynamicPartitionMetadata dynamic_partition_metadata = 15;
    optional bool partial_update = 16;
}