-
Notifications
You must be signed in to change notification settings - Fork 4.3k
-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
non-go client failed to receive "a lot of messages" from go server #1262
Comments
@dfawley I agree. It looks very much so. @olomix Can you please run the python server like the following and then run the go client and see what the error message it prints out?
(if you don't see anything relevant, try GRPC_VERBOSITY=INFO or DEBUG as well.) In particular, does it say something along the lines of "flow control of X incoming window of Y"? |
you mean go server & python client. Sure, I've uploaded logs (error, info & debug) from python client to google drive https://drive.google.com/open?id=0B-irbkAqk9i7YmVkSy1BTW91TlU Unfortunately those envs do not affect go server. All logs I can see from go server is via x/net/trace package
|
I managed to narrow the initial revision where the repro case seems to be broken down to commit grpc/grpc@80ccebb on the C implementation. (PR: grpc/grpc#9230), which, as expected, is a flow control-related change. I used to think that the go implementation is doing something wrong, however, based on my observations, while still inconclusive, I am more inclined to point to the C direction at this point. I'll look a bit more and probably will end up filing a bug on grpc/grpc C implementation and closing this one. |
This patch on the C core (simply removing |
I have implemented a client based on grpc-java for my go-server. It works fine. You are right. Seems only c-based grpc implementations are affected. |
The issue seems to be caused by mishandling of flow control arithmetic due to an integer overflow. #1268 fixes this. |
If you stream a lot of messages fast (around 30000 messages) from go server to python or js client, then python client is terminating with error
OS is macOS 10.12.5.
go version go1.8.3 darwin/amd64
I have put a demo of client/server that implements this bug to https://github.com/olomix/grpc-bug/
To run server: make go-server && ./main
To run client: make py-client
If server/client is GO/GO, then the same implementation works fine. If the client/server is python/python, it also works fine.
If in go server implementation put time.Sleep(100*time.Microseconds) between each send, then python also will complete receive successfully.
The text was updated successfully, but these errors were encountered: