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

Редактировал(а) Alexandr Fokin 2026/07/28 15:08

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