Исходный код вики Надежность триггеров

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

Скрыть последних авторов
Alexandr Fokin 1.1 1 |(% style="width:135px" %)EmergencyTrigger|(% style="width:1298px" %)(((
2 Запускается периодически, проходится по триггерам и проверяет их состояние.
Alexandr Fokin 1.3 3 Гарантирует, что триггер в конечном счете будет обработан (даже в случае потери сигнала), но с большей задержкой по времени.
Alexandr Fokin 1.1 4
5 |(% style="width:405px" %)**Наименование**|(% style="width:405px" %)**Критерий**|(% style="width:875px" %)**Обработка**
6 |(% style="width:405px" %)1.1) Процесс удален или завершен.|(% style="width:405px" %)(((
7 * Экземпляра процесса нет в БД.
8 * Экземпляр процесса в статусе завершен.
9 )))|(% style="width:875px" %)Триггер удаляется (если завершен, то напрямую, иначе - через событие).
10 |(% style="width:405px" %)1.2) Каскад триггеров. Корневой триггер не найден / удален.|(% style="width:405px" %)(((
11 * Экземпляра коневого триггера нет в БД.
12 )))|(% style="width:875px" %)Триггер удаляется.
13 |(% style="width:405px" %)1.3) Каскад триггеров. Дочерний триггер не получил подтверждение доставки сигнала от корневого триггера (если используется подтверждение доставки сигнала).|(% style="width:405px" %)(((
14 * Дочерний триггер находится в состояние подтверждения ответа
15 и таймаут по дате отправки сигнала.
16 )))|(% style="width:875px" %)Сигнал от дочернего триггера к корневому триггеру посылается повторно.
17 |(% style="width:405px" %)1.4) Стрим триггер. Потеря события о том, что процесс перешел в режим ожидания события.|(% style="width:405px" %)(((
18 * В состоянии стрим триггера отображается, что процесс находится в состоянии асинхронного выполнения
19 и таймаут по дате резервирования.
20 * Процесс находится в состоянии ожидания.
21 )))|(% style="width:875px" %)Публикация на триггер события о необходимости перепроверить статус процесс.
22 Событие - т.к. тут не берется блокировка на триггер и он может активно получать сигналы.
23 |(% style="width:405px" %)2 Проверка зависания триггера.|(% style="width:405px" %)Среди необработанных триггеров выбираем с блокировкой, пропускаю заблокированные. По следующему набору условий:(((
24 * Не завершен.
25 * Не активирован.
26 * Не является корневым триггером.
27 * Таймаут по дате резервирования.
28
Alexandr Fokin 1.2 29 Например: зависший CounterTrigger или StreamTrigger, потеря события сигнала.
Alexandr Fokin 1.1 30 )))|(% style="width:875px" %)(((
31 1. Проверяем условие активации триггера.
32 (Предполагается, что триггер корректно реализовал проверку условия активации. В хендлер проверки передается флаг, что это вызов из EmergencyTrigger - точно нужна проверка (а не просто реакция на сигнал)).
33 1. Если требуется активация, то выполняем обработку триггера.
34
35
36 )))
37 )))
38 |(% style="width:135px" %) |(% style="width:1298px" %)
39
40