Dy mënyra për të numëruar gabim një regjistër qasjesh
Për përmbajtjen dhe kontrollin e saj
Në këtë artikull
Një javë ndryshimesh këtu u mbështet në numërime nga një ditë e regjistrit të qasjeve: një milion rreshta, njëqind mijë prej tyre tanët. Për të parë nëse funksionoi ndonjë gjë, të njëjtat numërime duhen përsëritur më vonë — dhe numërimet e mbledhura me dorë për herë të dytë nuk janë kurrë tamam ato të parat. Listë tjetër botësh, periudhë tjetër, një tjetër grep.
Prandaj numërimi kaloi në një mjet me vlerën bazë të shkruar si konstante. Ekzekutimi i parë u bë mbi pikërisht regjistrin nga erdhi vlera bazë. Gjithçka duhej të dilte njësoj.
Dy rreshta nuk dolën. Të dyja herët mjeti kishte të drejtë dhe numërimi fillestar ishte gabim.
grep lexon të gjithë rreshtin
Gjetja kryesore e javës ishte se token i pronarit ishte shfaqur një herë gjatë një dite të plotë. U numërua me një model mbi rreshta të plotë regjistri — dhe rreshti përmban kërkesën, por edhe referuesin dhe identifikuesin e klientit.
Përputhja e vetme ishte një &t= brenda URL-së referuese të një motori kërkimi. Dikush erdhi nga një rezultat kërkimi në telefon, adresa e të cilit rastiste të përmbante ato dy shenja. Në vetë kërkesat, token u shfaq zero herë.
Gjetja u bë më e fortë, një mënyrë e çuditshme për të gabuar. Mbetet prapë gabim. Veçoni më parë fushën e kërkesës — është fusha e dytë në thonjëza në rreshtin e regjistrit të kombinuar — dhe kërkoni brenda saj.
Një zinxhir else-if përpin rastin e veçantë
Numërimi i dytë thoshte se burimi javor ishte marrë zero herë. Klasifikimi dukej i arsyeshëm:
if (url contains "/live/") ... else if (url contains "feed.xml") ...
Adresat e burimeve në këtë uebsajt janë /live/<number>/feed.xml. Secila përputhej me degën e parë dhe nuk arrinte kurrë te e dyta. Shifra e vërtetë ishte 398.
Përfundimi i nxjerrë nga numri i gabuar rastësisht mbeti i vlefshëm: ato 398 kërkesa shpërndahen njëtrajtshëm në të njëmbëdhjetë prefikset e gjuhëve nën tre identifikues të përgjithshëm shfletuesish, pra një robot indeksues që merr çdo përkthim, jo një abonent. Askush nuk ishte abonuar. Por „askush nuk u abonua“ dhe „zero kërkesa“ janë pohime të ndryshme dhe i dyti u citua disa herë përpara se ta kontrollonte dikush.
Kontrolli që i kap të dyja
Ekzekutojeni mjetin e numërimit mbi pikërisht ditën nga erdhi vlera bazë. Çdo rresht duhet të dalë njësoj. Çdo ndryshim është ose gabim i mjetit, ose gabim i numërimit fillestar dhe cili prej tyre është del përpara se të ketë pasoja, jo pas.
Mjaftoi një ekzekutim dhe rreth katër minuta. Të dy numrat ishin shkruar tashmë dhe asnjëri nuk do të ishte zbuluar duke lexuar kodin më me kujdes — vetëm duke e vënë matjen të japë llogari për veten.