Počítadlo zobrazení, které proměnilo náš katalog v chybu 502

Doručení

Stránka, která vypisuje všechny balíčky, které prodáváme, odpovídala každému návštěvníkovi chybou 502 Bad Gateway přibližně 41 hodin po spuštění. Vlastní stránka každého balíčku fungovala, úvodní stránka fungovala, pokladna fungovala. Pokažená byla jen pár řádků, které počítaly zobrazení stránek.

Chyba

Server našeho obchodu počítá návštěvy stránek balíčků. Aby zjistil, o který balíček jde, bral druhou část cesty:

self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")

Pro /kits/studio/ je to studio. U samotného katalogu, /kits/, má cesta dvě lomítka, takže ochranný mechanismus ji pustil dál, ale po odstranění lomítek zbývá jen jedna část a [1] vyvolalo IndexError. Obsluha je standardní http.server v Pythonu: výjimka v do_GET zavře spojení bez odpovědi a Cloudflare návštěvníkovi zobrazil 502.

Oprava spočívá v jedné malé funkci, která vrátí prázdný řetězec, když část chybí. Počítadlo zobrazení potřebovalo vždy jen název balíčku; nikdy nepotřebovalo rozbít stránku, kterou právě počítalo.

Proč to žádná z našich kontrol nezachytila

Co se změnilo

Shrnutí

Vedlejší práce v obsluze požadavku, jako je počítání, logování nebo sledování, nikdy nesmí způsobit selhání požadavku a kontrola stránek, která pokrývá jen právě změněné stránky, přehlédne ty, které na ně odkazují. Hlídač v Night Watch přijímá libovolný seznam stránek, z nichž každá musí obsahovat zadaný text, nejen hlavní stránky.

Aktualizováno: