Є у мене один давній страх: що код який безспосередньо взаємодіє з користувачем, наприклад відправлення повідомлення через бот, зациклиться і почне надсилати тисячі однакових повідомлень.
Тому у всіх таких місцях я обкладаюсь транзакціями, локами, роблю так щоб результат виконання операції зберігався та гаратовано виконувався не більше 1 разу і так далі.
Вчора писав код який відправляє щодня подяки користувачам @Donate1024Bot:
def perform
Lock.find_by(key: "gratitude").with_lock do
next if Gratitude.where(is_sent: true).exists?(["date(updated_at) = date(?)", DateTime.now.utc])
Gratitude.where(is_sent: false).first&.send_to_users
end
end
Але страх все одно не відпускає. Кожного разу очкую що якийсь крон завтра спрацює не та як треба і юзерам прилетить одне й те саме декілька разів, або прилетить не тим юзерам шо треба а всім, або ще якась халепа трапиться.
Характерно, що халепа досі не траплялась.
Експерти по психоаналізу можуть розібрати цю фобію у коментах👇
Експерти по паралельному програмуванню можуть знайти помилку в коді🧐
Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred