refactor(airflow): пробник ClickHouse разбит на четыре задачи
Зачем: пробник был одной задачей — в интерфейсе Airflow один красный квадрат, а место отказа приходилось искать по журналу. Ручная машинерия проброса и сведения ошибок занимала больше места, чем сама проверка, и читатель продирался через неё раньше, чем понимал, что пробник проверяет. Пробники — единственный образец DAG в стенде, по ним будут писать остальные. Что: test_clickhouse разбит на prepare_tables, write_marker, read_from_node_2 и cleanup_tables; маркер и имя принявшей запись ноды едут между задачами через XCom строками. Снято сведение ошибок: except BaseException, ExceptionGroup, add_note и накопление ошибок в список; клиент каждая задача заводит общим помощником и закрывает в finally. Ноды описаны константой NODES парами «имя для человека — источник для запроса», булев переключатель и параллельные списки подписей ушли. Уборка идёт обычным правилом запуска, а не all_done: состояние запуска Airflow считает по концам графа, и уборка, отработавшая после отказа, покрасила бы в зелёный запуск с упавшей проверкой — решение записано в ADR 0003. Комментарии остались в четырёх местах: чтение ноды 2 через remote(), импорт клиента внутри функции, правило запуска уборки и автосоздание топика в test_kafka. Малые проверки: заглушка task принимает обе формы декоратора, проверка сведения ошибок заменена проверками уборки. Красный путь ищет образец по журналам всех задач последнего запуска, а не в одном самом свежем. Проверка: make config-test, make smoke (25 проверок) и make smoke-guards зелены. Разбитый пробник укладывается в 5 секунд из 120, отведённых run_airflow_probe, — предел не трогаем. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+2
-2
@@ -9,6 +9,8 @@ import uuid
|
||||
from airflow.sdk import dag, get_current_context, task
|
||||
|
||||
BROKER = "kafka:9092"
|
||||
# Топик пробника постоянный, и стенд опирается на автосоздание: срок хранения
|
||||
# чистит записи, а не топик. В бою автосоздание обычно выключают.
|
||||
TOPIC = "airflow_integration_probe"
|
||||
|
||||
|
||||
@@ -32,8 +34,6 @@ def test_kafka():
|
||||
consumer = None
|
||||
|
||||
try:
|
||||
# Стенд опирается на автосоздание: срок хранения чистит записи, а
|
||||
# не топик; в бою автосоздание обычно выключают.
|
||||
delivery_errors: list[str] = []
|
||||
delivered_offsets: list[tuple[int, int]] = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user