{"action":"opened","issue":{"url":"https://api.github.com/repos/micro/go-plugins/issues/202","repository_url":"https://api.github.com/repos/micro/go-plugins","labels_url":"https://api.github.com/repos/micro/go-plugins/issues/202/labels{/name}","comments_url":"https://api.github.com/repos/micro/go-plugins/issues/202/comments","events_url":"https://api.github.com/repos/micro/go-plugins/issues/202/events","html_url":"https://github.com/micro/go-plugins/issues/202","id":342316335,"node_id":"MDU6SXNzdWUzNDIzMTYzMzU=","number":202,"title":"inconsistent gRPC stream behavior","user":{"login":"magaldima","id":10351307,"node_id":"MDQ6VXNlcjEwMzUxMzA3","avatar_url":"https://avatars0.githubusercontent.com/u/10351307?v=4","gravatar_id":"","url":"https://api.github.com/users/magaldima","html_url":"https://github.com/magaldima","followers_url":"https://api.github.com/users/magaldima/followers","following_url":"https://api.github.com/users/magaldima/following{/other_user}","gists_url":"https://api.github.com/users/magaldima/gists{/gist_id}","starred_url":"https://api.github.com/users/magaldima/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/magaldima/subscriptions","organizations_url":"https://api.github.com/users/magaldima/orgs","repos_url":"https://api.github.com/users/magaldima/repos","events_url":"https://api.github.com/users/magaldima/events{/privacy}","received_events_url":"https://api.github.com/users/magaldima/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-07-18T12:56:08Z","updated_at":"2018-07-18T12:56:08Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"I have a gRPC client + server that are trying to communicate via a bidirectional stream. I started out using the `kubernetes` registry plugin. Although that doesn't seem to be an issue, I've switched over to trying to use the `in-memory` registry in order to debug the code. \r\n\r\nThe observations from my testing are as follows:\r\n- As long as the proto method is invoked with `client.WithRequestTimeout(-1)`, the first client send (server recv) and the first server send (client recv) always succeeds.\r\n- The second client send sometimes blocks forever. (This happens a little more than half the time)\r\n- The way the client closes the stream (closing the underlying connection) causes an error during processing on the client side (`connection is shut down`) which in my program causes a panic and then causes the server to see a cancelled context. I believe the client should be able to perform a `CloseSend` to signal that it's closing its send channel (not sending anymore messages) without closing the connection (as it may still be waiting to recv msgs)\r\n\r\nI'm currently in the process of debugging through the in-memory case with gRPC client + server so I'll update this issue with progress/findings from that."}}
{"actor":{"display_login":"magaldima"}}