Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75dee9b0 authored by Tianjie Xu's avatar Tianjie Xu Committed by android-build-merger
Browse files

Merge "Retry the update if ApplyBSDiffPatch | ApplyImagePatch fails" am:...

Merge "Retry the update if ApplyBSDiffPatch | ApplyImagePatch fails" am: 9c1a1147 am: 66f02b4e am: aef04625
am: da1fcf7a

Change-Id: Icad68a225061426e396541d0f67374a530f1dcb3
parents f158a7d2 da1fcf7a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ enum CauseCode {
  kTune2FsFailure,
  kRebootFailure,
  kPackageExtractFileFailure,
  kPatchApplicationFailure,
  kVendorFailure = 200
};

+5 −4
Original line number Diff line number Diff line
@@ -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.
+2 −0
Original line number Diff line number Diff line
@@ -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;
        }
      }
+4 −0
Original line number Diff line number Diff line
@@ -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) {