librarian: toleruj złe bajty w chunkach + jawne logowanie wysyłki wyników #4
Reference in New Issue
Block a user
Delete Branch "librarian-unicode-tolerance"
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?
Dwa braki odporności zgłoszone z produkcji (na bazie już zmergowanego fixa pętli).
1) UnicodeDecodeError zabijał producenta w połowie pliku
Zabłąkany nie-UTF-8 bajt w chunku (
0x96w zgłoszeniu) rzucałUnicodeDecodeErrorzreadline()— a toValueError, więc poprzedniexcept OSErrorgo nie łapał. Sentinel wfinallychronił przed zawieszeniem, ale producent ginął w połowie pliku z głośnym tracebackiem, a każdy DOI po feralnym bajcie nie był przeszukany.Naprawa: chunki otwierane z
errors="replace"(zły bajt → U+FFFD; DOI-e są ASCII, więc dopasowanie nigdy nie ucierpi) — plik czyta się do EOF;exceptproducenta rozszerzony zOSErrornaException, więc żaden błąd pojedynczego pliku nie wywali wątku — jest logowany, a sentinel i tak leci.2) Mechanizm zwrotu wyników — jawne logowanie + odporność
BackgroundTaskSearch._runloguje teraz dokładnie co wychodzi: URL docelowy, uuid, liczbę DOI i samą listę DOI — więc w logu librariana jawnie widać, że wynik został wysłany i co w nim było. Do tego nieudany POST nie jest już fatalny:RequestExceptionwylatywał z pętli workera i zabijał wątek, zawieszając każde kolejne zapytanie do restartu — teraz jest łapany i logowany, a nie-200 od bota logowane jako warning.Weryfikacja
tests/unit/test_search_bot.pydostaje przypadek: chunk z bajtem0x96przed poprawnym DOI, asercja że ten DOI jest znaleziony (plik czytany do końca, nie przerwany). Wszystkie 5 testówsearch_botprzechodzą.