server sent GOAWAY and closed the connection
От: Anton Batenev Россия https://github.com/abbat
Дата: 10.07.20 13:01
Оценка:
Hello!

Есть обычный nginx умеющий принимать соединения по HTTP/2. У него http2_max_requests=1000 (default). С другой стороны в него ходит не менее обычный go-шный http.client и после 1000 запросов получает ошибку вида:

http2: server sent GOAWAY and closed the connection; LastStreamID=1999, ErrCode=NO_ERROR, debug=""


При этом по логам nginx данный запрос (на котором возникла ошибка) выполнился и вернул HTTP-200 (т.е. перезапрос со стороны go-клиента вроде как не требуется). Порывшись я нашел релевантные issue на github:

https://github.com/golang/go/issues/18639
https://github.com/golang/go/issues/28930

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

Решения в виде получения ошибки в виде текста и поиск в тексте "http2: server sent GOAWAY and closed the connection" и "ErrCode=NO_ERROR" как-то не очень вкусно пахнут. Наверняка кто-то сталкивался и сделал обработку более элегантно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.