Перейти к содержанию

Airflow retry/backfill после partial export

Все лаборатории · Раздел 04

Тип материала: учебная fault-injection лаборатория. Все данные, IDs, интервалы и суммы — HYPOTHETICAL. NOT_RUN относится к интеграционной части; локальные результаты фиксируются отдельно в отчёте Этапа 4.

Зависимости и reuse

Reuse report_tasks.py, mapped DAG и backfill guide. Pure helpers проверяются без scheduler, Airflow 3.1.0 выполняется только в optional profile.

Подготовка и команды

Команды PowerShell выполняются из корня handbook. Используйте отдельные namespace/workdir; не подключайте production endpoints. Доступность Docker проверяется docker info; одного docker compose config недостаточно. Нужны свободные localhost ports и синтетические fixture.

Локальная проверка выполняется stage4 runner; его dependencies соответствуют существующему processing venv:

& $labPython scripts/check_reliability_examples.py --work (Join-Path ([IO.Path]::GetTempPath()) ("new-local-run-" + [guid]::NewGuid())) --checked-on 2026-11-02

Для нового независимого прогона используйте новый --work. Для scheduler test:

docker compose -f examples/processing/compose-runtimes.yaml --profile airflow up -d

Проверьте existing guide и airflow backfill create --help для закреплённого 3.1 CLI. Dry-run не выполняет DAG.

Точка fault injection и последовательность

  1. Получить fixed interval specs по immutable fixture.
  2. Выполнить только первую tenant extraction; reconcile обязан отказать из-за missing expected rows.
  3. Retry того же run/interval заменяет deterministic outputs, затем полная сверка разрешает manifest.
  4. Смешать manifest другого run generation: oracle должен отказать.
  5. Изменить копию source после discover: extract должен обнаружить hash mismatch.
  6. Для настоящего Airflow убить mapped task после записи output до task success и повторить тот же run. Backfill отдельного run создаёт отдельную generation; не смешивать их.

Проверки и evidence

Partial generation не имеет valid ready manifest. Retry same generation даёт прежние count/totals и output checksum; mixed generation и mutated source обнаруживаются. Actual task states/try_number и scheduler logs нужны для Airflow outcome; pure-helper success этого не подтверждает.

Записывайте versions, исходные offsets/cut, момент injection, состояние после recovery и independent oracle. Отсутствующий prerequisite даёт NOT_RUN; несработавший ожидаемый fault — FAIL эксперимента, а не PASS correctness.

Recovery и cleanup

Serving остаётся на предыдущем validated generation. Повторить missing partitions и полную reconciliation, потом publish. Cleanup новых workdirs — после сохранения evidence; не трогать старые outputs и source fixture.

Остановите созданные тестовые процессы; очистка допускается только для собственных синтетических namespaces. Не используйте down -v для общей лаборатории 3B: это удалит evidence предыдущих работ. Сохраните protocol до cleanup.

Ограничения и статус

Локальный helper тест не включает Oracle/PG extraction, scheduler, object storage, S3 multi-object publication и region failover. Реальный task kill/backfill execution NOT_RUN.

Интеграционный статус в текущем окружении: NOT_RUN — Docker daemon недоступен. Ожидаемые результаты выше являются acceptance criteria, а не фактически полученным runtime output.

Источники