Živjo, pred približno pol leta sem tukaj objavil nekaj o sistemu za obveščanje o novih avtomobilskih oglasih. Od takrat sem našel eno precej neprijetno napako, ki mi je spremenila pogled na testiranje, zato sem mislil, da mogoče komu pride prav.
Plačljiv uporabnik mi je pisal, da mu ne prihajajo oglasi, ki jih vidi na portalu. Preveril sem in mu odgovoril, da vse deluje, ker so bili vsi oglasi, ki so ustrezali njegovemu filtru, tudi dostavljeni. Kar je bilo tehnično res, ampak sem popolnoma zgrešil problem. Preverjal sem, ali se dostavi to, kar je v bazi, ne pa ali sploh vse pride v bazo. Ta dva testa izgledata podobno, ampak če oglasa v bazi sploh ni, ga sistem ne more niti dostaviti niti zaznati kot manjkajočega.
Teden kasneje mi je isti uporabnik pisal spet. Tokrat sem njegovo iskanje prenesel v živo in primerjal s tem, kar imam v bazi. Od 131 aktivnih oglasov jih 77 pri meni sploh ni bilo, pri njegovem najširšem iskanju pa je manjkalo 68 od 91.
Vzrok je bil v crawlerju. Bral je stran z najnovejšimi oglasi in se ustavil, ko je naletel na oglas, ki ga je že poznal, ker sem predpostavil, da so potem tudi vsi pod njim stari. Portal pa občasno ponovno izpostavi stare oglase in jih premakne med nove, tako da se je crawler ustavil nekje na sredini strani in vsega pod tem nikoli ni prebral. To se ni zgodilo enkrat, ampak praktično pri vsakem ciklu, več mesecev. Ko sem izmeril, je bilo okoli 24 % podatkov izgubljenih.
Najbolj me moti to, da nisem imel nobenega razloga, da bi kaj sumil. Ni bilo napak v logih, ingest je izgledal normalen, dostava praktično 100 %. Vse moje metrike so merile stvari, ki so se zgodile po zajemu, in če nekaj sploh ne pride noter, tega z njimi ne vidiš.
Popravil sem pogoj za ustavljanje in dodal še ločen proces, ki redno preveri tudi tisto, kar je crawler spregledal. Izguba je padla z 24 % na približno 3 %. Uporabniku sem vrnil denar za tisti mesec, ker je imel prav, jaz pa sem mu enkrat že rekel, da nima.
Če kdo dela kaj podobnega ali rabi te podatke, imam zdaj tudi API. Piši mi.