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