Errors
Apache Airflow

Apache Airflow: Refreshing dags without web server restart Apache Airflow

Ты внес правки в DAG, нажал сохранить и бежишь в интерфейс Airflow. А там — ничего. Старая версия, будто ты ничего и не менял. Мысль о restart webserver вызывае

Ты внес правки в DAG, нажал сохранить и бежишь в интерфейс Airflow. А там — ничего. Старая версия, будто ты ничего и не менял. Мысль о restart webserver вызывает легкую панику, потому что это время и потенциальные алерты.

Но перезагружать веб-сервер не нужно. Почти никогда.

Кто тут главный по дагам

За загрузку и парсинг DAG файлов отвечает scheduler. Он сканирует папку dags/ с интервалом, который ты задал в dag_dir_list_interval. Каждые N секунд он заглядывает в папку, находит новые файлы или изменения в старых, парсит их и складывает результат в свою базу.

Веб-сервер — это лишь клиент. Он не ходит в файловую систему за дагами. Он берет уже сериализованные данные из базы данных метаданных Airflow и показывает тебе в UI. У него есть свой кэш.

Поэтому вопрос «как обновить даги» распадается на два: как заставить scheduler увидеть изменения быстро и как заставить webserver показать свежие данные.

Команда, которую ты искал

Scheduler сам подхватит изменения при следующем сканировании папки. Но если ждать пять минут — не вариант, можно дать ему прямой пинок.

Вот команда, которая заставляет scheduler перечитать файлы дагов и обновить их представление в базе:

airflow dags reserialize

После ее выполнения scheduler перезапишет сериализованные даги в базе. Но веб-сервер все еще может показывать старые данные из своего кэша. Его кэш тоже нужно сбросить.

Вот так можно заставить webserver обновиться:

airflow dags list

Эта команда, запущенная на той же ноде, где работает веб-сервер, инвалидирует его кэш. Страница UI должна обновиться сама через несколько секунд, либо ее нужно перезагрузить вручную.

Если нужно совсем быстро

Стандартный интервал сканирования в 300 секунд — для прода это нормально. Но для разработки или тестов можно сделать его агрессивным.

Выставь переменную окружения для scheduler:

AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL=30

Или в airflow.cfg:

[scheduler]
dag_dir_list_interval = 30

Теперь scheduler будет проверять папку каждые 30 секунд. Вместе с командой reserialize это дает почти мгновенное обновление.

Что запомнить

Restart webserver — это архаичный способ, почти всегда излишний. Современный Airflow управляется через scheduler.

Порядок действий: вносишь изменения в файл дага, запускаешь airflow dags reserialize, затем airflow dags list. Обновляешь страницу UI. Все должно работать.

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