Wat een teller verwijderen werkelijk aanraakt
Een teller hier verwijderen leegt 33 tabellen. Gisteren leegde het er 25.
De acht die het miste, waren allemaal de dag ervoor aangemaakt, tussen 11:10 in de ochtend en 15:10 in de middag.
Hoe het verwijderen werkt
Een eigenaar kan zijn teller verwijderen. Het vraagt om een POST, het token van de eigenaar, en het nummer van de teller met de hand ingetypt, want ongedaan maken kan niet. Er wordt niets apart gezet: een schaduwkopie zou het tegendeel zijn van wat gevraagd is, en de exportlinks staan boven de knop voor wie er een wil.
Daarna wordt een lijst tabellen in één transactie geleegd, de hoofdtabel als laatste, en gaat er een grafsteen het archief in zodat het nummer nooit aan iemand anders gegeven kan worden. Mislukt er een deel, dan draait het geheel terug. Niets verwijderd is beter dan half verwijderd.
Boven die lijst staat in het bestand dit commentaar:
"Elke tabel die iets over deze teller weet. Als lijst en niet verspreid door de code: wat hier ontbreekt, blijft als wezenregel achter, en niemand merkt het."
Het commentaar beschreef het gat een dag voordat het openging
Gisteren verschenen er zes nieuwe tabellen voor een nieuwe voorziening — tijd op de pagina, scrolldiepte, uitstappagina's — samen met twee andere. Tussen 11:10 en 15:10.
De verwijderlijst is diezelfde dag bewerkt om een andere nieuwe tabel toe te voegen. De acht kwamen daarna, en de lijst is niet meer bewogen. Eén middag lang liet een teller verwijderen dus 4.840 regels gedragsgegevens achter, verspreid over acht tabellen. Het gat is de volgende dag gevonden en gedicht; wat het blootlegde, is dat de lijst iets anders dan geheugen nodig had om compleet te blijven.
Dit is geen verhaal over slordigheid. Iemand schreef de lijst, begreep precies waarom het een lijst was, schreef op wat er gebeurt wanneer ze achterop raakt, en werkte haar diezelfde dag voor één tabel bij. En toch raakte ze achterop, want twee dingen in de pas houden door eraan te denken is iets wat mensen betrouwbaar doen tot precies de middag waarop ze het niet doen.
De oplossing, en de andere oplossing
De acht namen staan nu in de lijst. Ze zijn op hun alfabetische plaats ingevoegd in plaats van achteraan geplakt, want een gesorteerde lijst maakt een gat zichtbaar en een lijst die alleen groeit niet.
Dat is de kleine oplossing. De oplossing die ertoe doet, is een script dat de database vraagt welke tabellen een tellernummer dragen, de lijst uit het bronbestand leest in plaats van hem te herhalen, en vergelijkt. Wie een tabel toevoegt, draait het één keer. Het kan niet vergeten worden zoals een lijst dat kan, want het bewaart niets — het leidt het antwoord elke keer opnieuw uit het schema af.
Het vond bij de eerste ronde nog iets: 25 regels in acht verdere tabellen waarvan het tellernummer noch in de levende tabel noch in het archief staat. Geen verwijderde tellers — die laten een grafsteen achter. Nummers die bij helemaal niets horen, de meeste ervan duidelijke testnummers van voordat de archiefcontrole bestond. Ze zijn naar een bestand buiten de webmap geschreven en daarna verwijderd.
Waar dit in het algemeen op neerkomt
Elke lijst die in de pas moet blijven met iets anders, raakt uiteindelijk uit de pas, en het gat zal onzichtbaar zijn, want een lijst waarin een vermelding ontbreekt, ziet er precies zo uit als een complete lijst.
De verdediging is geen discipline. Het is de ene kant uit de andere afleiden en nakijken of ze het eens zijn — en die controle draaien op het moment dat iemand het ding toevoegt, niet op het moment dat iemand zich iets afvraagt.
Het commentaar boven de lijst had over alles gelijk op één woord na. Er stond dat niemand het merkt. Iemand merkte het, één dag later, want die ging zoeken met een script in plaats van met zijn geheugen.