librarian: chwilowy timeout Crossrefa nie kasuje już wyszukania #22
Reference in New Issue
Block a user
Delete Branch "librarian-crossref-resilience"
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?
Co się stało (z Twojego loga)
I tu był prawdziwy problem: mój handler crasha traktował to jak poison pill i robił
_forget_search()— czyli kasował całe wyszukanie, a watchdog mówił userowi "zeżarło". Wszystko dlatego, że publiczne API mrugnęło raz.Dwa zabezpieczenia
cr.works()idą przez_crossref_callz liniowym backoffem (CONJURER_CROSSREF_ATTEMPTS, domyślnie 4;CONJURER_CROSSREF_BACKOFF, 5s). habanero opakowuje błędy httpx w zwykłyRuntimeError, więc nie da się filtrować wąsko — retry jest po prostu ograniczony, a ostatni błąd re-raise'owany. Przy okazji: lecą teraz przezasyncio.to_thread, więc wolny Crossref nie blokuje pętli zdarzeń workera.CONJURER_SEARCH_MAX_ATTEMPTS(domyślnie 3). W trakcie ponawiania zostajequeueddla watchdoga bota (user nie dostaje fałszywego "zeżarło"). Dopiero po wyczerpaniu prób — odpuszczamy.Przy okazji
Got blocked. Fuck.ze scrape_bota to normalne zachowanie sci-huba (backoff godzinę i lecimy dalej) → zERRORnaWARNING, żeby przestało udawać awarię, gdy przeglądasz log w poszukiwaniu prawdziwych problemów.Testy
retry-i-sukces, ograniczony re-raise, brak retry przy sukcesie, trwały licznik prób, forget-po-poddaniu-się. Suite: 58 unit + 70 integration zielone.
🤖 Generated with Claude Code