Merge pull request 'Срок ответа OCR по умолчанию 5 → 20 мин (#87)' (#88) from feat/87-ocr-reply-timeout-20m into main

Reviewed-on: #88
This commit is contained in:
aep 2026-10-09 16:22:09 +03:00
commit 71e55b19ca
2 changed files with 6 additions and 4 deletions

View File

@ -84,10 +84,11 @@ from src.services.result_mapping import run_mapping_loop
WATCHDOG_PERIOD_SECONDS = 30 # период вахтёра сроков (spec «Таймаут ожидания результата») WATCHDOG_PERIOD_SECONDS = 30 # период вахтёра сроков (spec «Таймаут ожидания результата»)
PUBLISH_BATCH_SIZE = 50 # заданий за один проход публикатора (design D-6, LIMIT 50) PUBLISH_BATCH_SIZE = 50 # заданий за один проход публикатора (design D-6, LIMIT 50)
# Срок ответа сервиса, если задание создано без `reply_deadline`: OCR — 5 мин (DBML note), парсер — так же # Срок ответа сервиса, если задание создано без `reply_deadline`: OCR — 20 мин (решение владельца 09.10.2026; note DBML
# «OCR — 5 мин» устарела, OQ-159), парсер — 5 мин
DEFAULT_REPLY_TIMEOUT: dict[RecognitionPipeline, timedelta] = { DEFAULT_REPLY_TIMEOUT: dict[RecognitionPipeline, timedelta] = {
RecognitionPipeline.tabular: timedelta(minutes=5), RecognitionPipeline.tabular: timedelta(minutes=5),
RecognitionPipeline.image: timedelta(minutes=5), RecognitionPipeline.image: timedelta(minutes=20),
} }
REPUBLISH_COUNT_KEY = "republish_count" # счётчик повторов в `recognition_job.metrics` (design #6) REPUBLISH_COUNT_KEY = "republish_count" # счётчик повторов в `recognition_job.metrics` (design #6)

View File

@ -247,10 +247,11 @@ async def test_publish_request_to_service( # noqa: PLR0913,PLR0917 - фикст
assert request.s3.key == await jobs.s3_key(job_id) assert request.s3.key == await jobs.s3_key(job_id)
assert request.attempt == 1 assert request.attempt == 1
assert request.schema_version == "1.0" assert request.schema_version == "1.0"
# reply_deadline не был задан: вычислен при первой публикации (5 мин) и сохранён в задание # reply_deadline не был задан: вычислен при первой публикации (парсер — 5 мин, OCR — 20 мин) и сохранён в задание
assert job.reply_deadline is not None assert job.reply_deadline is not None
assert request.reply_deadline == job.reply_deadline assert request.reply_deadline == job.reply_deadline
assert timedelta(minutes=4) < job.reply_deadline - before < timedelta(minutes=6) expected = timedelta(minutes=20 if pipeline is RecognitionPipeline.image else 5)
assert expected - timedelta(minutes=1) < job.reply_deadline - before < expected + timedelta(minutes=1)
assert job.status is RecognitionStatus.published assert job.status is RecognitionStatus.published
assert job.request_msg_id == f"{job_id}:1" assert job.request_msg_id == f"{job_id}:1"