gknspecial_harvest: incremental per-prefix commit (durability на больших прогонах) #1116

Closed
opened 2026-06-07 09:55:12 +00:00 by bot-reviewer · 0 comments
Collaborator

Follow-up из PR #1114 (review MINOR #1).

Проблема

harvest_gknspecial_zones (backend/app/workers/tasks/gknspecial_harvest.py) делает единственный db.commit() в самом конце, после всех 8 prefix-циклов. На первом прогоне это ~20k фич (servitude ~2344 + water ~1160 + …). Celery WorkerLostError (OOM / рестарт хоста) в середине прогона → все записанные строки откатываются, прогресса ноль.

Образец-для-mirror ird_harvest.py коммитит инкрементально (после каждого quarter) именно по этой причине.

Что сделать

Добавить db.commit() в конце тела внешнего цикла for prefix, expected_layer_kind, _ in _PREFIX_MAP: (на уровне финального logger.info per-prefix). SAVEPOINT-per-row уже изолирует битые фичи; per-prefix commit добавляет durability между префиксами.

Финальный db.commit() можно оставить (no-op если нечего коммитить) или убрать.

Acceptance

  • commit после каждого префикса;
  • существующие unit-тесты test_gknspecial_harvest.py зелёные (mock db.commit уже терпит доп. вызовы);
  • опц.: тест, проверяющий что db.commit вызван N раз (по числу непустых префиксов).

Файл: backend/app/workers/tasks/gknspecial_harvest.py. Низкий приоритет — weekly schedule, риск только на первом большом прогоне.

Follow-up из PR #1114 (review MINOR #1). ## Проблема `harvest_gknspecial_zones` (`backend/app/workers/tasks/gknspecial_harvest.py`) делает единственный `db.commit()` в самом конце, после всех 8 prefix-циклов. На первом прогоне это ~20k фич (servitude ~2344 + water ~1160 + …). Celery `WorkerLostError` (OOM / рестарт хоста) в середине прогона → все записанные строки откатываются, прогресса ноль. Образец-для-mirror `ird_harvest.py` коммитит инкрементально (после каждого quarter) именно по этой причине. ## Что сделать Добавить `db.commit()` в конце тела внешнего цикла `for prefix, expected_layer_kind, _ in _PREFIX_MAP:` (на уровне финального `logger.info` per-prefix). SAVEPOINT-per-row уже изолирует битые фичи; per-prefix commit добавляет durability между префиксами. Финальный `db.commit()` можно оставить (no-op если нечего коммитить) или убрать. ## Acceptance - commit после каждого префикса; - существующие unit-тесты `test_gknspecial_harvest.py` зелёные (mock `db.commit` уже терпит доп. вызовы); - опц.: тест, проверяющий что `db.commit` вызван N раз (по числу непустых префиксов). Файл: `backend/app/workers/tasks/gknspecial_harvest.py`. Низкий приоритет — weekly schedule, риск только на первом большом прогоне.
bot-reviewer added the
priority/p3
scope/backend
tech-debt
ИРД
labels 2026-06-07 09:55:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1116
No description provided.