reindex: пересборка витрины проигрыванием журнала
- `healthlog reindex` собирает витрину из журнала (тела архива + учёт доставок) в ОТДЕЛЬНЫЙ файл базы, строго по `(received_at, id)`; рабочую базу читает без наката миграций и не трогает вовсе. Подмену делает человек при остановленном сервисе: переименование поверх открытого дескриптора портит базу молча. - Журналом считается архив, а не таблица доставок: тело без учётной записи заводится заново (метка из ULID, размер и хеш по распакованному телу), запись без тела переносится, но не сворачивается. Оракул сходимости встроен — два отпечатка и «объектов было/стало»; пустой журнал успехом не считается. - Прогон живого архива переехал на новый пакет: второго проигрывателя журнала в проекте не осталось, а его утверждение о ключе сна перестало быть константой, протухающей с каждой доставкой.
This commit is contained in:
+9
-8
@@ -15,13 +15,14 @@
|
||||
недифференцированной кучей. Блокеры, накопившиеся из ревью, разобраны — их в
|
||||
беклоге ноль.
|
||||
|
||||
Дальше — **`reindex`**, и он сейчас срочнее остального остатка разбора. После
|
||||
миграции 00005 доставки числятся `pending`, а подобрать их некому: код
|
||||
пересборки не написан. Данные целы (тела в архиве, объекты в витрине), но
|
||||
учёт честно говорит «этим разбором не смотрели», и так будет, пока пересборки
|
||||
нет. Тем же кодом закрывается половина задачи «разнести ответ и свёртку».
|
||||
**`reindex` сделан**: журнал проигрывается в свежую витрину, отпечатки
|
||||
сравниваются, повторный прогон ничего не меняет. Доставки, числящиеся `pending`
|
||||
после миграции 00005, подбираются им же — но применяется результат подменой
|
||||
базы, а её делает человек при остановленном сервисе. Тем же кодом закрывается
|
||||
половина задачи «разнести ответ и свёртку»: проигрывание журнала теперь готовая
|
||||
операция.
|
||||
|
||||
Потом — остаток разбора: тренировки и записи со своими `id` (это половина
|
||||
Дальше — остаток разбора: тренировки и записи со своими `id` (это половина
|
||||
потока: `workouts` и `stateOfMind` принимаются и хранятся, но не разбираются),
|
||||
словарь категориальных значений.
|
||||
|
||||
@@ -32,8 +33,8 @@
|
||||
|
||||
- [x] **1. Каркас.**
|
||||
- [x] **2. Приём без разбора.** ← **подключаем телефон по локальной сети**
|
||||
- [~] **3. Разбор и хранилище.** Метрики — сделано; тренировки и записи со
|
||||
своими `id`, `reindex` и словарь категориальных значений — нет.
|
||||
- [~] **3. Разбор и хранилище.** Метрики и `reindex` — сделано; тренировки и
|
||||
записи со своими `id`, словарь категориальных значений — нет.
|
||||
- [ ] **4. Каталог и род агрегации.**
|
||||
- [ ] **5. Read API.**
|
||||
- [ ] **6. Самоописание.**
|
||||
|
||||
Reference in New Issue
Block a user