Fsync data after writing prefs
update_engine is relying on prefs stored on filesystem to resume OTA
progress. Partners report loss of update progress after forced reboot.
This might be I/O cache issue.
Test: th
Bug: 259174530
Change-Id: I7b4b8281cfe2cc45c51e4d6d60e09edb12f3ed86
diff --git a/payload_consumer/delta_performer.cc b/payload_consumer/delta_performer.cc
index 7a1272a..5754cae 100644
--- a/payload_consumer/delta_performer.cc
+++ b/payload_consumer/delta_performer.cc
@@ -1320,10 +1320,7 @@
return true;
}
-bool DeltaPerformer::ResetUpdateProgress(
- PrefsInterface* prefs,
- bool quick,
- bool skip_dynamic_partititon_metadata_updated) {
+bool DeltaPerformer::ResetUpdateProgress(PrefsInterface* prefs, bool quick) {
TEST_AND_RETURN_FALSE(prefs->SetInt64(kPrefsUpdateStateNextOperation,
kUpdateStateOperationInvalid));
if (!quick) {
@@ -1338,10 +1335,8 @@
prefs->Delete(kPrefsPostInstallSucceeded);
prefs->Delete(kPrefsVerityWritten);
- if (!skip_dynamic_partititon_metadata_updated) {
- LOG(INFO) << "Resetting recorded hash for prepared partitions.";
- prefs->Delete(kPrefsDynamicPartitionMetadataUpdated);
- }
+ LOG(INFO) << "Resetting recorded hash for prepared partitions.";
+ prefs->Delete(kPrefsDynamicPartitionMetadataUpdated);
}
return true;
}
@@ -1414,6 +1409,7 @@
}
TEST_AND_RETURN_FALSE(
prefs_->SetInt64(kPrefsUpdateStateNextOperation, next_operation_num_));
+ LOG(INFO) << "Update progress successfully checkpointed.";
return true;
}
diff --git a/payload_consumer/delta_performer.h b/payload_consumer/delta_performer.h
index 633c533..7365519 100644
--- a/payload_consumer/delta_performer.h
+++ b/payload_consumer/delta_performer.h
@@ -147,10 +147,7 @@
// If |skip_dynamic_partititon_metadata_updated| is true, do not reset
// dynamic-partition-metadata-updated.
// Returns true on success, false otherwise.
- static bool ResetUpdateProgress(
- PrefsInterface* prefs,
- bool quick,
- bool skip_dynamic_partititon_metadata_updated = false);
+ static bool ResetUpdateProgress(PrefsInterface* prefs, bool quick);
// Attempts to parse the update metadata starting from the beginning of
// |payload|. On success, returns kMetadataParseSuccess. Returns