Check if FileDeltaProcessor succeeded.
Bug: None
Test: brillo_update_payload generate
Change-Id: Idd9015170370bcffeb9515506fcccff9794a1659
diff --git a/payload_generator/delta_diff_utils.cc b/payload_generator/delta_diff_utils.cc
index 7293c65..ac885b1 100644
--- a/payload_generator/delta_diff_utils.cc
+++ b/payload_generator/delta_diff_utils.cc
@@ -219,7 +219,7 @@
void Run() override;
// Merge each file processor's ops list to aops.
- void MergeOperation(vector<AnnotatedOperation>* aops);
+ bool MergeOperation(vector<AnnotatedOperation>* aops);
private:
const string& old_part_; // NOLINT(runtime/member_string_references)
@@ -240,6 +240,8 @@
// The list of ops to reach the new file from the old file.
vector<AnnotatedOperation> file_aops_;
+ bool failed_ = false;
+
DISALLOW_COPY_AND_ASSIGN(FileDeltaProcessor);
};
@@ -260,12 +262,16 @@
blob_file_)) {
LOG(ERROR) << "Failed to generate delta for " << name_ << " ("
<< new_extents_blocks_ << " blocks)";
+ failed_ = true;
+ return;
}
if (!version_.InplaceUpdate()) {
if (!ABGenerator::FragmentOperations(
version_, &file_aops_, new_part_, blob_file_)) {
LOG(ERROR) << "Failed to fragment operations for " << name_;
+ failed_ = true;
+ return;
}
}
@@ -274,9 +280,12 @@
<< " seconds.";
}
-void FileDeltaProcessor::MergeOperation(vector<AnnotatedOperation>* aops) {
+bool FileDeltaProcessor::MergeOperation(vector<AnnotatedOperation>* aops) {
+ if (failed_)
+ return false;
aops->reserve(aops->size() + file_aops_.size());
std::move(file_aops_.begin(), file_aops_.end(), std::back_inserter(*aops));
+ return true;
}
bool DeltaReadPartition(vector<AnnotatedOperation>* aops,
@@ -409,7 +418,7 @@
thread_pool.JoinAll();
for (auto& processor : file_delta_processors) {
- processor.MergeOperation(aops);
+ TEST_AND_RETURN_FALSE(processor.MergeOperation(aops));
}
return true;