grpc-web: Crash in vendored gRPC-Go version
Versions of relevant software used /grpcwebproxy-v0.9.1-linux-x86_64
What happened Not able to bridge grpc server with web client, after the first call the first part of the log is output, the second call leads to a crash ./grpcwebproxy-v0.9.1-linux-x86_64 --backend_addr=10.251.177.181:50051 --run_tls_server=false --allow_all_origins
What you expected to happen Sweet working grpc-web proxy.
How to reproduce it (as minimally and precisely as possible): The intention is to replace envoy for some setups in the for the following product. Server: https://github.com/volvo-cars/signalbroker-server Client: https://github.com/volvo-cars/signalbroker-web-client
Full logs to relevant components
./grpcwebproxy-v0.9.1-linux-x86_64 --backend_addr=10.251.177.181:50051 --run_tls_server=false --allow_all_origins --backend_max_call_recv_msg_size=5242880 --use_websockets
INFO[0000] dialing to target with scheme: "" system=system
INFO[0000] using websockets
INFO[0000] ccResolverWrapper: sending new addresses to cc: [{10.251.177.181:50051 0 <nil>}] system=system
INFO[0000] listening for http on: [::]:8080
INFO[0000] pickfirstBalancer: HandleSubConnStateChange: 0xc420099680, CONNECTING system=system
INFO[0000] pickfirstBalancer: HandleSubConnStateChange: 0xc420099680, READY system=system
INFO[0002] pickfirstBalancer: HandleSubConnStateChange: 0xc420099680, TRANSIENT_FAILURE system=system
INFO[0002] pickfirstBalancer: HandleSubConnStateChange: 0xc420099680, CONNECTING system=system
ERRO[0002] finished streaming call error="rpc error: code = Internal desc = stream terminated by RST_STREAM with error code: PROTOCOL_ERROR" grpc.code=Internal grpc.method=GetConfiguration grpc.service=base.SystemService grpc.start_time="2019-04-17T15:49:47+02:00" grpc.time_ms=3 span.kind=server system=grpc
INFO[0002] pickfirstBalancer: HandleSubConnStateChange: 0xc420099680, READY system=system
panic: close of closed channel
goroutine 30 [running]:
github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport.(*Stream).finish(...)
/Users/jonny/Projects/grpc-web/src/github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport/transport.go:400
github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport.(*http2Client).handleGoAway(0xc420085680, 0xc4201b6f60)
/Users/jonny/Projects/grpc-web/src/github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport/http2_client.go:1024 +0x1c6
github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport.(*http2Client).reader(0xc420085680)
/Users/jonny/Projects/grpc-web/src/github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport/http2_client.go:1203 +0x4f1
created by github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport.newHTTP2Client
/Users/jonny/Projects/grpc-web/src/github.com/improbable-eng/grpc-web/vendor/google.golang.org/grpc/transport/http2_client.go:272 +0xbf1
Anything else we need to know Thanks a lot, hope this can be our natural envoy replacer for ARM enviroments.
Server is written in Elixir and uses: https://github.com/elixir-grpc/grpc Bridging works well using envoy (which we would like to replace for ARM targets)
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 20 (10 by maintainers)
Yes, they grpcwebproxy you’re using is just a gRPC client wrapped in a custom gRPC-Web translation middleware. The READY logs come from the grpc-go client library.