"Застревание узла" во время выполнения WorkFlow

Здравствуйте!

Есть следующая проблема: создан WorkFlow, в нем в цикле выполняется http-запрос, который забирает данные по API с открытого источника, но на определенном шаге (случайном) блок http-запроса как бы «зависает» и перестает выполняться, при этом нет никаких предупреждений. Таймаут запроса ограничен, но это не влияет. Просто на определенном шаге нарисованы «часы» и выполнение WorkFlow останавливается, хотя статус WorkFlow – «В процессе» до тех пор, пока не будет принудительно прерван.

Тип WorkFlow: событие по расписанию (асинхронный).
Среда развертывания: docker
Версия приложения: 1.9.39
image

Настройки таймаута, добавление узла «задержка» не влияет на результат.
Есть предположение, что это может быть связано с блокировками в асинхронности, хотя такой уверенности нет. Если у кого-нибудь будут идеи для решения – буду благодарен.

Внутренние настройки узла:

Полный процесс:

How many times will it loop? Is it an infinite loop?

В данном WorkFlow есть два цикла

Цикл 1 уровня

Цикл 2 уровня (вложенный цикл)

Оба цикла проходят по конечному заданному числу элементов. Первый – по количеству страниц, как которые разделяется ответ на запрос (API pagination). Второй – по количеству элементов на каждой из страниц.

Цикл НЕ бесконечный. 1 цикл по страницам должен выполнится примерно 50 раз. 2-ой может быть выполнен до 20 раз

Is the workflow synchronous or asynchronous?

Workflow is asynchronous. Schedule event only supports Asynchronous mode.

Добрый день!

Чтобы выполнение цикла не прерывалось при HTTP-запросе, необходимо установить чекбокс «Игнорировать неудачный запрос и продолжить Workflow» . В этом случае после истечения таймаута узел вернёт ошибку, однако процесс продолжит выполняться дальше.

Если при этом требуется получать уведомления об ошибках, рекомендуем добавить узел «Условие» с проверкой успешности выполнения запроса. При неудачном результате можно настроить отправку уведомления пользователю и завершение текущей итерации цикла.

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

Если вы имели в виду другой сценарий, пожалуйста, уточните вопрос

Здравствуйте!

Дело в том, что в данном случае выполнение узла HTTP-запроса не завершается ошибкой, а зависает в статусе “В процессе”.

Вот еще новый недавний пример. Воркфлоу, который извлекает данные запросом из одной базы (Oracle) и кладет их в другую (PostgreSQL). Если данные, возвращаемые из источника, ограничить по объему (FETCH FIRST 1000 ROWS ONLY), то воркфлоу выполняется успешно. Однако, если выгружать все данные – около 200 000 строк – то воркфлоу также зависает на статусе “В процессе” и никогда не завершает свое выполнение.

Он не выполняет даже первый узел, хотя есть после этого узла, поставить задержку, то зависает на задержке.

Параллельная ветвь тоже не помогает.
image

Есть ощущение, что пока Ворклофу не подходит для объёмных ETL-процессов или просто синхронизаций больших объемов данных (хотя инструмент довольно удобный). С небольшими операциями он справляется хорошо, но объемные и длительные процессы “застревают” таким образом.

Версия NocoBase 1.9.44
Развернуто через docker (Ubuntu, Linux)

Попробовал тот же самый процесс перенести из триггера “По расписанию” в синхронный процесс “После события”, однако, он так же не справляется и зависает.

Пока решил проблему ограничением объема данных, проходящих через WorkFlow, но хотелось бы, конечно, иметь возможность выполнять объёмные процессы с его помощью.