Merge "libsnapshot: cancel ok if unverified and old slot"

This commit is contained in:
Treehugger Robot 2019-09-10 02:12:58 +00:00 committed by Gerrit Code Review
commit c48b65c67e
1 changed files with 20 additions and 4 deletions

View File

@ -136,11 +136,27 @@ bool SnapshotManager::CancelUpdate() {
UpdateState state = ReadUpdateState(file.get());
if (state == UpdateState::None) return true;
if (state != UpdateState::Initiated) {
LOG(ERROR) << "Cannot cancel update after it has completed or started merging";
return false;
if (state == UpdateState::Initiated) {
LOG(INFO) << "Update has been initiated, now canceling";
return RemoveAllUpdateState(file.get());
}
return RemoveAllUpdateState(file.get());
if (state == UpdateState::Unverified) {
// We completed an update, but it can still be canceled if we haven't booted into it.
auto boot_file = GetSnapshotBootIndicatorPath();
std::string contents;
if (!android::base::ReadFileToString(boot_file, &contents)) {
PLOG(WARNING) << "Cannot read " << boot_file << ", proceed to canceling the update:";
return RemoveAllUpdateState(file.get());
}
if (device_->GetSlotSuffix() == contents) {
LOG(INFO) << "Canceling a previously completed update";
return RemoveAllUpdateState(file.get());
}
}
LOG(ERROR) << "Cannot cancel update after it has completed or started merging";
return false;
}
bool SnapshotManager::RemoveAllUpdateState(LockedFile* lock) {