AURORA-1442: ручки возобновления обработки файла или версии консолидации, ручка обновления данных по осв #161
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/renew-processing-timeout"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ревью, раунд 1 (
4f44d34)По сути сделано хорошо: условия повтора, блокировки, outbox, FILE_REPROCESS и правка шапки ОСВ сходятся с правилами и DBML v5.21, интеграционные тесты зелёные.
Я докоммитил в ветку, сделай сначала
git pull:.env.testпорт 5432 и убрал вопрос изtest_config.py. Если у тебя локально другой порт, задавайOPENBAO__DATABASE__DATABASE_URLв окружении, она перекрывает.env.test;Что поправить в коде:
Пакетный повтор (
file_retry.py,retry_versionи_lock_files) блокирует задания и файлы всей консолидации, включая PROCESSED, SUPERSEDED и задания в полёте. Может словить дедлок с вахтёром:expire_deadlinesодним UPDATE берёт несколько просроченных заданий в произвольном порядке, а мы по возрастанию id. Плюс inbox по всей консолидации ждёт, пока идёт запрос, а вskippedпопадает каждый нормальный файл. Отфильтруй кандидатов поStoredFile.status == ERRORдо блокировки, перепроверку под блокировкой оставь. В спеке и §9.5 п. 13 уже так и записано: вskippedтолько ERROR-файлы, которые повторить нельзя.В одиночном повторе версии консолидации только читаются, а берутся
FOR UPDATEвсе, включая VERIFIED и CANCELLED. Читай без блокировки илиFOR SHARE, либо блокируй только версии «в работе».schema_versionв новом задании бериCONTRACT_VERSION, как при загрузке, а не из старого задания, иначе после смены контракта запись будет врать.request_subjectтоже лучше из настроек.files_repo._visible_files— приватная функция репозитория в сервисе. Вынеси отбор пакета вrepositories/files.py.RESPONSESвendpoints/files/retry.pyобщий на оба маршрута, поэтому в OpenAPI у пакета висят 409FILE_NOT_RETRYABLEиMAX_ATTEMPTS_REACHED, которых он не отдаёт. Разнеси на два набора.Комментарий «Мб достаточно только по RecognitionStatus?» в
_reasonубери. Пара (статус, error_code) правильная: timeout ставит только вахтёр с TIMEOUT, dlq только публикатор с NO_ACK.Ревью, раунд 2 (
622a60e)Все шесть пунктов первого раунда закрыты, проверил по коду и тестам.
Я докоммитил в ветку:
retryубрал лишнюю проверкуv.status in IN_WORK_STATUSES: версии уже отобраны по статусу в запросе.make check-fullзелёный, сливаю вместе с docs #157.