Сбой задания потока данных при попытке получить список запущенных заданий (ошибка http.redirect_codes) - PullRequest
0 голосов
/ 13 марта 2020

С раннего утра (12 марта) все задания потока данных (как запускаемые локально, так и из шаблона) завершаются с ошибкой на этапе, который ищет текущие задания потока данных с заданным именем задания. Код ошибки:

        try:
            logging.info("Looking for job_id on Dataflow.")

            service_name = 'dataflow'
            dataflow_api_version = 'v1b3'
            credentials = GoogleCredentials.get_application_default()

            dataflow = build(serviceName=service_name,
                             version=dataflow_api_version,
                             credentials=credentials)

            result = dataflow.projects().locations().jobs().list(
                projectId=project,
                location=region,
            ).execute()

            pipeline_job_id = 'none'

            for job in result['jobs']:
                if job['name'] == job_name:
                    if job['currentState'] == 'JOB_STATE_RUNNING':
                        pipeline_job_id = job['id']
                    break

            if pipeline_job_id == 'none':
                msg = "Could not find currently running job with the " \
                    f"name: {job_name}."
                logging.error(msg)
                raise LookupError(msg)

        except Exception as e:
            logging.error("Error retrieving Job ID")
            raise LookupError(e)

Поднятый LookupError:

LookupError: 'Http' object has no attribute 'redirect_codes'

Я нашел этот коммит в репо google-api-python-client, который был Вчера, 11 марта, появились следующие новые строки:

    http = httplib2.Http(timeout=http_timeout)
    # 308's are used by several Google APIs (Drive, YouTube)
    # for Resumable Uploads rather than Permanent Redirects.
    # This asks httplib2 to exclude 308s from the status codes
    # it treats as redirects
    http.redirect_codes = http.redirect_codes - {308}

Я обновил свою среду локально, чтобы использовать версию google-api-python-client версии 1.7.12, которая и представляет эту ошибку.

* ОБНОВЛЕНИЕ *

После добавления этой зависимости в файл setup.py:

'httplib2>=0.17.0,<1dev'

заданию удалось успешно пройти через это шаг без сбоев, который указывает на возможную ошибку в потоке данных, которая не собирает самые последние зависимости для запуска задания.

Однако в конечном итоге задание не выполнено на шаге записи в BigQuery с эта ошибка:

BrokenPipeError: [Errno 32] Broken pipe
...