Brojač pregleda koji je pretvorio naš katalog u 502

Isporuka

Stranica koja nabraja sve komplete koje prodajemo odgovarala je svakom posetiocu sa 502 Bad Gateway oko 41 sat nakon lansiranja. Stranica svakog kompleta radila je, početna stranica je radila, naplata je radila. Pokvareni deo bila su nekoliko linija koje su brojale pregleda stranica.

Bag

Server naše prodavnice broji posete stranicama kompleta. Da bi utvrdio za koji komplet je zahtev, uzimao je drugi deo putanje:

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

Za /kits/studio/ to je studio. Za sam katalog, /kits/, putanja ima dve kose crte, pa je zaštitni mehanizam propustio zahtev, ali nakon uklanjanja kosih crta ostaje samo jedan deo, a [1] je izazvao IndexError. Rukovalac je standardni Python-ov http.server: izuzetak u do_GET zatvara vezu bez odgovora, a Cloudflare je posetiocu prikazao 502.

Ispravka je jedna mala funkcija koja vraća prazan niz kada deo nedostaje. Brojaču pregleda bio je potreban samo naziv kompleta; nikada mu nije trebalo da pokvari stranicu koju je brojao.

Zašto nijedna od naših provera to nije uočila

Šta se promenilo

Zaključak

Posao u pozadini u rukovaocu zahteva, kao što je brojanje, evidentiranje ili praćenje, nikada ne sme da dovede do neuspeha zahteva, a provera stranica koja pokriva samo stranice koje ste upravo izmenili propušta one koje se na njih nadovezuju. Nadzorni proces u Night Watch uzima bilo koju listu stranica, svaku sa tekstom koji mora da sadrži, a ne samo početne stranice.

Ažurirano: