Обработка перезапуска / сбоя системы между сменой флага - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующий сценарий

  1. Изменить флаг = начало (в базе данных)
  2. Выполнить некоторую обработку
  3. Обновить флаг обратно до Готово(в базе данных)

Предположим, что система выходит из строя во время шага 2. В идеале, я хотел бы установить флажок обратно на Завершено.Но из-за сбоя системы этого не происходит, и он заходит в тупик для этой задачи.

Какие стандартные решения / подходы / алгоритмы используются для решения такого сценария?

Править: Как возникает тупик? Задача будет выбрана только в том случае, если Флаг = Закончен.Флаг = начало означает, что он находится в процессе чего-то.Поэтому, когда происходит сбой, задача не завершается, но флаг также не устанавливается на Завершить после запуска системы.Так что задание больше не будет выбрано.

1 Ответ

0 голосов
/ 25 августа 2018

Я не вижу здесь простого решения.

Если время выполнения ваших задач достаточно предсказуемо, вы можете сохранить отметку времени начала выполнения задачи в вашей БД и вернуть задачу в «пустое» состояние (еще не запущено) по истечении времени ожидания.

Или выможет хранить идентификатор процесса в вашей БД и реализовать процесс супервизора, который запустит ваши процессы «исполнителя» и проверит их код выхода.В случае сбоя процесса супервизор «переинициализирует» все задачи, помеченные идентификатором сбойного процесса.

...