Чего на самом деле касается удаление счётчика
Удаление счётчика здесь очищает 33 таблицы. Вчера очищало 25.
Те восемь, которые оно пропускало, были созданы накануне — между 11:10 утра и 15:10 дня.
Как работает удаление
Владелец может удалить свой счётчик. Нужны POST, владельческий токен и номер счётчика, набранный вручную, потому что назад дороги нет. Ничего не откладывается в сторону: теневая копия была бы противоположностью просьбы, а ссылки на выгрузку стоят над кнопкой для всех, кому она нужна.
Затем список таблиц очищается в одной транзакции, главная таблица последней, а в архив ложится надгробие, чтобы номер никогда не достался кому-то другому. Если какая-то часть срывается, откатывается всё. Ничего не удалено лучше, чем удалено наполовину.
Над этим списком, в файле, написано:
«Каждая таблица, которая что-то знает об этом счётчике. Списком, а не вразброс по коду: чего здесь не хватает, останется осиротевшей строкой, и никто этого не заметит.»
Он описал собственный отказ за день
Вчера появилось шесть новых таблиц для новой возможности — время на странице, глубина прокрутки, страницы выхода — и ещё две. Между 11:10 и 15:10.
Список удаления правили в тот же день, чтобы вписать другую новую таблицу. Восемь пришли после, и список больше не шевельнулся. Значит, со вчерашнего дня удаление счётчика оставляло за собой 4 840 строк поведенческих данных в восьми таблицах — принадлежащих людям, которые просили о забвении.
Это не рассказ о небрежности. Кто-то написал этот список, точно понял, почему он список, записал, что бывает, когда он отстаёт, — и в тот самый день дополнил его одной таблицей. И список всё равно отстал, потому что держать две вещи в ногу, помня об этом, — то, что люди делают надёжно ровно до того дня, когда не делают.
Исправление, и другое исправление
Восемь имён теперь в списке. Их вставили на алфавитные места, а не дописали в конец, потому что упорядоченный список делает пробел видимым, а список-с-дописками нет.
Это малое исправление. То, что важно, — сценарий, который спрашивает базу, какие таблицы несут номер счётчика, читает список из исходного файла, а не повторяет его, и сравнивает одно с другим. Кто заводит таблицу, запускает его один раз. Его нельзя забыть так, как забывают список, потому что он ничего не хранит — он каждый раз выводит ответ из схемы.
На первом прогоне он нашёл ещё кое-что: 25 строк в восьми других таблицах, чей номер счётчика не стоит ни в живой таблице, ни в архиве. Не удалённые счётчики — те оставляют надгробие. Номера, не принадлежащие ничему; большинство — очевидные тестовые номера из времени до проверки архива. Их записали в файл вне веб-каталога и затем убрали.
К чему это обобщается
Любой список, который надо держать в ногу с чем-то ещё, рано или поздно из ноги выйдет, и пробел будет невидим, потому что список, в котором не хватает записи, выглядит ровно как полный.
Защита — не дисциплина. Она в том, чтобы выводить одну сторону из другой и проверять, что они сходятся, — и запускать эту проверку в тот момент, когда кто-то добавляет вещь, а не в тот, когда кто-то задумывается.
Комментарий над списком был прав во всём, кроме одного слова. Он сказал: никто не заметит. Кто-то заметил, днём позже, потому что пошёл смотреть сценарием, а не памятью.