Contactați asistența

Răspundem prin e-mail, de obicei în două zile.

Google reCAPTCHA verifică această trimitere împotriva abuzurilor; date sunt trimise către Google. Scriptul se încarcă doar când acest formular este deschis.

← Toate articolele

Ce atinge de fapt ștergerea unui contor

Ștergerea unui contor golește aici 33 de tabele. Ieri golea 25.

Cele opt pe care le omitea fuseseră create toate cu o zi înainte, între 11:10 dimineața și 15:10 după-amiaza.

33 de tabele conțin ceva despre un contor 8 dintre ele nu erau golite — toate create cu o zi înainte cele opt conțineau împreună 4.840 de rânduri adăugate azi la locul lor alfabetic, nu la sfârșit 25 de rânduri orfane găsite în alte tabele și eliminate

Cum funcționează ștergerea

Un proprietar își poate șterge contorul. Este nevoie de un POST, de tokenul proprietarului și de numărul contorului tastat de mână, pentru că nu există anulare. Nimic nu este pus deoparte: o copie ascunsă ar fi opusul a ceea ce s-a cerut, iar linkurile de export stau deasupra butonului pentru oricine vrea o copie.

Apoi o listă de tabele este golită într-o singură tranzacție, tabelul principal la urmă, iar o piatră funerară intră în arhivă, astfel încât numărul să nu poată fi dat niciodată altcuiva. Dacă orice parte eșuează, totul este anulat. Nimic șters este mai bine decât pe jumătate șters.

Deasupra acestei liste, în fișier, se află acest comentariu:

„Fiecare tabel care știe ceva despre acest contor. Ca listă, și nu împrăștiat prin cod: ce lipsește aici rămâne în urmă ca rând orfan și nimeni nu observă.”

Comentariul a descris golul cu o zi înainte să apară

Ieri au apărut șase tabele noi pentru o funcție nouă — timp pe pagină, adâncimea de derulare, pagini de ieșire — plus alte două. Între 11:10 și 15:10.

Lista de ștergere a fost modificată în aceeași zi, pentru a adăuga un alt tabel nou. Cele opt au apărut după aceea, iar lista nu s-a mai schimbat. Așa că, timp de o după-amiază, ștergerea unui contor a lăsat în urmă 4.840 de rânduri de date de comportament, împrăștiate în opt tabele. Golul a fost găsit a doua zi și închis; ce a scos la iveală este că lista avea nevoie de altceva decât memoria ca să rămână completă.

Aceasta nu este o poveste despre neglijență. Cineva a scris lista, a înțeles exact de ce era o listă, a notat ce se întâmplă când rămâne în urmă și a actualizat-o chiar în acea zi pentru un tabel. Și totuși a rămas în urmă, pentru că a ține două lucruri în pas bazându-te pe memorie este ceva ce oamenii fac în mod fiabil exact până în după-amiaza în care nu mai fac.

Reparația și cealaltă reparație

Cele opt nume sunt acum în listă. Au fost inserate la pozițiile lor alfabetice, nu adăugate la sfârșit, pentru că o listă sortată face vizibil un gol, iar una la care doar se adaugă la coadă nu.

Aceasta este reparația mică. Cea care contează este un script care întreabă baza de date ce tabele conțin un număr de contor, citește lista din fișierul sursă în loc să o repete și compară. Oricine adaugă un tabel îl rulează o dată. Nu poate fi uitat în felul în care poate fi uitată o listă, pentru că nu stochează nimic — deduce răspunsul din schemă de fiecare dată.

La prima rulare a găsit și altceva: 25 de rânduri în alte opt tabele al căror număr de contor nu se află nici în tabelul activ, nici în arhivă. Nu contoare șterse — acelea lasă o piatră funerară. Numere care nu aparțin nimănui, cele mai multe evident numere de test de dinainte să existe verificarea arhivei. Au fost scrise într-un fișier din afara rădăcinii web și apoi eliminate.

Ce se poate generaliza de aici

Orice listă care trebuie ținută în pas cu altceva va ieși până la urmă din pas, iar golul va fi invizibil, pentru că o listă căreia îi lipsește o intrare arată exact ca o listă completă.

Apărarea nu este disciplina. Este deducerea unei părți din cealaltă și verificarea că se potrivesc — iar verificarea se rulează în momentul în care cineva adaugă lucrul, nu în momentul în care cineva se întreabă.

Comentariul de deasupra listei avea dreptate în toate, cu excepția unui cuvânt. Spunea că nimeni nu observă. Cineva a observat, o zi mai târziu, pentru că a căutat cu un script în loc să caute cu memoria.

Publicitate