Прочная функция продолжает работать

У меня есть долговременная функция, которая не вылетает, но после первого вызова продолжает выполнять ту же функцию. После этого первого вызова попытка установить точки останова не имеет никакого эффекта.

[30/11/2017 16:16:21] Функция запущена (Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] Выполнение 'CompileFeatureObservations' (Reason='', Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] Запуск компиляции функций.
[30/11/2017 16:16:21] Функция выполнена (Успех, Id=972ee93c-ab61-4834-937c-207e8953821d, Длительность =58 мс)
[30/11/2017 16:16:21] Выполнено 'CompileFeatureObservations' (Успешно, Id=972ee93c-ab61-4834-937c-207e8953821d)
[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Функция 'CompileFeatureObservations (Activity)', версия '' завершена. Продолжение AsNew: Ложь. IsReplay: False. Выход: (62123 байта). Состояние: Завершено. HubName: DurableFunctionsHub. Имя приложения: . SlotName: . ExtensionVersion: 1.0.0.0.

Единственный фактор, который я вижу, - это размер полезной нагрузки запроса, хотя он ниже предела в 65 КБ.

Он использует шаблон разветвления / разветвления, как описано в документации. Когда размер моего массива задач достигает ~100, кажется, он перестает работать, а затем входит в бесконечный цикл.

Возможно, я превысил предел разветвления? Есть ли способ контролировать количество запускаемых экземпляров функции?

Я использую план потребления.

Единственный способ найти способ остановить поведение - это остановить эмулятор локального хранилища, удалить и повторно запустить базовый localdb.

У кого-нибудь есть предложения по дальнейшему устранению неполадок?

1 ответ

Решение

Я вполне уверен, что проблема заключается в большом выходе вашей функции, которая является известной проблемой, упомянутой здесь: https://github.com/Azure/azure-functions-durable-extension/issues/79.

Что вводит в заблуждение, так это лог-оператор:

[30/11/2017 16:16:21] b540b650019244719a7f3a61e45735f4: Function 'CompileFeatureObservations (Activity)', version '' completed. ContinuedAsNew: False. IsReplay: False. Output: (62123 bytes). State: Completed.

Он утверждает, что вывод составляет около 60 КБ, но число, указанное здесь, на самом деле не правильно, так как предполагает кодировку UTF-8. В действительности хранилище Azure использует кодировку UTF-32, поэтому реальный размер, вероятно, намного больше этого. Я отмечу, что это нужно исправить. В обновлении бета2 мы сообщим об этом правильно и сгенерируем исключение. Через некоторое время у нас будет поддержка произвольно больших возвращаемых значений.

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

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