Helidon - ForwardingHandler не завершает RequestContext Publisher, если LoadBalancer прерывает запущенный процесс Expect: 100-continue - PullRequest
0 голосов
/ 18 июня 2020

Мы предоставляем Helidon MP Rest-Services за балансировщиком нагрузки Apache httpd. Следующая комбинация приводит к зависанию очереди исполнителя JerseySupport Service.

Клиент отправляет POST-запрос в нашу службу rest с полезной нагрузкой json и заголовком Expect 100-continue . Балансировщик нагрузки Apache отправляет запрос на бэкэнд. Бэкэнд принимает запрос и запускает исполняемый объект JerseySupport, который ожидает поступления входящих данных, затем бэкэнд отправляет ответ LB для запуска потока (Статус ответа 100). Если в этот момент запрос клиента превышает тайм-аут соединения балансировщика нагрузки, балансировщик нагрузки прерывает соединение с вызывающим клиентом с ошибкой прокси, но серверная служба не получает информацию и ждет вечно.

Проблема в том, что io.helidon.webserver.ForwardingHandler завершает работу с публикатором содержимого http, только если отправлено сообщение LastHttpContent, а этого никогда не происходит. Если издатель не завершает работу, подписчик внутри ожидающего экземпляра службы JerseySupport навсегда блокирует экземпляр исполнителя сервера. Если это произойдет несколько раз, вся остальная услуга будет заблокирована.

Я не нашел возможности настроить соответствующий тайм-аут внутри helidon для прерывания службы JerseySupport, а также возможности заставить балансировщик нагрузки apache правильно завершить соединение с серверной частью.

Кто-нибудь из вас заметил подобные проблемы или нашел обходной путь, кроме отключения 100-continue streaming.

Версия Helidon: 1.4.4 Apache Версия: 2.4.41

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

...