Проверки по назначению: честные имена целей, карта и быстрый смоук #54
Notifications
Due Date
No due date set.
Depends on
#56 Срезать проверки стенда: под нож всё, что не служит менти
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#54
Reference in New Issue
Block a user
Идёт после #56: там режется код, который иначе пришлось бы делить и
переименовывать здесь.
Цель
Три вещи одним движением.
Первая: вернуть
make smokeв разряд быстрых проверок — той, что гоняешь незадумываясь. Сейчас она идёт 48 секунд, и 42 из них съедают шесть проверок,
которые дёргают Airflow и Superset.
Вторая: дать целям честные имена. Цели на стенде зовутся
smokeиsmoke-cluster, и смоук-тест среди них один.smoke-clusterсоздаёт таблицы,гоняет распределённые DDL и проверяет репликацию; цель для служб будет
прогонять DAG-и от начала до конца и логиниться в Superset. Это интеграционные
проверки. Префикс достался им от общего происхождения из
scripts/stand-smoke.shи теперь значит «проверка на поднятом стенде», а не«смоук».
Третья, и она важнее: записать, зачем в репозитории каждая цель проверки.
Они выросли по одной, и по имени не понять ни что цель утверждает, ни куда
класть новую проверку. Правило «смоук — быстрый» тоже нигде не записано,
поэтому формально его ни разу не нарушили — и без записи скрипт дорастёт снова.
Замер
6 августа 2026 года, на поднятом стенде.
scripts/stand-smoke.sh— 48 секунд на 25 проверок:scripts/clickhouse-smoke.sh— 7 секунд на 8 проверок.Разметка
Ось — кого спрашивают. Быстрота выходит следствием, а не критерием:
ClickHouse отвечает сам и за миллисекунды, Airflow — через такт планировщика,
Superset — через сессию и обход метаданных.
make smokemake check-clickhouse(бывшаяsmoke-cluster)make check-services(новая)Проверка того, что совпадение цены и назначения здесь побочное:
smokeнезаметит перепутанных местами макросов
shard— обе ноды здоровы и портыотвечают.
check-clickhouseне заметит потерянного подключения Superset — онпро ClickHouse и только.
Дом для будущих проверок ось задаёт сама. Договор со схемой из #43 — вопрос к
ClickHouse, он и так едет в
scripts/clickhouse-smoke.sh. Счётчики противмини-манифеста из #42 — тоже вопрос к ClickHouse, а не «дополнение к смоуку»,
как записано в теле того тикета: данные в
ods.eventсчитает сам сервер, иотвечает он сразу.
Что войдёт
Новая цель
make check-services. В неё переезжают шесть проверок:check_kafka_from_host(одна), оба вызоваrun_airflow_probeвнутриcheck_airflow(две) иcheck_supersetцеликом (три: вход, метаданные сподключением,
test-db). Сколько проверок останется в смоуке — считатьпосле #56: состав там меняется.
В смоуке остаются все три лёгкие проверки
check_airflow: здоровье базыметаданных, планировщика и обработчика DAG (
scripts/stand-smoke.sh:478);«учётные данные приняты, оба пробника видны через API» (:504); «подключение
указывает на
clickhouse-01, нода отвечает изнутри контейнера» (:521). Онипро связность.
Переименование цели:
smoke-cluster→check-clickhouse.Цель
smoke-guardsпереименовывать не нужно — она удалена в #56 вместе сосвоим скриптом, и целей на стенде остаётся ровно три.
Правка механическая:
Makefile,README, документы. Имена файлов скриптовне трогаем:
scripts/clickhouse-smoke.shзанят веткой #43, переименование файла устроитконфликт на ровном месте. Расхождение имени цели и имени скрипта живёт до
следующего касания и отмечается в
testing.mdодной строкой.Разделение скрипта. Форма на усмотрение исполнителя (два скрипта или
один с режимом), но общие функции (
pass,fail,compose,published_port, уборка) не дублируются копипастой. У формы «один скрипт срежимом» есть ловушка: общий пролог прогонит
check_env_consistencyиcheck_host_dependenciesдважды и собьёт счёт проверок. У формы «дваскрипта»
check-servicesостанется без проверки зависимостей машины —решить, что с этим делать, тоже придётся.
Сторожевой части здесь нет. Сторожа удалены в #56 целиком, делить и
переписывать нечего.
docs/architecture/testing.md— новый файл по конвенции каталога, одинна зону ответственности. В нём карта всех целей проверки: что каждая
утверждает, нужен ли ей поднятый стенд, сколько стоит. Их станет шесть:
lint,typecheck,test(генератор, стенд не нужен),config-test(конфигурация и статика, стенд не нужен),
smoke,check-clickhouse,check-services.Оттуда же переезжает абзац, записанный в README по #56: проверка, которая не
умеет краснеть, бесполезна. Мысль остаётся, кода за ней больше нет.
Практическая мерка документа: по нему можно решить, куда класть новую
проверку, не читая скрипты. Ответ даёт ось — кого спрашивают.
Из
AGENTS.md— одна строка-указатель в разделе «Код и данные».Правило про быстрый смоук — там же, словами. Дословно:
Первый абзац — правило, второй — наблюдение, по которому тяжёлую узнают
заранее, не замеряя. Секунды в таблице целей — замеренная цена с датой
замера, а не назначенный порог.
Автоматического порога по времени не заводить. Число в проверке
становится законом, которого никто не выбирал: ADR 0004 разбирает ровно этот
случай — оценка из спеки попала жёстким порогом в
make smoke, и дальшерешения сверялись уже с порогом, а не с исходным доводом. Спека генератора
формулирует позицию прямо: «наблюдаемость без порогов»
(
docs/specs/2026-08-01-generator.md:354). Замер смоука при приёмке делаетсяруками и пишется в PR.
Смоук печатает своё время в строке
ИТОГ. Не порог и не проверка:спека генератора это уже обещает («
make upи smoke печатают тайминги»), аобещание не выполнено. Одна строка.
README. Описания целей и раздел «Какую проверку когда запускать»
переезжают в
testing.md: факт живёт в одном месте. В README остаютсябыстрый старт, две строки про обычный рабочий цикл и ссылка на карту;
лесенка по частоте в README не повторяется. Устаревшее уходит: «
make smoke— минута-две», «отсюда и три прогона
make smokeвнутри», перечислениепробников и Superset как части смоука.
Быстрый старт правится отдельно и осознанно: сейчас первый контакт — это
make up && make smoke, и после деления такая пара уже не покажет, чтоAirflow запускает DAG, а Superset ходит в базу. Первому запуску нужны все три
цели; экономия 42 секунд — про рабочую петлю, не про знакомство со стендом.
Лесенка по частоте — в
testing.md, чтобы деление не превратилось в«гонять всегда всё»:
config-test+smokecheck-services; DDL, кластер или данные —check-clickhousemake upс нуля и все три цели на стендеПланка приёмки этапа — строкой в спеку. Спека
(
docs/specs/2026-07-30-stand-v2-realism.md, подраздел «Этапы для/to-tickets») ставит планкой «
make upработает и проходят smoke-проверки».После деления и переименования эту фразу надо назвать поимённо —
smoke,check-clickhouse,check-services, — иначе планка тихо опустится при томже названии команды. Решение уровня спеки там и живёт; в
testing.md—операционная сторона.
Критерии приёмки
make smokeне осталось ни одной проверки, которая ждёт службу: низапуска DAG, ни входа в Superset, ни работы с Kafka с машины. Это видно по
составу, а не по секундомеру.
приёмке — руками, число в теле PR рядом с нынешними 48 секундами.
make check-servicesи там зелёные.make smokeиmake check-servicesравна тому, сколько их было до деления. Точное числоберётся после #56 — там состав смоука меняется — и называется в теле PR.
Единственное допустимое дублирование —
check_containers_survived: ею жезаканчивается
check-services, потому что стенд нагружает именно она(по ADR 0004 отказ по памяти во время пробников иначе не увидит никто).
Makefile,README.md, документы.make smoke-clusterбольше не существует.docs/architecture/testing.mdописывает все цели проверки, включаяте, что этот тикет не трогает: что утверждает, нужен ли стенд, сколько
стоит. Читатель по нему решает, куда класть новую проверку.
записаны там же; указатель из
AGENTS.mdстоит; README карту не дублирует.стенд, а не только собранный.
make config-test,make smoke,make check-clickhouse,make check-servicesзелёные.Границы
не переписывание. Проверка, которая после #56 ловит поломку, обязана ловить
её и завтра. Резать здесь больше нечего — это работа #56.
scripts/clickhouse-smoke.shне трогать: в него встраивается contract-тестиз #43. Описать его в документе и переименовать вызывающую цель — да;
править содержимое — нет.
make upв них не входит.Подводные камни
check_airflowдобывает токен(
scripts/stand-smoke.sh:488), и на нём же держатся видимость пробников исверка подключения. После переноса
check-servicesлогинится заново — инового
passна этот логин заводить не надо, иначе счёт не сойдётся.В смоуке остаются две переменные семейства
cleanup—airflow_cleanup_portиairflow_cleanup_token; имена стоит поправить, разуборки в смоуке больше нет.
cleanup_kafka_topic,cleanup_airflow_run,cleanup_airflow_pauseи ловушкиon_exit/on_signalобслуживают толькопереезжающие проверки. В смоуке ловушек не остаётся.
Сначала прочитать
scripts/stand-smoke.sh— 25 проверок и их устройство; имена функцийназваны выше.
scripts/clickhouse-smoke.sh— 8 проверок кластера; нужен, чтобы описатьцель в документе.
Makefile— все цели проверки разом.README.md— быстрый старт, описания целей и лесенка «какую проверку когдазапускать»: это и есть та карта, что переезжает.
docs/adr/0004-resource-limits.md— почему числа в проверки не заводят изачем нужна
check_containers_survived.docs/specs/2026-07-30-stand-v2-realism.md, подраздел «Этапы для/to-tickets» — планка приёмки этапа.
AGENTS.md— конвенции языка и структуры документов;docs/architecture/и его правило именования.
Проверка
Смоук снова быстрый: разрез на чтение состояния и приёмку стендаto Проверки по назначению: карта целей и быстрый смоукПроверки по назначению: карта целей и быстрый смоукto Проверки по назначению: честные имена целей, карта и быстрый смоукddmitry referenced this issue2026-08-06 15:31:46 +03:00