Шаги для воспроизведения
- Запустить сервер
- Отправить клиентский RPC на сервер
- Перезагрузите сервер
- Используя тот же клиент, отправьте другой RPC. Вызов не удастся
- Отправьте еще один RPC, этот вызов будет успешным
Также я обнаружил, что если сервер оставлен на длительное время остановленным перед повторным запуском, вызов на шаге 5 также вернет «канал находится в состоянии TRANSIENT_FAILURE».
Пример кода: https://github.com/whs/grpc-repro
(Установите из файла needs.txt, затем запустите main.py)
Ожидаемый результат
Все звонки должны быть успешными.
Протестировано с Python grpcio == 1.19.0 сервер / клиент и с сервером go-grpc. Я попытался установить grpc.max_connection_age_grace_ms, grpc.max_connection_age_ms, grpc.max_connection_idle_ms, grpc.keepalive_time_ms, grpc.keepalive_permit_without_calls, но, похоже, это не помогает.