Merge "Retry the update if ApplyBSDiffPatch | ApplyImagePatch fails" am: 9c1a114789
am: 66f02b4e71
Change-Id: I6e745992d384b6d870b2549d16dc40100175493e
This commit is contained in:
commit
aef046255a
4 changed files with 12 additions and 4 deletions
|
@ -44,6 +44,7 @@ enum CauseCode {
|
|||
kTune2FsFailure,
|
||||
kRebootFailure,
|
||||
kPackageExtractFileFailure,
|
||||
kPatchApplicationFailure,
|
||||
kVendorFailure = 200
|
||||
};
|
||||
|
||||
|
|
|
@ -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 *LAST_KMSG_FILE = "/cache/recovery/last_kmsg";
|
||||
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.
|
||||
static const int EIO_RETRY_COUNT = 4;
|
||||
// We will try to apply the update package 5 times at most in case of an I/O error or
|
||||
// bspatch | imgpatch error.
|
||||
static const int RETRY_LIMIT = 4;
|
||||
static const int BATTERY_READ_TIMEOUT_IN_SEC = 10;
|
||||
// GmsCore enters recovery mode to install package when having enough battery
|
||||
// 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) {
|
||||
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.
|
||||
if (status == INSTALL_RETRY && retry_count < EIO_RETRY_COUNT) {
|
||||
if (status == INSTALL_RETRY && retry_count < RETRY_LIMIT) {
|
||||
copy_logs();
|
||||
set_retry_bootloader_message(retry_count, args);
|
||||
// Print retry count on screen.
|
||||
|
|
|
@ -1213,6 +1213,7 @@ static int PerformCommandDiff(CommandParameters& params) {
|
|||
std::placeholders::_2),
|
||||
nullptr, nullptr) != 0) {
|
||||
LOG(ERROR) << "Failed to apply image patch.";
|
||||
failure_type = kPatchApplicationFailure;
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
|
@ -1221,6 +1222,7 @@ static int PerformCommandDiff(CommandParameters& params) {
|
|||
std::placeholders::_2),
|
||||
nullptr) != 0) {
|
||||
LOG(ERROR) << "Failed to apply bsdiff patch.";
|
||||
failure_type = kPatchApplicationFailure;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -202,6 +202,10 @@ int main(int argc, char** argv) {
|
|||
// Cause code should provide additional information about the abort.
|
||||
if (state.cause_code != kNoCause) {
|
||||
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) {
|
||||
|
|
Loading…
Reference in a new issue