Don't list dynamic if a slot doesn't support DAP
If a slot doesn't support dynamic partitions, it's impossible to list
dynamic partitions on that slot. And we should just fall back to the
regular A/B in this case.
Bug: 180025432
Test: apply a retrofit package
Change-Id: I16c457b591e8c1d0cf1077a7be50dd9d8f61b8eb
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index b06d04e..3df162e 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -644,11 +644,6 @@
}
}
- auto dynamic_control = boot_control_->GetDynamicPartitionControl();
- CHECK_NE(dynamic_control, nullptr);
- TEST_AND_RETURN_FALSE(dynamic_control->ListDynamicPartitionsForSlot(
- install_plan_->target_slot, &dynamic_partitions_));
-
// Partitions in manifest are no longer needed after preparing partitions.
manifest_.clear_partitions();
// TODO(xunchang) TBD: allow partial update only on devices with dynamic
@@ -676,6 +671,7 @@
std::vector<std::string> dynamic_partitions;
if (!boot_control_->GetDynamicPartitionControl()
->ListDynamicPartitionsForSlot(install_plan_->source_slot,
+ boot_control_->GetCurrentSlot(),
&dynamic_partitions)) {
LOG(ERROR) << "Failed to load dynamic partitions from slot "
<< install_plan_->source_slot;
@@ -1527,9 +1523,8 @@
}
bool DeltaPerformer::IsDynamicPartition(const std::string& part_name) {
- return std::find(dynamic_partitions_.begin(),
- dynamic_partitions_.end(),
- part_name) != dynamic_partitions_.end();
+ return boot_control_->GetDynamicPartitionControl()->IsDynamicPartition(
+ part_name);
}
std::unique_ptr<PartitionWriter> DeltaPerformer::CreatePartitionWriter(
diff --git a/payload_consumer/delta_performer.h b/payload_consumer/delta_performer.h
index ec23997..31fa6b2 100644
--- a/payload_consumer/delta_performer.h
+++ b/payload_consumer/delta_performer.h
@@ -436,8 +436,6 @@
std::unique_ptr<PartitionWriter> partition_writer_;
- // List of dynamic partitions on device.
- std::vector<std::string> dynamic_partitions_;
DISALLOW_COPY_AND_ASSIGN(DeltaPerformer);
};
diff --git a/payload_consumer/filesystem_verifier_action_unittest.cc b/payload_consumer/filesystem_verifier_action_unittest.cc
index e9560f0..658ebe1 100644
--- a/payload_consumer/filesystem_verifier_action_unittest.cc
+++ b/payload_consumer/filesystem_verifier_action_unittest.cc
@@ -426,9 +426,9 @@
.Times(AtLeast(1));
EXPECT_CALL(dynamic_control, OpenCowReader(part.name, {part.source_path}, _))
.Times(1);
- EXPECT_CALL(dynamic_control, ListDynamicPartitionsForSlot(_, _))
+ EXPECT_CALL(dynamic_control, ListDynamicPartitionsForSlot(_, _, _))
.WillRepeatedly(
- DoAll(SetArgPointee<1, std::vector<std::string>>({part.name}),
+ DoAll(SetArgPointee<2, std::vector<std::string>>({part.name}),
Return(true)));
BuildActions(install_plan, &dynamic_control);