---
name: zemlya-slow-check-overpass-gap
description: "ЗБР: 40 из 58 секунд проверки — молчаливые таймауты Overpass мимо кэша; счётчики показывали object=0.4с, в логе ни строки"
metadata: 
  node_type: memory
  type: project
  originSessionId: d0c6c5aa-4d05-42e2-a1f9-034482b88603
  modified: 2026-08-01T22:44:48.044Z
---

**2026-08-02, «Земля без риска».** Замер на 78:11:0613401:1066: `Timing object=0.43с market=10.5с post=6.5с`, а фактически **58.8с**. Сорок секунд не попадали ни в один счётчик и не оставляли в логе ни строки.

**Причина.** `find_nearby_settlement_names` (Overpass, гонка трёх зеркал, бюджет 12с) на пути «никто не ответил» делал `return names` **раньше** строки, кладущей результат в кэш, и ничего не логировал. Значит неудача: стоила все 12с, не запоминалась, повторялась. Внутри одной проверки функция зовётся минимум трижды — сборка запросов Avito (r=12000), Яндекс (r=12000), CIAN (r=5000).

**Тонкость, которую я сначала пропустил:** отметку провала мало проверять до захвата single-flight-замка. Avito и Яндекс зовут с ОДНИМ ключом одновременно, оба проходят проверку до замка, дальше замок их выстраивает в очередь — и второй платит свои 13с уже после того, как первый записал провал. В логе это видно как два одинаковых предупреждения на +14с и +27с. Проверять надо и до, и **под** замком.

**Кэшируем только успехи на диск.** Отрицательный результат — в памяти и с TTL 10 минут, иначе временный сбой навсегда превратится в «тут населённых пунктов нет».

**Сам Overpass с mini доступен** (curl 0.4–5.7с) — а из бота не отвечал никогда; причина ниже. Радикальное решение на будущее всё равно есть: брать имена НП из своего OSM-индекса (он уже лежит на мини, `local POI index`), а не ходить наружу — зеркала отвечают ~10с даже когда отвечают.

**Рядом, чинилось отдельно:** `Avito curl_cffi: HTTP 403` на каждом запросе — см. [[avito_qrator_blocks_chrome_fingerprint]].

**РАЗГАДКА (в тот же день).** Причина таймаутов — **HTTP 406 за 0.1с**, и виноват `User-Agent`. Замер по одному заголовку за раз на `lz4.overpass-api.de`:

- дефолтные заголовки aiohttp → 406;
- `+ Accept: */*` → 406;
- `+ User-Agent` **браузера** (Chrome) → 406;
- `+ User-Agent: zemlya-bez-riska/1.0 (+https://zbrcheck.ru)` → **200**;
- тот же UA `+ Accept: */*` → **200 за 1.8с**.

Overpass требует UA, называющий приложение, и отбивает 406-м и безымянных клиентов, и тех, кто прикидывается браузером (их usage policy). `curl` проходил, потому что честно представлялся `curl/8.x`. **Единственный способ пройти — перестать выдавать себя за браузер.** В гонке трёх зеркал два отваливались мгновенным 406, третий не отвечает вовсе — бюджет выгорал целиком, всегда.

Побочно: на диск кладутся только успехи, а успехов не бывало — персистентный кэш соседних НП стоял пустым всё время, и в сборку поисковых запросов всегда приходил пустой список. После правки: Томск 1.5с/29 имён, СПб 5.1с/33 имени; total холодного прогона 35.9с против 58.8с.

**Обобщение:** если в логе тишина, это не «быстро» — это отсутствие инструментирования. И: 406 от чужого API проверяют перебором ОДНОГО заголовка за раз, а не заменой всего набора сразу.

См. [[deployed_is_not_running]], [[zemlya_web_overview]].
