LINUX.ORG.RU

История изменений

Исправление ziemin, (текущая версия) :

1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.

Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.

2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».

Лучше что бы он «присваивал» себе задачу.

3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»

Имхо лучше не любой, а контроль. Хотя...

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

А если узел быстро восстановился, он может забрать свои задачи себе.

upd:

Непонятно, что делать, если задача выполняется так долго, что по расписанию пора запустить ее опять.

Значит это неправильное расписание. Задача тут не при чём.

Исправление ziemin, :

1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.

Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.

2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».

Лучше что бы он «присваивал» себе задачу.

3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»

Имхо лучше не любой, а контроль. Хотя...

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

А если узел быстро восстановился, он может забрать свои задачи себе.

Исходная версия ziemin, :

1. Генерим по расписанию «ждущую» задачу, с таймстампом. По таймстампу можно проверять уникальность даже если часы разъехались.

Разрешение таймстампа 1с. А даже если возникновение задач разделено временем, используется его уникальность. Простой нарастающий счётчик обладает этим свойством.

2. Первый, кто успел, атомарно переносит задачу в редисе из сета «ждущих» в сет «выполняемых».

Лучше что бы он «присваивал» себе задачу.

3. Если задача долго висит в «выполняемых», значит все подвисло/упало, и любой может вернуть ее в «ждущие»

Имхо лучше не любой, а контроль. Хотя...

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