[low] Avito detail abort: транзиентная не-block ошибка сбрасывает consecutive_blocks, маскируя продолжающийся IP-блок #1386

Closed
opened 2026-06-14 18:10:12 +00:00 by bot-backend · 0 comments
Collaborator

Описание

В Step 5 счётчик consecutive_blocks сбрасывается в 0 и при успехе (строка 316), и в общей ветке except Exception (строка 342). Если Avito rate-лимитит и вставляет транзиентную сетевую/parse-ошибку между блоками (block, block, timeout→reset 0, block, block, ...), early-abort >= 3 consecutive blocks никогда не срабатывает — пайплайн продолжает долбить rate-лимитированный IP вместо abort + mark_banned. Reset-on-success корректен; reset-on-generic-error — проблема.

Корень

Reset block-streak в неподходящей ветке. Generic except ловит ValueError (5xx, parse-фейлы), httpx.HTTPError, connection resets, timeouts — всё это правдоподобные побочки активного IP-блока (Avito не отдаёт единообразно 403/429). Компенсирующей логики ниже/выше нет, комментария-обоснования reset нет.

Evidence

scrape_pipeline.py:316-342:

except Exception as e:
    counters.detail_failed += 1
    counters.errors.append(f"detail {source_url}: {e}")
    logger.warning("pipeline:detail_enrich failed for %s: %s", source_url, e)
    consecutive_blocks = 0   # сбрасывает streak на НЕ-block ошибке

Suggested fix

Не сбрасывать consecutive_blocks в generic-exception ветке; сбрасывать только при подтверждённом успешном fetch. Generic-ошибки должны оставлять block-счётчик нетронутым (или вести отдельный error-счётчик), чтобы перемежающиеся транзиентные ошибки не маскировали устойчивый блок.

Обоснование severity (low)

Цикл всё равно завершится при исчерпании priority_rows, а чистый поток блоков (без перемежающихся generic-ошибок) корректно триггерит abort. Confidence 0.82.


week ревью 1 · multi-agent аудит 2026-06-14 · severity=low · category=logic

Затронутые файлы:

  • /Users/anton/Птица/gendesign/tradein-mvp/backend/app/services/scrape_pipeline.py
## Описание В Step 5 счётчик `consecutive_blocks` сбрасывается в 0 и при успехе (строка 316), и в общей ветке `except Exception` (строка 342). Если Avito rate-лимитит и вставляет транзиентную сетевую/parse-ошибку между блоками (block, block, timeout→reset 0, block, block, ...), early-abort `>= 3 consecutive blocks` никогда не срабатывает — пайплайн продолжает долбить rate-лимитированный IP вместо abort + mark_banned. Reset-on-success корректен; reset-on-generic-error — проблема. ## Корень Reset block-streak в неподходящей ветке. Generic `except` ловит ValueError (5xx, parse-фейлы), httpx.HTTPError, connection resets, timeouts — всё это правдоподобные побочки активного IP-блока (Avito не отдаёт единообразно 403/429). Компенсирующей логики ниже/выше нет, комментария-обоснования reset нет. ## Evidence `scrape_pipeline.py:316-342`: ```python except Exception as e: counters.detail_failed += 1 counters.errors.append(f"detail {source_url}: {e}") logger.warning("pipeline:detail_enrich failed for %s: %s", source_url, e) consecutive_blocks = 0 # сбрасывает streak на НЕ-block ошибке ``` ## Suggested fix Не сбрасывать `consecutive_blocks` в generic-exception ветке; сбрасывать только при подтверждённом успешном fetch. Generic-ошибки должны оставлять block-счётчик нетронутым (или вести отдельный error-счётчик), чтобы перемежающиеся транзиентные ошибки не маскировали устойчивый блок. ## Обоснование severity (low) Цикл всё равно завершится при исчерпании `priority_rows`, а чистый поток блоков (без перемежающихся generic-ошибок) корректно триггерит abort. Confidence 0.82. --- _week ревью 1 · multi-agent аудит 2026-06-14 · severity=**low** · category=`logic`_ Затронутые файлы: - `/Users/anton/Птица/gendesign/tradein-mvp/backend/app/services/scrape_pipeline.py`
bot-backend added the
week ревью 1
label 2026-06-14 18:10:12 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:01:56 +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#1386
No description provided.