diadocsdk-csharp icon indicating copy to clipboard operation
diadocsdk-csharp copied to clipboard

Зависает GetDocflowEvents

Open worldofsites opened this issue 4 years ago • 7 comments

Добрый день! У нас есть джоба, которая через каждые n времени проверяет статусы загруженных документов. По неизвестным причинам через разное время (примерно через 1-3 дня) джоба зависает. Пытались выяснить что не так, обложили все логами, выяснилось, что зависает запрос GetDocflowEvents. При этом до возникновения зависания этот вызов может долго исправно работать при предыдущих запусках джобы. У нас также есть другие задачи по крону и в коде происходит работа с другими методами DiadocApi (GetOrganizationByInnKpp, GetDocumentTypes, PostMessage), но проблем и зависаний не возникает и они исправно работают и не отваливаются даже когда GetDocflowEvents уже находится в подвешенном состоянии. С чем это может быть связано? И еще вопрос, можно ли добавить в асинхронные версии методов DiadocApi проброс токена отмены операции? На случай если вызов DiadocApi превышает установленные нами временные лимиты. Недавно мы создавали PR с добавлением этой фичи -> https://github.com/diadoc/diadocsdk-csharp/pull/735 Спасибо!

DiadocSDK 2.8.1

worldofsites avatar Oct 02 '20 11:10 worldofsites

Добрый день. Спасибо за PR, у нас разработчики в ближайшее время посмотрят его.

В целом по GetDocflowEvents мы такой проблемы не видим. Покажите префикс вашего ключа, boxId в контексте которого происходит зависание и примерное время зависшего вызова

i82 avatar Oct 02 '20 13:10 i82

Сегодня зависло примерно после 2020-10-02 14:17:30.1757 (скорее всего время НСК) Токен, при котором произошло, к сожалению, не определить. Текущий токен и ящик:

var token = "SPQjHCKyxs27zKjsBM+Qwd0UvLJlF8wr1PdO6Z9SLBvpAQSH0w0G8TZzMcVQKHOrvr1UvFHgwVsiz1rm28mezkad63rpZXkSutse1nxFDRUMxJ2pxHgyljU8CWEQLHutv6D1BojZeAC4KsaNEJzjwMOL+v4GGm1/sySIB5v5lDg=";
var boxId = "[email protected]";
GetDocflowEvents(token, boxId, getDocflowEventsRequest)

Параметр запроса GetDocflowEventsRequest может быть как по индексу: image Так и по времени: image

worldofsites avatar Oct 02 '20 13:10 worldofsites

А что вы вкладываете в понятие "зависает"?

alogicman avatar Oct 05 '20 12:10 alogicman

Вызывается метод GetDocflowEvents, но сколько бы много времени не прошло с момента этого вызова, ответ так и не приходит и не выбрасывается никаких исключений.

worldofsites avatar Oct 05 '20 13:10 worldofsites

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

alogicman avatar Oct 06 '20 04:10 alogicman

Спасибо, проверяем постоянно, но пока ничего такого, что могло заблокировать работу DiadocApi не нашли. У Вас в логах по нашему ящику был вообще запрос GetDocflowEvents в период примерно >= 2020-10-02 10:17:30.1757 (МСК)?

Возникает такая ситуация не очень часто, как писали ранее, примерно раз в 1-3 дня. Будем дальше изучать.

Могут быть какие-нибудь проблемы с освобождением ресурсов при работе с WebRequest? Например, в этих местах ->https://github.com/diadoc/diadocsdk-csharp/pull/744

worldofsites avatar Oct 06 '20 04:10 worldofsites

Вижу по логам постоянные запросы на /v2/searchdocflows, которые заканчиваются в 2020-10-02 10:17:35 мск. Затем периодические запросы раз в 10 минут на аутентификацию (/authenticate). Затем в 11:48:55 снова начинаются постоянные запросы на /v2/searchdocflows

не думаю, что проблема с WebRequest-ом (попозже посмотрю пул реквест). Выглядит как проблема именно с потоками, а не с ресурсами

alogicman avatar Oct 06 '20 05:10 alogicman