From 91da9dfeefa42aeaaeb17e49368112231a0501e0 Mon Sep 17 00:00:00 2001 From: Alessio Balsini Date: Thu, 20 Feb 2020 01:06:57 +0000 Subject: [PATCH] libsnapshot: fix stats write in Resume() The Resume() operation is supposed to increment the resume counter, but the updated counter value was not written to the device. Fix by adding the write operation and refactoring the code. Bug: none Test: m Change-Id: I3fffd61cc779c59e2780900809f0ce0b84258e78 Signed-off-by: Alessio Balsini --- fs_mgr/libsnapshot/snapshot_stats.cpp | 43 ++++++++++++++++----------- fs_mgr/libsnapshot/snapshot_stats.h | 3 ++ 2 files changed, 29 insertions(+), 17 deletions(-) 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_;