Kontakt z pomocą

Odpowiadamy e-mailem, zwykle w ciągu dwóch dni.

Google reCAPTCHA sprawdza to zgłoszenie pod kątem nadużyć; dane trafiają do Google. Skrypt ładuje się dopiero po otwarciu formularza.

← Wszystkie wpisy

Kolumny, do których nic nie pisze

Główna tabela liczników ma tu 166 436 wierszy i kilka kolumn, które wyglądają, jakby miały znaczenie. Trzy z nich to lastdomain, firstdomain i userdomain. Zawierają dane:

lastdomainniepuste w 15 525 wierszach
firstdomainniepuste w 15 457 wierszach
userdomainniepuste w 2 982 wierszach

Nic do nich nie pisze. Żadna instrukcja w całym drzewie kodu nie ustawia żadnej z trzech. Wartości pochodzą z poprzedniej odsłony tego serwisu, zamrożone na tym, czym były, gdy przestała działać, a każdy wiersz utworzony od tamtej pory jest pusty.

Dlaczego to gorsze niż pusta kolumna

Kolumna zupełnie pusta jest oczywiście martwa. Nikt na niej nie buduje, nikt z niej nie raportuje, nikt nie spędza popołudnia, zastanawiając się, co znaczy.

Kolumna wypełniona dla 9 % wierszy to pułapka. Wygląda jak pole, które czasem jest wypełniane, a czasem nie — co dla kolumny jest rzeczą zupełnie zwyczajną. Kto ją znajdzie, rozsądnie wnioskuje, że istnieje reguła decydująca, kiedy się je ustawia, i zaczyna szukać reguły. Nie ma jej.

A przestarzałe wartości nie leżą na uboczu, na uśpionych wierszach, gdzie nie mogłyby nic zepsuć. Spośród wierszy niosących lastdomain 1 613 należy do liczników, które w tym roku były jeszcze aktualizowane. Żywy licznik z domeną zapisaną dekadę temu wygląda dokładnie jak żywy licznik z aktualną.

Gorzej: dane są wiarygodne. To domeny, wyglądają jak domeny liczników, a zapytanie łączące po nich zwraca wiersze. Odpowiadałoby na pytanie o sieć, która poszła dalej.

Jak to szybko stwierdzić

Szukaj zapisów, a nie nazwy. Nazwa kolumny pojawia się na listach SELECT, w zrzutach schematu, w starych migracjach, w komentarzach — a to wszystko niczego nie dowodzi. Rozstrzyga to, czy jakikolwiek INSERT albo UPDATE ją wymienia. To szukanie trwa minutę i jest ostateczne w sposób, w jaki czytanie wokół kodu nie jest.

Druga kontrola to same dane: jeśli najnowszy wiersz z wartością ma lata, kolumna jest skamieliną, cokolwiek zdaje się mówić kod.

Dlaczego wciąż tam są

Usunięcie kolumny jest tanie i nie jest darmowe. Każdy z tych wierszy należy do czyjegoś licznika, część z nich chodzi nieprzerwanie od 2006 roku, a bezpieczną czynnością przed zmianą schematu na takiej tabeli jest kopia, którą naprawdę raz odtworzyłeś, a nie tylko wytworzyłeś. Dopóki to się nie opłaca samo w sobie, trzy nieużywane kolumny nie kosztują nic poza zamętem.

Są więc zamiast tego udokumentowane. Nie ma oczywistego miejsca na tę notatkę — schemat tej bazy istnieje wyłącznie w działającej bazie, w żadnym pliku w repozytorium — więc trafiła tam, gdzie ktoś faktycznie się o nią potknie: do klasy czytającej wiersz licznika, dokładnie tam, gdzie te kolumny przechodzą obok. Notatka w pliku, którego nikt nie otwiera, nie jest dokumentacją. Zamienia pułapkę w przypis tylko wtedy, gdy leży na drodze.

Reklama