From 6f5f76fafbfe1766885dcd13615764a5d996dac8 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Fri, 7 Aug 2026 20:14:35 +0300 Subject: [PATCH] =?UTF-8?q?docs(stage-2):=20=D0=BF=D1=80=D0=B8=D1=91=D0=BC?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=8D=D1=82=D0=B0=D0=BF=D0=B0=202=20=E2=80=94?= =?UTF-8?q?=20=D1=81=D0=BD=D1=8F=D1=82=D1=8B=D0=B5=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20=D0=B8=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=20=D0=B4=D1=83=D0=B1=D0=BB=D1=8F?= =?UTF-8?q?=D0=BC=20Kafka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Зачем: этап 2 принят прогоном с нуля, и два его следа должны остаться в доках — иначе решение «не проверяем» станет забытым долгом, а цена цели разойдётся с замером. Что: - в спеке v2 раздел 11 больше не держит Kafka Engine на двух нодах: дубли и раскладку партиций между прогонами решено не проверять — дубль возможен по устройству движка, окно разобрано в доке хранилища, в ODS его схлопывает ReplacingMergeTree. Половина, которую показал #37, названа; - в карте проверок цена check-services 44 с -> 59 с и абзац с замерами приёмки: clean+up 2 м 58 с, смоук 9 с, check-clickhouse 8 с, test 71 с. Причина подорожания не выдумывается — названа неизвестной. Проверка: make clean && make up, затем make smoke, make check-clickhouse, make check-services, make lint, make typecheck, make test — всё зелёное 7 августа 2026 года. --- docs/architecture/testing.md | 17 +++++++++++++---- docs/specs/2026-07-30-stand-v2-realism.md | 12 ++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/architecture/testing.md b/docs/architecture/testing.md index 0c1569e..67f6cb3 100644 --- a/docs/architecture/testing.md +++ b/docs/architecture/testing.md @@ -30,8 +30,8 @@ ## Карта целей Стенд нужен трём целям из семи. Цена — замер, см. «Что проверено»: `make test`, -`make smoke` и `make check-clickhouse` перемерены 7 августа 2026 года, их #42 -менял; остальные три стоят с замера 6 августа. +`make smoke`, `make check-clickhouse` и `make check-services` перемерены +7 августа 2026 года на приёмке этапа 2; остальные три стоят с замера 6 августа. | Цель | Что утверждает | Стенд | Цена | |---|---|---|---| @@ -41,7 +41,7 @@ | `make config-test` | Compose разбирается, файлы DAG синтаксически целы, в diff нет пробельных ошибок. О работоспособности не говорит ничего | не нужен | 1 с | | `make smoke` | Стенд **собран**: службы живы, порты отвечают, подключения настроены друг на друга. Вширь и по касательной к каждой службе. Единственная цель, которая здесь правда смоук | нужен | 9 с | | `make check-clickhouse` | Всё, что спрашивают **у ClickHouse** и он отвечает сам: макросы, шарды, реплики, путь в keeper, ключ шардирования, очередь распределённых DDL, счёт событий стартового мира против описи | нужен | 8 с | -| `make check-services` | **Службы работают**: DAG запускается и доходит, топик создаётся и удаляется, Superset логинится и ходит в базу | нужен | 44 с | +| `make check-services` | **Службы работают**: DAG запускается и доходит, топик создаётся и удаляется, Superset логинится и ходит в базу | нужен | 59 с | Цена самого `make up` — 2 м 50 с с нуля (`make clean` перед ним — ещё 23 с) и 1 м 5 с на живом стенде. В цену целей она не входит, но записана здесь по той @@ -218,6 +218,15 @@ Kafka → STG → ODS, и живёт он в `make check-clickhouse`. смоук дал 8 секунд дважды (без проверки Kafka, до её появления, — 5 и 6), `check-services` — 43 и 44. В таблице стоит большее из замеренных. +Перемер 7 августа 2026 года — приёмка этапа 2 целиком: `make clean` и `make up` +подряд заняли 2 м 58 с и залили стартовый мир, дальше по порядку все три цели +на стенде и три без него. Смоук дал 9 секунд, `check-clickhouse` — 8, +`make test` — 71. `check-services` — 59 и 48; в таблицу по прежнему правилу +пошло большее. Против 44 секунд накануне цель подорожала, и причину назвать +нечем: между замерами и стартовый мир в хранилище, и холодный подъём перед +первым прогоном. Число здесь — замер с датой, а не бюджет, и повод разбираться +появится, когда за него кто-нибудь начнёт держаться. + До деления `scripts/stand-smoke.sh` шёл 48 секунд на 25 проверок, из них 42 секунды съедали шесть: Kafka с машины, два запуска пробников Airflow и три проверки Superset. После деления те же 25 проверок разошлись по двум целям: @@ -229,7 +238,7 @@ Superset, Prometheus и Grafana смоук стучится с машины в про Kafka после переезда знал только «контейнер здоров» — а это вердикт проверки состояния из `compose.yaml`, и та спрашивает брокер изнутри по внутреннему слушателю. Внешняя дверь оставалась непроверенной до -`check-services` с его 44 секундами, хотя генератор пишет в Kafka именно с +`check-services` с его минутой, хотя генератор пишет в Kafka именно с машины. Стоит проверка 2,6 секунды, и почти всё это — старт JVM в разовом контейнере; ожидание ответа ограничено пятнадцатью секундами, впятеро больше замеренного. diff --git a/docs/specs/2026-07-30-stand-v2-realism.md b/docs/specs/2026-07-30-stand-v2-realism.md index 93f96ca..97e6187 100644 --- a/docs/specs/2026-07-30-stand-v2-realism.md +++ b/docs/specs/2026-07-30-stand-v2-realism.md @@ -590,12 +590,16 @@ v2 стартует пустым, поэтому объём ниже — это хранилища](../architecture/storage.md), раздел «Что проверено»; запасной именованный кортеж — там же в [ADR 0005](../adr/0005-event-ingestion.md). +Kafka Engine на двух нодах снят с этого списка при приёмке этапа 2 (7 августа +2026 года) — проверенным наполовину и осознанно. Что обе ноды читают топик и +обе партиции доезжают, показал #37. Дубли и раскладку партиций между прогонами +решено не проверять: дубль здесь возможен по устройству движка, окно названо и +разобрано в [доке хранилища](../architecture/storage.md), а в ODS его схлопывает +`ReplacingMergeTree`. Проверять то, что заведомо случается и заведомо +обезврежено, — работа без ответа на конце. + - Поведение соединения двух Distributed-таблиц и `distributed_product_mode` — эмпирически на стенде (хвост #14). -- Kafka Engine на двух нодах в одной consumer group: ребаланс партиций между - прогонами, отсутствие дублей при штатной работе. Закрыто пока наполовину: что - обе ноды читают топик и обе партиции доезжают, показал #37; что дублей нет и - как раскладка меняется между прогонами — нет. - Размер артефакта эталонного мира после пересборки. - Спорные API (Airflow Datasets/сенсоры, ClickHouse DDL) — перед кодом сверять через MCP Context7 (правило AGENTS.md).