diff --git a/fs_mgr/libsnapshot/snapshot_stats.cpp b/fs_mgr/libsnapshot/snapshot_stats.cpp index c48509e07..635b47d80 100644 --- a/fs_mgr/libsnapshot/snapshot_stats.cpp +++ b/fs_mgr/libsnapshot/snapshot_stats.cpp @@ -36,36 +36,45 @@ SnapshotMergeStats::~SnapshotMergeStats() { } } -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 1ca915663..60109a4d1 100644 --- a/fs_mgr/libsnapshot/snapshot_stats.h +++ b/fs_mgr/libsnapshot/snapshot_stats.h @@ -32,6 +32,9 @@ class SnapshotMergeStats { SnapshotMergeReport GetReport(); private: + bool ReadState(); + bool WriteState(); + const SnapshotManager& parent_; SnapshotMergeReport report_; std::chrono::time_point init_time_;