Как перенести неудачный / зависший рабочий процесс на новую версию после исправленной ошибки?

Насколько я понимаю, если ошибка была в Activity, будет использоваться новый код, поскольку Activity не имеет концепции версии. Но что, если в коде рабочего процесса есть ошибка, вызывающая сбой некоторых рабочих процессов (или, что еще хуже, не сбой, а зависание), мы исправили ошибку и развернули новую версию, но эти сбойные рабочие процессы застряли в старых версиях. Есть ли способ автоматически переместить эти неудачные / зависшие рабочие процессы в новую версию и повторно запустить их?

Это часто происходит с нами, потому что мы только начали учиться использовать Cadence/Temporal.

Заранее спасибо!

1 ответ

Решение

Это зависит от бага.

Для ошибок, которые приводят к зависанию рабочего процесса (в Go разыменование нулевого указателя вызывает панику, которая по умолчанию блокирует ход рабочего процесса), развертывания новой версии кода обычно достаточно, чтобы разблокировать их.

Если для исправления требуется изменение, несовместимое с предыдущими версиями, лучшим вариантом будет сброс рабочего процесса до точки, предшествующей ошибке. Таким образом, рабочий процесс будет отменен и продолжен с использованием нового кода.

В ситуации, когда сбой кода рабочего процесса вызван новой плохой сборкой, вы можете откатить рабочих к предыдущей сборке и пометить эту сборку как сломанную, а все рабочие процессы автоматически откатятся до своего состояния до этой сборки. См. Раздел " Восстановление после неправильного развертывания" временной документации.

Если вы используете интеграцию ElasticSearch, вы также можете выполнить пакетный сброс нескольких рабочих процессов, используя предикат для выбора рабочих процессов, соответствующих некоторым критериям. См. Раздел " Сигнализация, отмена, завершение рабочих процессов как пакетного задания". Помимо названия раздела, пакетные задания также применяются к операциям сброса.

Другие вопросы по тегам