Merge "libsnapshot: fix stats write in Resume()"
diff --git a/fs_mgr/libsnapshot/snapshot_stats.cpp b/fs_mgr/libsnapshot/snapshot_stats.cpp
index c48509e..635b47d 100644
--- a/fs_mgr/libsnapshot/snapshot_stats.cpp
+++ b/fs_mgr/libsnapshot/snapshot_stats.cpp
@@ -36,36 +36,45 @@
     }
 }
 
-void SnapshotMergeStats::Start() {
-    SnapshotMergeReport report;
-    report.set_resume_count(0);
-    report.set_state(UpdateState::None);
-
+bool SnapshotMergeStats::ReadState() {
     std::string contents;
-    if (!report.SerializeToString(&contents)) {
+    if (!android::base::ReadFileToString(parent_.GetMergeStateFilePath(), &contents)) {
+        PLOG(INFO) << "Read merge statistics file failed";
+        return false;
+    }
+    if (!report_.ParseFromString(contents)) {
+        LOG(ERROR) << "Unable to parse merge statistics file as SnapshotMergeReport";
+        return false;
+    }
+    return true;
+}
+
+bool SnapshotMergeStats::WriteState() {
+    std::string contents;
+    if (!report_.SerializeToString(&contents)) {
         LOG(ERROR) << "Unable to serialize SnapshotMergeStats.";
-        return;
+        return false;
     }
     auto file_path = parent_.GetMergeStateFilePath();
     if (!WriteStringToFileAtomic(contents, file_path)) {
         PLOG(ERROR) << "Could not write to merge statistics file";
-        return;
+        return false;
     }
+    return true;
+}
+
+void SnapshotMergeStats::Start() {
+    report_.set_resume_count(0);
+    report_.set_state(UpdateState::None);
+    WriteState();
 }
 
 void SnapshotMergeStats::Resume() {
-    std::string contents;
-    if (!android::base::ReadFileToString(parent_.GetMergeStateFilePath(), &contents)) {
-        PLOG(INFO) << "Read merge statistics file failed";
+    if (!ReadState()) {
         return;
     }
-
-    if (!report_.ParseFromString(contents)) {
-        LOG(ERROR) << "Unable to parse merge statistics file as SnapshotMergeReport";
-        return;
-    }
-
     report_.set_resume_count(report_.resume_count() + 1);
+    WriteState();
 }
 
 void SnapshotMergeStats::set_state(android::snapshot::UpdateState state) {
diff --git a/fs_mgr/libsnapshot/snapshot_stats.h b/fs_mgr/libsnapshot/snapshot_stats.h
index 1ca9156..60109a4 100644
--- a/fs_mgr/libsnapshot/snapshot_stats.h
+++ b/fs_mgr/libsnapshot/snapshot_stats.h
@@ -32,6 +32,9 @@
     SnapshotMergeReport GetReport();
 
   private:
+    bool ReadState();
+    bool WriteState();
+
     const SnapshotManager& parent_;
     SnapshotMergeReport report_;
     std::chrono::time_point<std::chrono::steady_clock> init_time_;