- находки 48 и 49: единицы не менялись ни разу; настоящих столкновений 0.65%, несравнимых наборов полей нет, тай-брейк берёт меньшее в 96% случаев - edinicy-metriki-v-razreze закрыт: гипотеза не подтвердилась замером - тай-брейк отложен до каталога рода агрегации
4.2 KiB
Непокрытые секции доставки видны в статусе разбора
Приоритет: высокий
Была блокером, вынутым ревью кода задачи razbor-metrik-v-obekty (профиль
deep, проход негативного пространства). Решение принято — ниже задача.
Что не так сегодня
Разбор читает только data.metrics. Доставка, состоящая из workouts,
stateOfMind, symptoms или ecg, помечается parse_status=parsed с нулём
точек — неотличимо от доставки с пустой секцией метрик.
Само по себе некритично: секции пока не разбираются сознательно, тела лежат в
архиве. Опасность в сцепке с ретеншеном. Ретеншен по замыслу срезает архив
до следующего проверенного экспорта. Если он будет ориентироваться на
parse_status, он снесёт тела, которые числятся разобранными, — а для
stateOfMind это необратимо: в экспорте Apple его нет (находка 46),
доставки HAE для него единственный источник.
Цена ошибки здесь не «придётся пересобрать», а «истории состояния разума больше не существует».
Что решено
Вариант (1): разбор возвращает список верхнеуровневых ключей data, которые
он не покрыл; статус доставки — partial.
Почему он, а не альтернативы:
- Считать
parsedтолько полностью разобранную доставку, а остальные держать вpending— дёшево, ноpendingперестаёт означать «ещё не смотрели», и подбор зависших доставок теряет свой признак. А подборpendingкак раз появляется задачей otvet-i-svyortka. - Запретить ретеншену смотреть на
parse_status— нулевая цена сейчас, но ретеншен становится тупым и не защищает от «тело разобрано неверно, а мы его уже срезали».
Список непокрытых ключей — дешёвая честность, и он же закрывает задачу «не пропустить момент, когда поедет новая секция».
Что делать
hae.Parse: перечислить верхнеуровневые ключиdataи вернуть те, что разбор не покрыл. Одинjson.Decoderпо верхнему уровню, без чтения содержимого — секции доходят до десятков МиБ.- Статус
partialрядом сparsed/failed; миграция, если статус хранится ограниченным набором. - Свёртка пишет непокрытые ключи в исход доставки и логирует их один раз — именами ключей, без содержимого.
- Тест на фикстуре с секцией, которой разбор не знает: статус
partial, ключ в списке, точки метрик при этом сохранены.
Связано
- retenshen-syrogo-arhiva — решить до неё.
- proverka-novyh-sekcij — тот же признак закрывает и её: момент появления новой секции становится событием в логе.
- trenirovki-i-zapisi — по мере разбора секций список непокрытых сокращается сам.