Changed EncodeFEC to compute in incremental steps allowing OTA to be
paused during verity writes.
Test: tested incremental OTA on cuttelfish devices.
Bug: 243594791
Change-Id: I55179ab06fd22f10b246449e841d9b40204c6aaf
diff --git a/payload_consumer/verity_writer_interface.h b/payload_consumer/verity_writer_interface.h
index 432ede7..8b4f080 100644
--- a/payload_consumer/verity_writer_interface.h
+++ b/payload_consumer/verity_writer_interface.h
@@ -22,6 +22,7 @@
#include <base/macros.h>
+#include "common/utils.h"
#include "payload_consumer/file_descriptor.h"
#include "update_engine/payload_consumer/install_plan.h"
@@ -38,8 +39,21 @@
// blocks has passed.
virtual bool Update(uint64_t offset, const uint8_t* buffer, size_t size) = 0;
+ // Deprecated function -> use IncrementalFinalize to allow verity writes to be
+ // interrupted. left for backwards compatibility
+ virtual bool Finalize(FileDescriptor* read_fd, FileDescriptor* write_fd) {
+ while (!FECFinished()) {
+ TEST_AND_RETURN_FALSE(IncrementalFinalize(read_fd, write_fd));
+ }
+ return true;
+ }
+
// Write hash tree && FEC data to underlying fd, if they are present
- virtual bool Finalize(FileDescriptor* read_fd, FileDescriptor* write_fd) = 0;
+ virtual bool IncrementalFinalize(FileDescriptor* read_fd,
+ FileDescriptor* write_fd) = 0;
+
+ // Returns true once FEC data is finished writing
+ virtual bool FECFinished() const = 0;
protected:
VerityWriterInterface() = default;