'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'

def RetryUpload(self, job, job_id, error):

    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)
