[REFACTOR] DynamicPartitionControl: minimize API
- Move UpdatePartitionMetadata in boot_control_android.cc to
DynamicPartitionControlAndroid::PreparePartitionsForUpdate to
reflect code ownership better.
- Minimize the API by removing unused functions now that we have
PreparePartitionsForUpdate
- Fix tests: replace MockDynamicPartitionControl to
MockDynamicPartitionControlAndroid because it tests
DynamicPartitionControlAndroid.
Test: unit test
Test: manually apply full OTA
Change-Id: I2959270bd89c4f8ddaa45cf45ba93acdec850f67
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 334f9bd..e0859ed 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -36,21 +36,48 @@
uint32_t slot,
bool force_writable,
std::string* path) override;
- bool UnmapPartitionOnDeviceMapper(
- const std::string& target_partition_name) override;
void Cleanup() override;
bool DeviceExists(const std::string& path) override;
android::dm::DmDeviceState GetState(const std::string& name) override;
bool GetDmDevicePathByName(const std::string& name,
std::string* path) override;
std::unique_ptr<android::fs_mgr::MetadataBuilder> LoadMetadataBuilder(
+ const std::string& super_device, uint32_t source_slot) override;
+
+ bool PreparePartitionsForUpdate(uint32_t source_slot,
+ uint32_t target_slot,
+ const BootControlInterface::PartitionMetadata&
+ partition_metadata) override;
+ bool GetDeviceDir(std::string* path) override;
+
+ protected:
+ // These functions are exposed for testing.
+
+ // Unmap logical partition on device mapper. This is the reverse operation
+ // of MapPartitionOnDeviceMapper.
+ // Returns true if unmapped successfully.
+ virtual bool UnmapPartitionOnDeviceMapper(
+ const std::string& target_partition_name);
+
+ // Retrieve metadata from |super_device| at slot |source_slot|.
+ //
+ // If |target_slot| != kInvalidSlot, before returning the metadata, this
+ // function modifies the metadata so that during updates, the metadata can be
+ // written to |target_slot|. In particular, on retrofit devices, the returned
+ // metadata automatically includes block devices at |target_slot|.
+ //
+ // If |target_slot| == kInvalidSlot, this function returns metadata at
+ // |source_slot| without modifying it. This is the same as
+ // LoadMetadataBuilder(const std::string&, uint32_t).
+ virtual std::unique_ptr<android::fs_mgr::MetadataBuilder> LoadMetadataBuilder(
const std::string& super_device,
uint32_t source_slot,
- uint32_t target_slot) override;
- bool StoreMetadata(const std::string& super_device,
- android::fs_mgr::MetadataBuilder* builder,
- uint32_t target_slot) override;
- bool GetDeviceDir(std::string* path) override;
+ uint32_t target_slot);
+
+ // Write metadata |builder| to |super_device| at slot |target_slot|.
+ virtual bool StoreMetadata(const std::string& super_device,
+ android::fs_mgr::MetadataBuilder* builder,
+ uint32_t target_slot);
private:
std::set<std::string> mapped_devices_;
@@ -62,6 +89,13 @@
bool force_writable,
std::string* path);
+ // Update |builder| according to |partition_metadata|, assuming the device
+ // does not have Virtual A/B.
+ bool UpdatePartitionMetadata(
+ android::fs_mgr::MetadataBuilder* builder,
+ uint32_t target_slot,
+ const BootControlInterface::PartitionMetadata& partition_metadata);
+
DISALLOW_COPY_AND_ASSIGN(DynamicPartitionControlAndroid);
};