Кроны из whenever в...
 
Уведомления
Очистить всё

Кроны из whenever в Solid Queue: на двух серверах задача не задвоится?

3 Сообщения
2 Пользователи
0 Реакции
247 Просмотры
karina_sor
Сообщения: 6
Автор темы
Дружит с bundler бэкенд-разработчица
Присоединился: 4 года назад
[#79]

Rails 8.0, два сервера приложения. Кроны сейчас через whenever, и чистка корзин настроена только на одном сервере, потому что на обоих отработала бы дважды. Хотим перенести всё в recurring-задачи Solid Queue:

production:
  cleanup_carts:
    class: CleanupCartsJob
    schedule: every day at 3am

Но планировщик будет запущен на обоих серверах. Не получу ли я ту же двойную чистку?


2 ответа
pavel_1988
Сообщения: 8
Разобрался с блоками разработчик
Присоединился: 3 года назад

Не получите. Каждый запуск recurring-задачи планировщик записывает в отдельную таблицу с уникальным индексом по ключу задачи и времени запуска, в той же транзакции, что и постановку джобы. Второй планировщик пытается вставить ту же пару, упирается в уникальность и молча пропускает. Мы так живём на трёх серверах, двойных запусков не было ни разу. Но саму джобу чистки я бы всё равно делал идемпотентной, на случай ручного запуска.


Ответ
karina_sor
Сообщения: 6
Автор темы
Дружит с bundler бэкенд-разработчица
Присоединился: 4 года назад

Перенесли. Неделю смотрела в solid_queue_recurring_executions: каждая задача раз в сутки, без дублей. whenever удалили.


Ответ