docs: def RetryUpload(self, job, job_id, error):
      """Retry the BigQuery upload job.
  
      Using the same job id protects us from duplicating data on the server. If we
      fail all of our retries we raise.
  
      Args:
        job: BigQuery job object
        job_id: ID string for this upload job
        error: errors.HttpError object from the first error
  
      Returns:
        API response object on success, None on failure
      Raises:
        BigQueryJobUploadError: if we can't get the bigquery job started after
            retry_max_attempts
      """
      if self.IsErrorRetryable(error):
        retry_count = 0
        sleep_interval = config.CONFIG["BigQuery.retry_interval"]
        while retry_count < config.CONFIG["BigQuery.retry_max_attempts"]:
  
          time.sleep(sleep_interval.seconds)
          logging.info("Retrying job_id: %s", job_id)
          retry_count += 1
  
          try:
            response = job.execute()
            return response
          except errors.HttpError as e:
            if self.IsErrorRetryable(e):
              sleep_interval *= config.CONFIG["BigQuery.retry_multiplier"]
              logging.exception("Error with job: %s, will retry in %s", job_id,
                                sleep_interval)
            else:
              raise BigQueryJobUploadError(
                  "Can't retry error code %s. Giving up"
                  " on job: %s." % (e.resp.status, job_id))
      else:
        raise BigQueryJobUploadError("Can't retry error code %s. Giving up on "
                                     "job: %s." % (error.resp.status, job_id))
  
      raise BigQueryJobUploadError(
          "Giving up on job:%s after %s retries." % (job_id, retry_count))