Merge "Retry the update if ApplyBSDiffPatch | ApplyImagePatch fails"
am: 9c1a114789
Change-Id: I45afda69f82147ba02b3e4666c3a296d84a2db47
This commit is contained in:
@@ -44,6 +44,7 @@ enum CauseCode {
|
|||||||
kTune2FsFailure,
|
kTune2FsFailure,
|
||||||
kRebootFailure,
|
kRebootFailure,
|
||||||
kPackageExtractFileFailure,
|
kPackageExtractFileFailure,
|
||||||
|
kPatchApplicationFailure,
|
||||||
kVendorFailure = 200
|
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 *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.
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user