diff options
author | Kelvin Zhang <zhangkelvin@google.com> | 2021-03-24 20:58:51 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-03-24 20:58:51 +0000 |
commit | 36e848e8bc8f042fd305484c289cf79384be1d61 (patch) | |
tree | 5093e3a4c420ff1e81aebd58bc5ee5ebf036b847 | |
parent | db302a06e6d787e04c18a3017a8a9be32412876c (diff) | |
parent | 21a4991833d778725eef1fdbf7866c3aa0f1dbad (diff) | |
download | update_engine-36e848e8bc8f042fd305484c289cf79384be1d61.tar.gz |
Make dynamic partition control android return a writable fd am: 21a4991833
Original change: https://android-review.googlesource.com/c/platform/system/update_engine/+/1634739
Change-Id: Iba076f40d2f938227844f17d96ec078be7c854ab
-rw-r--r-- | aosp/dynamic_partition_control_android.cc | 9 | ||||
-rw-r--r-- | aosp/dynamic_partition_control_android.h | 6 | ||||
-rw-r--r-- | aosp/mock_dynamic_partition_control_android.h | 2 | ||||
-rw-r--r-- | common/dynamic_partition_control_interface.h | 4 | ||||
-rw-r--r-- | common/dynamic_partition_control_stub.cc | 7 | ||||
-rw-r--r-- | common/dynamic_partition_control_stub.h | 9 | ||||
-rw-r--r-- | common/mock_dynamic_partition_control.h | 2 | ||||
-rw-r--r-- | payload_consumer/filesystem_verifier_action.cc | 4 | ||||
-rw-r--r-- | payload_consumer/filesystem_verifier_action_unittest.cc | 5 |
9 files changed, 24 insertions, 24 deletions
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc index e1f86d88..1db8da8d 100644 --- a/aosp/dynamic_partition_control_android.cc +++ b/aosp/dynamic_partition_control_android.cc @@ -49,6 +49,7 @@ #include "update_engine/common/dynamic_partition_control_interface.h" #include "update_engine/common/platform_constants.h" #include "update_engine/common/utils.h" +#include "update_engine/payload_consumer/cow_writer_file_descriptor.h" #include "update_engine/payload_consumer/delta_performer.h" using android::base::GetBoolProperty; @@ -1329,7 +1330,7 @@ DynamicPartitionControlAndroid::OpenCowWriter( return snapshot_->OpenSnapshotWriter(params, std::move(source_path)); } // namespace chromeos_update_engine -FileDescriptorPtr DynamicPartitionControlAndroid::OpenCowReader( +FileDescriptorPtr DynamicPartitionControlAndroid::OpenCowFd( const std::string& unsuffixed_partition_name, const std::optional<std::string>& source_path, bool is_append) { @@ -1338,8 +1339,10 @@ FileDescriptorPtr DynamicPartitionControlAndroid::OpenCowReader( if (cow_writer == nullptr) { return nullptr; } - cow_writer->InitializeAppend(kEndOfInstallLabel); - return cow_writer->OpenReader(); + if (!cow_writer->InitializeAppend(kEndOfInstallLabel)) { + return nullptr; + } + return std::make_shared<CowWriterFileDescriptor>(std::move(cow_writer)); } std::optional<base::FilePath> DynamicPartitionControlAndroid::GetSuperDevice() { diff --git a/aosp/dynamic_partition_control_android.h b/aosp/dynamic_partition_control_android.h index 4e75a9b9..c506ac97 100644 --- a/aosp/dynamic_partition_control_android.h +++ b/aosp/dynamic_partition_control_android.h @@ -104,9 +104,9 @@ class DynamicPartitionControlAndroid : public DynamicPartitionControlInterface { const std::string& unsuffixed_partition_name, const std::optional<std::string>& source_path, bool is_append) override; - FileDescriptorPtr OpenCowReader(const std::string& unsuffixed_partition_name, - const std::optional<std::string>&, - bool is_append = false) override; + FileDescriptorPtr OpenCowFd(const std::string& unsuffixed_partition_name, + const std::optional<std::string>&, + bool is_append = false) override; bool UnmapAllPartitions() override; diff --git a/aosp/mock_dynamic_partition_control_android.h b/aosp/mock_dynamic_partition_control_android.h index d80dfb52..428b6c7a 100644 --- a/aosp/mock_dynamic_partition_control_android.h +++ b/aosp/mock_dynamic_partition_control_android.h @@ -95,7 +95,7 @@ class MockDynamicPartitionControlAndroid bool is_append), (override)); MOCK_METHOD(FileDescriptorPtr, - OpenCowReader, + OpenCowFd, (const std::string& unsuffixed_partition_name, const std::optional<std::string>& source_path, bool is_append), diff --git a/common/dynamic_partition_control_interface.h b/common/dynamic_partition_control_interface.h index da279329..d5e1d8d2 100644 --- a/common/dynamic_partition_control_interface.h +++ b/common/dynamic_partition_control_interface.h @@ -165,7 +165,9 @@ class DynamicPartitionControlInterface { const std::string& unsuffixed_partition_name, const std::optional<std::string>&, bool is_append = false) = 0; - virtual FileDescriptorPtr OpenCowReader( + // Open a general purpose FD capable to reading and writing to COW. Note that + // writes must be block aligned. + virtual FileDescriptorPtr OpenCowFd( const std::string& unsuffixed_partition_name, const std::optional<std::string>&, bool is_append = false) = 0; diff --git a/common/dynamic_partition_control_stub.cc b/common/dynamic_partition_control_stub.cc index 05803fe4..dd30a8b6 100644 --- a/common/dynamic_partition_control_stub.cc +++ b/common/dynamic_partition_control_stub.cc @@ -98,13 +98,6 @@ DynamicPartitionControlStub::OpenCowWriter( return nullptr; } -FileDescriptorPtr DynamicPartitionControlStub::OpenCowReader( - const std::string& unsuffixed_partition_name, - const std::optional<std::string>&, - bool /*is_append */) { - return nullptr; -} - bool DynamicPartitionControlStub::MapAllPartitions() { return false; } diff --git a/common/dynamic_partition_control_stub.h b/common/dynamic_partition_control_stub.h index eb7154c1..515ec7c9 100644 --- a/common/dynamic_partition_control_stub.h +++ b/common/dynamic_partition_control_stub.h @@ -64,9 +64,12 @@ class DynamicPartitionControlStub : public DynamicPartitionControlInterface { const std::string& unsuffixed_partition_name, const std::optional<std::string>&, bool is_append) override; - FileDescriptorPtr OpenCowReader(const std::string& unsuffixed_partition_name, - const std::optional<std::string>&, - bool is_append = false) override; + + FileDescriptorPtr OpenCowFd(const std::string& unsuffixed_partition_name, + const std::optional<std::string>&, + bool is_append = false) override { + return nullptr; + } bool MapAllPartitions() override; bool UnmapAllPartitions() override; diff --git a/common/mock_dynamic_partition_control.h b/common/mock_dynamic_partition_control.h index 391d3eb2..bfd1b0c6 100644 --- a/common/mock_dynamic_partition_control.h +++ b/common/mock_dynamic_partition_control.h @@ -37,7 +37,7 @@ class MockDynamicPartitionControl : public DynamicPartitionControlInterface { MOCK_METHOD(FeatureFlag, GetVirtualAbFeatureFlag, (), (override)); MOCK_METHOD(bool, FinishUpdate, (bool), (override)); MOCK_METHOD(FileDescriptorPtr, - OpenCowReader, + OpenCowFd, (const std::string& unsuffixed_partition_name, const std::optional<std::string>& source_path, bool is_append), diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc index aa2fbaae..4efbe41b 100644 --- a/payload_consumer/filesystem_verifier_action.cc +++ b/payload_consumer/filesystem_verifier_action.cc @@ -129,8 +129,8 @@ bool FilesystemVerifierAction::InitializeFdVABC() { const InstallPlan::Partition& partition = install_plan_.partitions[partition_index_]; - read_fd_ = dynamic_control_->OpenCowReader( - partition.name, partition.source_path, true); + read_fd_ = + dynamic_control_->OpenCowFd(partition.name, partition.source_path, true); if (!read_fd_) { LOG(ERROR) << "OpenCowReader(" << partition.name << ", " << partition.source_path << ") failed."; diff --git a/payload_consumer/filesystem_verifier_action_unittest.cc b/payload_consumer/filesystem_verifier_action_unittest.cc index 7d3ee9e1..60e36cc2 100644 --- a/payload_consumer/filesystem_verifier_action_unittest.cc +++ b/payload_consumer/filesystem_verifier_action_unittest.cc @@ -423,14 +423,13 @@ TEST_F(FilesystemVerifierActionTest, RunWithVABCNoVerity) { .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH))); ON_CALL(dynamic_control, UpdateUsesSnapshotCompression()) .WillByDefault(Return(true)); - ON_CALL(dynamic_control, OpenCowReader(_, _, _)) - .WillByDefault(Return(fake_fd)); + ON_CALL(dynamic_control, OpenCowFd(_, _, _)).WillByDefault(Return(fake_fd)); ON_CALL(dynamic_control, IsDynamicPartition(part.name, _)) .WillByDefault(Return(true)); EXPECT_CALL(dynamic_control, UpdateUsesSnapshotCompression()) .Times(AtLeast(1)); - EXPECT_CALL(dynamic_control, OpenCowReader(part.name, {part.source_path}, _)) + EXPECT_CALL(dynamic_control, OpenCowFd(part.name, {part.source_path}, _)) .Times(1); EXPECT_CALL(dynamic_control, ListDynamicPartitionsForSlot(_, _, _)) .WillRepeatedly( |