fix(stand): находки ревью — диагноз не утверждает причину, комментарии не врут
Зачем Холодное ревью нашло три места, где написанное сильнее сделанного. Что - Непустая таблица брака больше не выдаётся за доказательство сломанного разбора. Модельного дня у брака нет, обрамить его нечем, и строки прежних уроков лежат в нём месяц: после первого же урока с мусором проверка давала бы неверный диагноз навсегда. Теперь она даёт признак, по которому причину отличают, — сошлась недостача с числом брака или нет. - Комментарий у world-init обещал, что расхождение числа дней с STARTING_DAYS поймают счётчики. Это неправда в одну сторону: лишний день ложится за рамкой дат описи. Обещание убрано, дыра названа. - Довод «даг next_day этапа 5 продолжит ось» опирался на несуществующий этап; заменён настоящей причиной — заливка замыкает цепь разовых служб. - Потолок ожидания 300 с получил обоснование замером с кратностью, а сам скрипт — честную оговорку: его обещание работает на пустом стенде, на живом ждать нечего. - Третья, пропущенная ссылка на снятый порог скорости дня убрана из спеки. - Даты замеров в карте целей разведены: #42 менял три цели, а не шесть. Проверка Обе ветви диагноза сняты заново на живом стенде: без брака — «не доехали», с браком — признак различения. Стенд восстановлен, все 9 проверок зелёные, брака 0. make lint, typecheck, config-test, test (407 тестов) зелёные. Ссылка: #42
This commit is contained in:
@@ -94,6 +94,11 @@ on_signal() {
|
||||
# Таблица брака здесь не второе утверждение, а объяснение первого. Утверждай мы
|
||||
# «брака нет», проверка краснела бы навсегда после первого же урока, где менти
|
||||
# нарочно отправил в топик мусор, — и краснела бы не о том.
|
||||
#
|
||||
# По той же причине непустой брак сам по себе ничего не доказывает: модельного
|
||||
# дня у брака нет, обрамить его нечем, и строки прежних уроков лежат в нём
|
||||
# месяц. Поэтому объяснение не утверждает причину, а даёт признак, по которому
|
||||
# её отличают: сошлась недостача с числом брака — разбор, не сошлась — доставка.
|
||||
check_starting_world() {
|
||||
local expected actual broken first_date last_date
|
||||
|
||||
@@ -122,11 +127,11 @@ check_starting_world() {
|
||||
FORMAT TSV")"
|
||||
printf 'Опись мира ожидает (дата, событий):\n%s\n' "$expected" >&2
|
||||
printf 'В ods.event лежит:\n%s\n' "${actual:-— ничего —}" >&2
|
||||
if [[ -n "$broken" ]]; then
|
||||
printf 'В ods.event_errors по классам брака:\n%s\n' "$broken" >&2
|
||||
fail 'счёт разошёлся с описью, и в таблице брака есть строки: сломан разбор — начните с ods.event_errors_dist и матвью ods.event_mv'
|
||||
if [[ -z "$broken" ]]; then
|
||||
fail 'счёт разошёлся с описью, а таблица брака пуста: события не доехали до ODS — начните с чтеца топика stg.hits_raw_kafka и матвью приёма stg.hits_raw_mv'
|
||||
fi
|
||||
fail 'счёт разошёлся с описью, а таблица брака пуста: события не доехали до ODS — начните с чтеца топика stg.hits_raw_kafka и матвью приёма stg.hits_raw_mv'
|
||||
printf 'В ods.event_errors по классам брака:\n%s\n' "$broken" >&2
|
||||
fail 'счёт разошёлся с описью, и в таблице брака есть строки. Сойдётся недостача с их числом — сломан разбор, смотрите матвью ods.event_mv; не сойдётся — брак остался от прежних опытов, а события не доехали: смотрите чтеца топика stg.hits_raw_kafka'
|
||||
}
|
||||
|
||||
assert_ddl_queue_completed() {
|
||||
|
||||
@@ -15,10 +15,19 @@
|
||||
# брака. Сломайся разбор — события уедут в `*_errors`, сумма сойдётся, ожидание
|
||||
# кончится, и поломку назовёт `make check-clickhouse`. Ждать здесь одних годных
|
||||
# событий значило бы висеть пять минут вместо внятного ответа.
|
||||
#
|
||||
# Обещание у скрипта ровно одно и только на пустом стенде: «мир доехал». На
|
||||
# живом стенде мир уже лежит в ODS, условие истинно на первой же попытке, и
|
||||
# ждать тут нечего — повторная заливка ничего не добавляет, её схлопнет
|
||||
# дедупликация. Утверждать после неё «доехала именно эта заливка» скрипт не
|
||||
# может и не пытается: у события нет отметки, которым прогоном оно приехало.
|
||||
set -Eeuo pipefail
|
||||
|
||||
readonly ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
readonly INVENTORY="${ROOT_DIR}/data/world-inventory.json"
|
||||
# Потолок ожидания — 300 с: больше чем вдесятеро от замеренных 22,5 с, за
|
||||
# которые заливка отдаёт восемь дней в Kafka (карта проверок, «Что проверено»).
|
||||
# Это не бюджет, а предел, за которым ждать бессмысленно и надо читать журнал.
|
||||
readonly ATTEMPTS=100
|
||||
readonly PAUSE_SECONDS=3
|
||||
# Как часто отчитываться о ходе: молчащая минуту команда выглядит зависшей.
|
||||
|
||||
Reference in New Issue
Block a user