Merge "Retry the update if ApplyBSDiffPatch | ApplyImagePatch fails"

am: 9c1a114789

Change-Id: I45afda69f82147ba02b3e4666c3a296d84a2db47
This commit is contained in:
Tianjie Xu
2017-05-24 18:48:04 +00:00
committed by android-build-merger
4 changed files with 12 additions and 4 deletions

View File

@@ -44,6 +44,7 @@ enum CauseCode {
kTune2FsFailure, kTune2FsFailure,
kRebootFailure, kRebootFailure,
kPackageExtractFileFailure, kPackageExtractFileFailure,
kPatchApplicationFailure,
kVendorFailure = 200 kVendorFailure = 200
}; };

View File

@@ -112,8 +112,9 @@ static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log";
static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install"; static const char *TEMPORARY_INSTALL_FILE = "/tmp/last_install";
static const char *LAST_KMSG_FILE = "/cache/recovery/last_kmsg"; static const char *LAST_KMSG_FILE = "/cache/recovery/last_kmsg";
static const char *LAST_LOG_FILE = "/cache/recovery/last_log"; static const char *LAST_LOG_FILE = "/cache/recovery/last_log";
// We will try to apply the update package 5 times at most in case of an I/O error. // We will try to apply the update package 5 times at most in case of an I/O error or
static const int EIO_RETRY_COUNT = 4; // bspatch | imgpatch error.
static const int RETRY_LIMIT = 4;
static const int BATTERY_READ_TIMEOUT_IN_SEC = 10; static const int BATTERY_READ_TIMEOUT_IN_SEC = 10;
// GmsCore enters recovery mode to install package when having enough battery // GmsCore enters recovery mode to install package when having enough battery
// percentage. Normally, the threshold is 40% without charger and 20% with charger. // percentage. Normally, the threshold is 40% without charger and 20% with charger.
@@ -1530,9 +1531,9 @@ int main(int argc, char **argv) {
} }
if (status != INSTALL_SUCCESS) { if (status != INSTALL_SUCCESS) {
ui->Print("Installation aborted.\n"); ui->Print("Installation aborted.\n");
// When I/O error happens, reboot and retry installation EIO_RETRY_COUNT // When I/O error happens, reboot and retry installation RETRY_LIMIT
// times before we abandon this OTA update. // times before we abandon this OTA update.
if (status == INSTALL_RETRY && retry_count < EIO_RETRY_COUNT) { if (status == INSTALL_RETRY && retry_count < RETRY_LIMIT) {
copy_logs(); copy_logs();
set_retry_bootloader_message(retry_count, args); set_retry_bootloader_message(retry_count, args);
// Print retry count on screen. // Print retry count on screen.

View File

@@ -1213,6 +1213,7 @@ static int PerformCommandDiff(CommandParameters& params) {
std::placeholders::_2), std::placeholders::_2),
nullptr, nullptr) != 0) { nullptr, nullptr) != 0) {
LOG(ERROR) << "Failed to apply image patch."; LOG(ERROR) << "Failed to apply image patch.";
failure_type = kPatchApplicationFailure;
return -1; return -1;
} }
} else { } else {
@@ -1221,6 +1222,7 @@ static int PerformCommandDiff(CommandParameters& params) {
std::placeholders::_2), std::placeholders::_2),
nullptr) != 0) { nullptr) != 0) {
LOG(ERROR) << "Failed to apply bsdiff patch."; LOG(ERROR) << "Failed to apply bsdiff patch.";
failure_type = kPatchApplicationFailure;
return -1; return -1;
} }
} }

View File

@@ -202,6 +202,10 @@ int main(int argc, char** argv) {
// Cause code should provide additional information about the abort. // Cause code should provide additional information about the abort.
if (state.cause_code != kNoCause) { if (state.cause_code != kNoCause) {
fprintf(cmd_pipe, "log cause: %d\n", state.cause_code); fprintf(cmd_pipe, "log cause: %d\n", state.cause_code);
if (state.cause_code == kPatchApplicationFailure) {
LOG(INFO) << "Patch application failed, retry update.";
fprintf(cmd_pipe, "retry_update\n");
}
} }
if (updater_info.package_zip) { if (updater_info.package_zip) {