{"action":"created","issue":{"url":"https://api.github.com/repos/grpc/grpc/issues/1024","labels_url":"https://api.github.com/repos/grpc/grpc/issues/1024/labels{/name}","comments_url":"https://api.github.com/repos/grpc/grpc/issues/1024/comments","events_url":"https://api.github.com/repos/grpc/grpc/issues/1024/events","html_url":"https://github.com/grpc/grpc/issues/1024","id":60814357,"number":1024,"title":"Client sends its own initiated stream ID in GOAWAY last-stream-id","user":{"login":"tatsuhiro-t","id":404610,"avatar_url":"https://avatars.githubusercontent.com/u/404610?v=3","gravatar_id":"","url":"https://api.github.com/users/tatsuhiro-t","html_url":"https://github.com/tatsuhiro-t","followers_url":"https://api.github.com/users/tatsuhiro-t/followers","following_url":"https://api.github.com/users/tatsuhiro-t/following{/other_user}","gists_url":"https://api.github.com/users/tatsuhiro-t/gists{/gist_id}","starred_url":"https://api.github.com/users/tatsuhiro-t/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tatsuhiro-t/subscriptions","organizations_url":"https://api.github.com/users/tatsuhiro-t/orgs","repos_url":"https://api.github.com/users/tatsuhiro-t/repos","events_url":"https://api.github.com/users/tatsuhiro-t/events{/privacy}","received_events_url":"https://api.github.com/users/tatsuhiro-t/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-03-12T12:55:03Z","updated_at":"2015-03-20T17:12:09Z","closed_at":"2015-03-20T17:12:09Z","body":"last-stream-id of GOAWAY frame should be the peer-initiated stream ID, not its own.\r\nBut currently gRPC client, at least built from grpc-common hello world cpp sample, sends GOAWAY with last-stream-id=1, which is client-initiated stream.\r\n\r\nhttps://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-6.8 says\r\n ```\r\n  There is an inherent race condition between an endpoint starting new\r\n   streams and the remote sending a GOAWAY frame.  To deal with this\r\n   case, the GOAWAY contains the stream identifier of the last peer-\r\n   initiated stream which was or might be processed on the sending\r\n   endpoint in this connection.  For instance, if the server sends a\r\n   GOAWAY frame, the identified stream is the highest numbered stream\r\n   initiated by the client.\r\n```\r\n\r\nSo, since we don't have server pushed streams, client should send GOAWAY last-stream-id=0 in this case.\r\n"},"comment":{"url":"https://api.github.com/repos/grpc/grpc/issues/comments/84074507","html_url":"https://github.com/grpc/grpc/issues/1024#issuecomment-84074507","issue_url":"https://api.github.com/repos/grpc/grpc/issues/1024","id":84074507,"user":{"login":"murgatroid99","id":961599,"avatar_url":"https://avatars.githubusercontent.com/u/961599?v=3","gravatar_id":"","url":"https://api.github.com/users/murgatroid99","html_url":"https://github.com/murgatroid99","followers_url":"https://api.github.com/users/murgatroid99/followers","following_url":"https://api.github.com/users/murgatroid99/following{/other_user}","gists_url":"https://api.github.com/users/murgatroid99/gists{/gist_id}","starred_url":"https://api.github.com/users/murgatroid99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/murgatroid99/subscriptions","organizations_url":"https://api.github.com/users/murgatroid99/orgs","repos_url":"https://api.github.com/users/murgatroid99/repos","events_url":"https://api.github.com/users/murgatroid99/events{/privacy}","received_events_url":"https://api.github.com/users/murgatroid99/received_events","type":"User","site_admin":false},"created_at":"2015-03-20T17:12:09Z","updated_at":"2015-03-20T17:12:09Z","body":"It looks like that pull request fixed this problem."}}