Надежность триггеров

Версия 1.3 от Alexandr Fokin на 2026/07/28 15:06

EmergencyTrigger

Запускается периодически, проходится по триггерам и проверяет их состояние.
Гарантирует, что триггер в конечном счете будет обработан (даже в случае потери сигнала), но с большей задержкой по времени.

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

Например: зависший CounterTrigger или StreamTrigger, потеря события сигнала.

  1. Проверяем условие активации триггера.
    (Предполагается, что триггер корректно реализовал проверку условия активации. В хендлер проверки передается флаг, что это вызов из EmergencyTrigger - точно нужна проверка (а не просто реакция на сигнал)).
  2. Если требуется активация, то выполняем обработку триггера.