AURORA-1442: ручки возобновления обработки файла или версии консолидации, ручка обновления данных по осв #161

Merged
aep merged 8 commits from feat/renew-processing-timeout into main 2026-10-23 17:19:22 +03:00
Owner
No description provided.
tsygankoviva added 1 commit 2026-10-22 14:26:27 +03:00
tsygankoviva requested review from PotapovaA 2026-10-22 14:30:00 +03:00
tsygankoviva requested review from aep 2026-10-22 14:30:00 +03:00
aep added 3 commits 2026-10-22 16:13:49 +03:00
Свой порт задаётся переменной OPENBAO__DATABASE__DATABASE_URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PATCH osv-header без fixtures: порядок ошибок, no-op, original_values, сброс
подтверждения и отвязка, аудит, DUPLICATE_ACCOUNT, неизменность osv_entry.
Пакет: смешанный (OCR и исчерпанный лимит в skipped), NO_ACK на пределе.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Дельта data-model переименована на v5.21, пакет — только файлы в ERROR,
tasks — ссылки на docs PR #157 и задачи ревью; config.yaml — DBML v5.21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner

Ревью, раунд 1 (4f44d34)

По сути сделано хорошо: условия повтора, блокировки, outbox, FILE_REPROCESS и правка шапки ОСВ сходятся с правилами и DBML v5.21, интеграционные тесты зелёные.

Я докоммитил в ветку, сделай сначала git pull:

  • вернул в .env.test порт 5432 и убрал вопрос из test_config.py. Если у тебя локально другой порт, задавай OPENBAO__DATABASE__DATABASE_URL в окружении, она перекрывает .env.test;
  • синтетические тесты на PATCH шапки (без fixtures они раньше все пропускались) и пару сценариев пакета;
  • поправил change, README и CLAUDE.md под v5.21, правила и гайд фронта — в docs PR #157.

Что поправить в коде:

  1. Пакетный повтор (file_retry.py, retry_version и _lock_files) блокирует задания и файлы всей консолидации, включая PROCESSED, SUPERSEDED и задания в полёте. Может словить дедлок с вахтёром: expire_deadlines одним UPDATE берёт несколько просроченных заданий в произвольном порядке, а мы по возрастанию id. Плюс inbox по всей консолидации ждёт, пока идёт запрос, а в skipped попадает каждый нормальный файл. Отфильтруй кандидатов по StoredFile.status == ERROR до блокировки, перепроверку под блокировкой оставь. В спеке и §9.5 п. 13 уже так и записано: в skipped только ERROR-файлы, которые повторить нельзя.

  2. В одиночном повторе версии консолидации только читаются, а берутся FOR UPDATE все, включая VERIFIED и CANCELLED. Читай без блокировки или FOR SHARE, либо блокируй только версии «в работе».

  3. schema_version в новом задании бери CONTRACT_VERSION, как при загрузке, а не из старого задания, иначе после смены контракта запись будет врать. request_subject тоже лучше из настроек.

  4. files_repo._visible_files — приватная функция репозитория в сервисе. Вынеси отбор пакета в repositories/files.py.

  5. RESPONSES в endpoints/files/retry.py общий на оба маршрута, поэтому в OpenAPI у пакета висят 409 FILE_NOT_RETRYABLE и MAX_ATTEMPTS_REACHED, которых он не отдаёт. Разнеси на два набора.

  6. Комментарий «Мб достаточно только по RecognitionStatus?» в _reason убери. Пара (статус, error_code) правильная: timeout ставит только вахтёр с TIMEOUT, dlq только публикатор с NO_ACK.

Ревью, раунд 1 (4f44d34) По сути сделано хорошо: условия повтора, блокировки, outbox, FILE_REPROCESS и правка шапки ОСВ сходятся с правилами и DBML v5.21, интеграционные тесты зелёные. Я докоммитил в ветку, сделай сначала `git pull`: - вернул в `.env.test` порт 5432 и убрал вопрос из `test_config.py`. Если у тебя локально другой порт, задавай `OPENBAO__DATABASE__DATABASE_URL` в окружении, она перекрывает `.env.test`; - синтетические тесты на PATCH шапки (без fixtures они раньше все пропускались) и пару сценариев пакета; - поправил change, README и CLAUDE.md под v5.21, правила и гайд фронта — в docs PR #157. Что поправить в коде: 1. Пакетный повтор (`file_retry.py`, `retry_version` и `_lock_files`) блокирует задания и файлы всей консолидации, включая PROCESSED, SUPERSEDED и задания в полёте. Может словить дедлок с вахтёром: `expire_deadlines` одним UPDATE берёт несколько просроченных заданий в произвольном порядке, а мы по возрастанию id. Плюс inbox по всей консолидации ждёт, пока идёт запрос, а в `skipped` попадает каждый нормальный файл. Отфильтруй кандидатов по `StoredFile.status == ERROR` до блокировки, перепроверку под блокировкой оставь. В спеке и §9.5 п. 13 уже так и записано: в `skipped` только ERROR-файлы, которые повторить нельзя. 2. В одиночном повторе версии консолидации только читаются, а берутся `FOR UPDATE` все, включая VERIFIED и CANCELLED. Читай без блокировки или `FOR SHARE`, либо блокируй только версии «в работе». 3. `schema_version` в новом задании бери `CONTRACT_VERSION`, как при загрузке, а не из старого задания, иначе после смены контракта запись будет врать. `request_subject` тоже лучше из настроек. 4. `files_repo._visible_files` — приватная функция репозитория в сервисе. Вынеси отбор пакета в `repositories/files.py`. 5. `RESPONSES` в `endpoints/files/retry.py` общий на оба маршрута, поэтому в OpenAPI у пакета висят 409 `FILE_NOT_RETRYABLE` и `MAX_ATTEMPTS_REACHED`, которых он не отдаёт. Разнеси на два набора. 6. Комментарий «Мб достаточно только по RecognitionStatus?» в `_reason` убери. Пара (статус, error_code) правильная: timeout ставит только вахтёр с TIMEOUT, dlq только публикатор с NO_ACK.
PotapovaA approved these changes 2026-10-23 10:42:53 +03:00
tsygankoviva added 1 commit 2026-10-23 13:40:05 +03:00
aep added 2 commits 2026-10-23 17:09:12 +03:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v5.22 структуру БД не меняет (comment.object_type: убраны chess_cell и
kfo_result_line из описания), миграция не нужна.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 1 commit 2026-10-23 17:19:14 +03:00
Owner

Ревью, раунд 2 (622a60e)

Все шесть пунктов первого раунда закрыты, проверил по коду и тестам.

Я докоммитил в ветку:

  • влил main;
  • поднял версию ORM до DBML v5.22 (структура не меняется, только ссылки и тесты сверки);
  • в retry убрал лишнюю проверку v.status in IN_WORK_STATUSES: версии уже отобраны по статусу в запросе.

make check-full зелёный, сливаю вместе с docs #157.

Ревью, раунд 2 (622a60e) Все шесть пунктов первого раунда закрыты, проверил по коду и тестам. Я докоммитил в ветку: - влил main; - поднял версию ORM до DBML v5.22 (структура не меняется, только ссылки и тесты сверки); - в `retry` убрал лишнюю проверку `v.status in IN_WORK_STATUSES`: версии уже отобраны по статусу в запросе. `make check-full` зелёный, сливаю вместе с docs #157.
aep merged commit 4d3e596337 into main 2026-10-23 17:19:22 +03:00
Sign in to join this conversation.
No Reviewers
No Label
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#161
No description provided.