aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKelvin Zhang <zhangkelvin@google.com>2021-03-24 20:58:51 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-03-24 20:58:51 +0000
commit36e848e8bc8f042fd305484c289cf79384be1d61 (patch)
tree5093e3a4c420ff1e81aebd58bc5ee5ebf036b847
parentdb302a06e6d787e04c18a3017a8a9be32412876c (diff)
parent21a4991833d778725eef1fdbf7866c3aa0f1dbad (diff)
downloadupdate_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.cc9
-rw-r--r--aosp/dynamic_partition_control_android.h6
-rw-r--r--aosp/mock_dynamic_partition_control_android.h2
-rw-r--r--common/dynamic_partition_control_interface.h4
-rw-r--r--common/dynamic_partition_control_stub.cc7
-rw-r--r--common/dynamic_partition_control_stub.h9
-rw-r--r--common/mock_dynamic_partition_control.h2
-rw-r--r--payload_consumer/filesystem_verifier_action.cc4
-rw-r--r--payload_consumer/filesystem_verifier_action_unittest.cc5
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(