• Записи 1597
  • Теги 119
  • Комментарии 3400

Лог жизни

Второй перенос сайта идеалистов и падение 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 она перестала работать, и база выросла до почти десятка гигабайт.

Написать комментарий:

Написать комментарий
Прикрепить файлы: (не более 4 файлов, не более 102400 Кб каждый, 102400 Кб всего)


Задать вопрос