Исходный код вики Надежность триггеров
Редактировал(а) Alexandr Fokin 2026/07/28 15:08
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | |(% style="width:135px" %)EmergencyTrigger|(% style="width:1298px" %)((( |
| 2 | Запускается периодически, проходится по триггерам и проверяет их состояние. | ||
| |
1.3 | 3 | Гарантирует, что триггер в конечном счете будет обработан (даже в случае потери сигнала), но с большей задержкой по времени. |
| |
1.4 | 4 | Также частично выполняет функцию отчистки, если разработчик не удалил триггер или событие на удаление было утеряно. |
| |
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 | |||
| |
1.2 | 30 | Например: зависший CounterTrigger или StreamTrigger, потеря события сигнала. |
| |
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 |