У нас есть топология шторма, которая взаимодействует с базой данных MariaDB. Наши болты реализуют интерфейс IRichBolt
и переопределяют методы жизненного цикла. Мы открываем соединение БД в нашем методе prepare
и закрываем его в методе cleanup
.
Документация по методу cleanup
гласит:
Вызывается, когда IBolt будет остановлен. Нет гарантии, что очистка будет вызвана, потому что супервизор уничтожает рабочие процессы -9 в кластере.
Единственный контекст, в котором гарантированно вызывается очистка, - это уничтожение топологии при запуске Storm в локальном режиме
И команда kill -9
убивает процесс без очистки ресурсов. Таким образом, мы пришли к выводу, что при уничтожении топологии необязательно вызывать метод cleanup
и соединение БД будет закрыто.
Итак, переходя к моему вопросу, у нас есть сценарий оболочки для развертывания топологии, который при выполнении уничтожает текущую топологию с таймаутом 0 и развертывает новую топологию. На уровне базы данных мы сталкиваемся с проблемой открытия многих соединений, что дает нам понять, что предыдущие соединения не были закрыты. (Открытая в предыдущей топологии).
Правильно ли наше предположение? Будет ли увеличение таймаута очищать все ресурсы?