Запускается периодически, проходится по триггерам и проверяет их состояние.
| Наименование | Критерий | Обработка |
| 1.1) Процесс удален или завершен. | - Экземпляра процесса нет в БД.
- Экземпляр процесса в статусе завершен.
| Триггер удаляется (если завершен, то напрямую, иначе - через событие). |
| 1.2) Каскад триггеров. Корневой триггер не найден / удален. | - Экземпляра коневого триггера нет в БД.
| Триггер удаляется. |
| 1.3) Каскад триггеров. Дочерний триггер не получил подтверждение доставки сигнала от корневого триггера (если используется подтверждение доставки сигнала). | - Дочерний триггер находится в состояние подтверждения ответа
и таймаут по дате отправки сигнала.
| Сигнал от дочернего триггера к корневому триггеру посылается повторно. |
| 1.4) Стрим триггер. Потеря события о том, что процесс перешел в режим ожидания события. | - В состоянии стрим триггера отображается, что процесс находится в состоянии асинхронного выполнения
и таймаут по дате резервирования. - Процесс находится в состоянии ожидания.
| Публикация на триггер события о необходимости перепроверить статус процесс. Событие - т.к. тут не берется блокировка на триггер и он может активно получать сигналы. |
| 2 Проверка зависания триггера. | Среди необработанных триггеров выбираем с блокировкой, пропускаю заблокированные. По следующему набору условий:- Не завершен.
- Не активирован.
- Не является корневым триггером.
- Таймаут по дате резервирования.
Например: зависший CounterTrigger или StreamTrigger, потеря события сигнала. | - Проверяем условие активации триггера.
(Предполагается, что триггер корректно реализовал проверку условия активации. В хендлер проверки передается флаг, что это вызов из EmergencyTrigger - точно нужна проверка (а не просто реакция на сигнал)). - Если требуется активация, то выполняем обработку триггера.
|