Как предотвратить крайние случаи или задержку для крайнего срока запланированной задачи? - PullRequest
0 голосов
/ 06 ноября 2019

Предположим, в будущем у меня запланировано событие с start_date, end_date (включительно), timezone и status. Даты настенные, так как пользователи из разных мест с разными часовыми поясами. Будут входящие транзакции, и я хотел бы проверить правильность этих транзакций по статусу задачи.

Если задание имеет статус active, то оно все еще действует. Я планирую настроить задание cron (или ActiveJob в Rails), которое будет запускаться каждые 15 минут, чтобы проверить, была ли задача уже запущена или завершена в соответствии с настройкой timezone пользователя, и обновить поле status.

Проблема состоит в том, что предположим, что для задания end_date задано 15 декабря, а задание cron начинается ровно в 16 декабря 00:00, когда задание должно быть уже истекло, а заданию cron требуется приблизительно 2 минуты для завершения задания. вся база данных. Затем status будет обновлен до inactive в 16 декабря 00:02. Если в 16 декабря 00:01 происходит транзакция, а затем приложение проверяет действительность по номеру status, который все еще равен active, но фактически он уже истек крайний срок.

Есть какие-нибудь идеи, как бороться с этой проблемой?

Кстати, хотя само приложение не очень серьезное и может допускать некоторые несоответствия, я все еще беспокоюсь о несоответствии данных при запросах, так какв допустимом диапазоне дат будут отсутствовать некоторые точки данных.

1 Ответ

0 голосов
/ 06 ноября 2019

Cron не будет работать, поскольку он создает проблему, которую вы описываете, но с помощью activejob вы можете указать точную дату и время запуска https://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job

Кстати, если что-то зависит от даты,почему вы на самом деле не проверяете эту дату вместо столбца "status"?

...