Второй перенос сайта идеалистов и падение SiteKnockerBot
Перенёс idealists.su на новый сервер, тот самый free tier от cloud.ru. Пока вроде всё работает нормально, и ещё даже целых 2.9 Гб оперативки доступно. Зато обнаружил, что проверяющая сайты часть SiteKnockerBot упала ещё 21 ноября. Стал разбираться, в чём дело. Обнаружилось, что когда-то давно для поля StatusUnchanged поменял в базе данных тип со smallint на integer (в этом поле хранится, сколько предыдущих проверок завершилось с тем же статусом, что и текущая), а в проверяющей части, написанной на go, так и оставил int16. (Причём совершенно не помню, когда и зачем такое вообще делал.) В результате нашёлся сайт, у которого этот показатель достиг 65536, что стало вызывать panic в драйвере работы с базой. В итоге на этом всё благополучно зацикливалось, после какого-то количества panic бот завершался с ошибочным кодом возврата, systemd запускал его вновь, и всё повторялось.
В общем, типичная ситуация: сначала промах в аналитике (не приходило в голову, что значения 216 может просто не хватить), потом — изменение (переход с MySQL на Postgres), породившее скрытую ошибку, потом — падение из-за того, что я не предусмотрел уведомлений о постоянных рестартах. (В systemd это сделано до жути криво — через необходимость создавать лишний unit. С другой стороны, так проще тестировать.)
Кстати, в процессе исправления обнаружил и другую проблему, которая, к счастью не успела «выстрелить». Очистка старых записей о проверках у меня была сделана не через cron, а через встроенный планировщик MySQL. Соответственно, после перехода на Postgres она перестала работать, и база выросла до почти десятка гигабайт.