Qué toca realmente borrar un contador
Borrar un contador aquí vacía 33 tablas. Ayer vaciaba 25.
Las ocho que se saltaba se habían creado el día anterior, entre las 11:10 de la mañana y las 15:10 de la tarde.
Cómo funciona el borrado
El dueño puede borrar su contador. Hace falta un POST, el identificador del dueño y el número del contador escrito a mano, porque no hay vuelta atrás. No se aparta nada: una copia en la sombra sería lo contrario de lo que se pidió, y los enlaces de exportación están encima del botón para quien quiera una.
Después se vacía una lista de tablas en una sola transacción, la tabla principal al final, y una lápida va al archivo para que el número no pueda ir jamás a otra persona. Si alguna parte falla, todo se deshace. Nada borrado es mejor que medio borrado.
Encima de esa lista, en el archivo, está esto:
«Cada tabla que sabe algo de este contador. Como lista y no repartido por el código: lo que falte aquí se queda como fila huérfana, y nadie se entera.»
Describió su propio fallo con un día de antelación
Ayer aparecieron seis tablas nuevas para una función nueva — tiempo en página, profundidad de desplazamiento, páginas de salida — y otras dos. Entre las 11:10 y las 15:10.
La lista de borrado se editó ese mismo día, para añadir otra tabla nueva. Las ocho llegaron después, y la lista ya no se movió. Así que desde ayer por la tarde, borrar un contador dejaba atrás 4.840 filas de datos de comportamiento, repartidas por ocho tablas, pertenecientes a personas que habían pedido ser olvidadas.
Esta no es una historia sobre descuido. Alguien escribió la lista, entendió exactamente por qué era una lista, dejó escrito qué pasa cuando se queda atrás — y la actualizó ese mismo día para una tabla. Y aun así se quedó atrás, porque mantener dos cosas al paso a base de acordarse es algo que las personas hacen de forma fiable hasta la tarde en que no.
El arreglo, y el otro arreglo
Los ocho nombres ya están en la lista. Se insertaron en su lugar alfabético en vez de añadirse al final, porque una lista ordenada hace visible un hueco y una lista de añadidos no.
Ese es el arreglo pequeño. El que importa es un script que pregunta a la base de datos qué tablas llevan un número de contador, lee la lista del archivo fuente en vez de repetirla, y compara. Quien añada una tabla lo ejecuta una vez. No se puede olvidar como se olvida una lista, porque no guarda nada — deduce la respuesta del esquema cada vez.
En su primera ejecución encontró algo más: 25 filas en otras ocho tablas cuyo número de contador no está ni en la tabla viva ni en el archivo. No son contadores borrados — esos dejan lápida. Números que no pertenecen a nada, la mayoría números de prueba evidentes de antes de que existiera la comprobación del archivo. Se escribieron en un archivo fuera del directorio web y luego se eliminaron.
A qué se generaliza esto
Cualquier lista que haya que mantener al paso con otra cosa acabará desacompasándose, y el hueco será invisible, porque una lista a la que le falta una entrada tiene exactamente el mismo aspecto que una completa.
La defensa no es la disciplina. Es deducir un lado del otro y comprobar que concuerdan — y ejecutar esa comprobación en el momento en que alguien añade la cosa, no en el momento en que alguien se pregunta.
El comentario encima de la lista acertaba en todo menos en una palabra. Decía que nadie se entera. Alguien se enteró, un día después, porque fue a mirar con un script en vez de con su memoria.