непокрытые секции доставки видны в статусе разбора
- половина потока (50 доставок из 104) не несёт metrics вовсе и до сих пор числилась parsed: ретеншен, поверив статусу, срезал бы тела stateOfMind, которых в экспорте Apple нет - разбор перечисляет верхнеуровневые ключи data, непокрытые проглатываются декодированием: тело 40 МиБ из непокрытой секции удерживает 0 МиБ - статус partial и колонка delivery.uncovered_sections; миграция переводит прежние parsed в pending — им верить нельзя - витрина не изменилась: отпечаток совпал с прогоном до изменения
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
-- +goose Up
|
||||
-- Секции тела, которых разбор не покрыл. JSON-массив имён (`["stateOfMind"]`),
|
||||
-- пустой список — `[]`.
|
||||
--
|
||||
-- Массивом, а не строкой с разделителем: имя ключа приходит из чужого тела и
|
||||
-- может содержать что угодно, включая пробел и запятую. JSON снимает вопрос
|
||||
-- разделителя, согласуется с колонкой headers и читается из SQLite через
|
||||
-- json_each, если ретеншену это понадобится.
|
||||
--
|
||||
-- Колонка — ответ на вопрос «что останется потерянным, если тело удалить».
|
||||
-- Для stateOfMind ответ необратим: в экспорте Apple его нет (находка 46),
|
||||
-- доставки HAE для него единственный источник.
|
||||
ALTER TABLE delivery ADD COLUMN uncovered_sections TEXT NOT NULL DEFAULT '[]';
|
||||
|
||||
-- Статус parsed, поставленный кодом, который частичного разбора не различал,
|
||||
-- ничего не доказывает: под ним лежат и полностью разобранные доставки, и
|
||||
-- доставки из одних тренировок с нулём точек (48 из 99 на живом архиве).
|
||||
-- Ретеншен, ради которого признак и заводится, поверил бы им и срезал тела.
|
||||
--
|
||||
-- pending — консервативный статус: ретеншен не трогает его никогда, а подбор
|
||||
-- pending пересвернёт доставки из архива. Свёртка идемпотентна, повторный
|
||||
-- прогон журнала состояния не меняет.
|
||||
--
|
||||
-- Целевой перевод только строк с points = 0 рассматривался и отвергнут: он
|
||||
-- опирается на наблюдение «секции не смешиваются», собранное за двое суток
|
||||
-- потока, а ставить на такое наблюдение необратимое удаление тел значит
|
||||
-- повторять ошибку, ради которой задача и заведена.
|
||||
UPDATE delivery SET parse_status = 'pending' WHERE parse_status = 'parsed';
|
||||
|
||||
-- +goose Down
|
||||
-- ВНИМАНИЕ: миграция односторонняя ПО ДАННЫМ. Down снимает колонку, но какие
|
||||
-- доставки были parsed, восстановить неоткуда — состояние пересобирается из
|
||||
-- архива, а не откатом. До появления подбора pending строки останутся в этом
|
||||
-- статусе.
|
||||
ALTER TABLE delivery DROP COLUMN uncovered_sections;
|
||||
Reference in New Issue
Block a user