Чого насправді торкається видалення лічильника
Видалення лічильника тут очищає 33 таблиці. Учора очищало 25.
Ті вісім, які воно оминало, були створені напередодні — між 11:10 ранку та 15:10 дня.
Як працює видалення
Власник може видалити свій лічильник. Потрібні POST, власницький токен і номер лічильника, набраний вручну, бо назад дороги немає. Нічого не відкладається вбік: тіньова копія була б протилежністю прохання, а посилання на вивантаження стоять над кнопкою для всіх, кому вона потрібна.
Потім список таблиць очищається в одній транзакції, головна таблиця останньою, а в архів лягає надгробок, щоб номер ніколи не дістався комусь іншому. Якщо якась частина зривається, відкочується все. Нічого не видалено краще, ніж видалено наполовину.
Над цим списком, у файлі, написано:
«Кожна таблиця, яка щось знає про цей лічильник. Списком, а не врозсип по коду: чого тут бракує, залишиться осиротілим рядком, і ніхто цього не помітить.»
Він описав власний збій за день
Учора з'явилося шість нових таблиць для нової можливості — час на сторінці, глибина прокручування, сторінки виходу — і ще дві. Між 11:10 і 15:10.
Список видалення правили того самого дня, щоб вписати іншу нову таблицю. Вісім прийшли після, і список більше не ворухнувся. Отже, від учорашнього дня видалення лічильника лишало по собі 4 840 рядків поведінкових даних у восьми таблицях — тих, що належали людям, які просили про забуття.
Це не розповідь про недбалість. Хтось написав цей список, точно зрозумів, чому він список, записав, що буває, коли він відстає, — і того самого дня доповнив його однією таблицею. І список усе одно відстав, бо тримати дві речі в ногу, пам'ятаючи про це, — те, що люди роблять надійно рівно до того дня, коли не роблять.
Виправлення, і друге виправлення
Вісім імен тепер у списку. Їх вставили на абеткові місця, а не дописали в кінець, бо впорядкований список робить прогалину видимою, а список-із-дописками ні.
Це мале виправлення. Те, що важить, — сценарій, який питає базу, які таблиці несуть номер лічильника, читає список із вихідного файлу, а не повторює його, і порівнює одне з одним. Хто заводить таблицю, запускає його один раз. Його не можна забути так, як забувають список, бо він нічого не зберігає — він щоразу виводить відповідь зі схеми.
На першому прогоні він знайшов ще дещо: 25 рядків у восьми інших таблицях, чий номер лічильника не стоїть ані в живій таблиці, ані в архіві. Не видалені лічильники — ті лишають надгробок. Номери, що не належать нічому; більшість — очевидні тестові номери з часу до перевірки архіву. Їх записали у файл поза веб-каталогом і потім прибрали.
До чого це узагальнюється
Будь-який список, який треба тримати в ногу з чимось іншим, рано чи пізно з ноги вийде, і прогалина буде невидимою, бо список, у якому бракує запису, виглядає рівно як повний.
Захист — не дисципліна. Він у тому, щоб виводити один бік з іншого й перевіряти, що вони збігаються, — і запускати цю перевірку тієї миті, коли хтось додає річ, а не тієї, коли хтось замислюється.
Коментар над списком мав рацію в усьому, крім одного слова. Він сказав: ніхто не помітить. Хтось помітив, днем пізніше, бо пішов дивитися сценарієм, а не пам'яттю.