{"action":"created","issue":{"url":"https://api.github.com/repos/grpc/grpc/issues/15771","repository_url":"https://api.github.com/repos/grpc/grpc","labels_url":"https://api.github.com/repos/grpc/grpc/issues/15771/labels{/name}","comments_url":"https://api.github.com/repos/grpc/grpc/issues/15771/comments","events_url":"https://api.github.com/repos/grpc/grpc/issues/15771/events","html_url":"https://github.com/grpc/grpc/pull/15771","id":332580476,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk1MDMwNTI2","number":15771,"title":"Support Per-Method Codegen Generic on Server Side","user":{"login":"ncteisen","id":6148140,"node_id":"MDQ6VXNlcjYxNDgxNDA=","avatar_url":"https://avatars1.githubusercontent.com/u/6148140?v=4","gravatar_id":"","url":"https://api.github.com/users/ncteisen","html_url":"https://github.com/ncteisen","followers_url":"https://api.github.com/users/ncteisen/followers","following_url":"https://api.github.com/users/ncteisen/following{/other_user}","gists_url":"https://api.github.com/users/ncteisen/gists{/gist_id}","starred_url":"https://api.github.com/users/ncteisen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncteisen/subscriptions","organizations_url":"https://api.github.com/users/ncteisen/orgs","repos_url":"https://api.github.com/users/ncteisen/repos","events_url":"https://api.github.com/users/ncteisen/events{/privacy}","received_events_url":"https://api.github.com/users/ncteisen/received_events","type":"User","site_admin":false},"labels":[{"id":155504844,"node_id":"MDU6TGFiZWwxNTU1MDQ4NDQ=","url":"https://api.github.com/repos/grpc/grpc/labels/kind/enhancement","name":"kind/enhancement","color":"93732c","default":false},{"id":166332908,"node_id":"MDU6TGFiZWwxNjYzMzI5MDg=","url":"https://api.github.com/repos/grpc/grpc/labels/lang/c++","name":"lang/c++","color":"fad8c7","default":false},{"id":360790193,"node_id":"MDU6TGFiZWwzNjA3OTAxOTM=","url":"https://api.github.com/repos/grpc/grpc/labels/priority/P2","name":"priority/P2","color":"dd7172","default":false}],"state":"open","locked":false,"assignee":{"login":"vjpai","id":8864912,"node_id":"MDQ6VXNlcjg4NjQ5MTI=","avatar_url":"https://avatars0.githubusercontent.com/u/8864912?v=4","gravatar_id":"","url":"https://api.github.com/users/vjpai","html_url":"https://github.com/vjpai","followers_url":"https://api.github.com/users/vjpai/followers","following_url":"https://api.github.com/users/vjpai/following{/other_user}","gists_url":"https://api.github.com/users/vjpai/gists{/gist_id}","starred_url":"https://api.github.com/users/vjpai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vjpai/subscriptions","organizations_url":"https://api.github.com/users/vjpai/orgs","repos_url":"https://api.github.com/users/vjpai/repos","events_url":"https://api.github.com/users/vjpai/events{/privacy}","received_events_url":"https://api.github.com/users/vjpai/received_events","type":"User","site_admin":false},"assignees":[{"login":"vjpai","id":8864912,"node_id":"MDQ6VXNlcjg4NjQ5MTI=","avatar_url":"https://avatars0.githubusercontent.com/u/8864912?v=4","gravatar_id":"","url":"https://api.github.com/users/vjpai","html_url":"https://github.com/vjpai","followers_url":"https://api.github.com/users/vjpai/followers","following_url":"https://api.github.com/users/vjpai/following{/other_user}","gists_url":"https://api.github.com/users/vjpai/gists{/gist_id}","starred_url":"https://api.github.com/users/vjpai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vjpai/subscriptions","organizations_url":"https://api.github.com/users/vjpai/orgs","repos_url":"https://api.github.com/users/vjpai/repos","events_url":"https://api.github.com/users/vjpai/events{/privacy}","received_events_url":"https://api.github.com/users/vjpai/received_events","type":"User","site_admin":false},{"login":"yang-g","id":10122250,"node_id":"MDQ6VXNlcjEwMTIyMjUw","avatar_url":"https://avatars0.githubusercontent.com/u/10122250?v=4","gravatar_id":"","url":"https://api.github.com/users/yang-g","html_url":"https://github.com/yang-g","followers_url":"https://api.github.com/users/yang-g/followers","following_url":"https://api.github.com/users/yang-g/following{/other_user}","gists_url":"https://api.github.com/users/yang-g/gists{/gist_id}","starred_url":"https://api.github.com/users/yang-g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yang-g/subscriptions","organizations_url":"https://api.github.com/users/yang-g/orgs","repos_url":"https://api.github.com/users/yang-g/repos","events_url":"https://api.github.com/users/yang-g/events{/privacy}","received_events_url":"https://api.github.com/users/yang-g/received_events","type":"User","site_admin":false}],"milestone":null,"comments":47,"created_at":"2018-06-14T22:04:38Z","updated_at":"2018-06-28T22:55:17Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/grpc/grpc/pulls/15771","html_url":"https://github.com/grpc/grpc/pull/15771","diff_url":"https://github.com/grpc/grpc/pull/15771.diff","patch_url":"https://github.com/grpc/grpc/pull/15771.patch"},"body":"Working towards #15764.\r\n\r\nThis PR adds the ability to hand pick methods on the server that will go through custom serialization. The method maintains the codegen, so switching an existing async service to be generic becomes trivial.\r\n\r\nThis is not production ready, but I wanted to put it out there for an early look"},"comment":{"url":"https://api.github.com/repos/grpc/grpc/issues/comments/401197227","html_url":"https://github.com/grpc/grpc/pull/15771#issuecomment-401197227","issue_url":"https://api.github.com/repos/grpc/grpc/issues/15771","id":401197227,"node_id":"MDEyOklzc3VlQ29tbWVudDQwMTE5NzIyNw==","user":{"login":"ncteisen","id":6148140,"node_id":"MDQ6VXNlcjYxNDgxNDA=","avatar_url":"https://avatars1.githubusercontent.com/u/6148140?v=4","gravatar_id":"","url":"https://api.github.com/users/ncteisen","html_url":"https://github.com/ncteisen","followers_url":"https://api.github.com/users/ncteisen/followers","following_url":"https://api.github.com/users/ncteisen/following{/other_user}","gists_url":"https://api.github.com/users/ncteisen/gists{/gist_id}","starred_url":"https://api.github.com/users/ncteisen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ncteisen/subscriptions","organizations_url":"https://api.github.com/users/ncteisen/orgs","repos_url":"https://api.github.com/users/ncteisen/repos","events_url":"https://api.github.com/users/ncteisen/events{/privacy}","received_events_url":"https://api.github.com/users/ncteisen/received_events","type":"User","site_admin":false},"created_at":"2018-06-28T22:55:17Z","updated_at":"2018-06-28T22:55:17Z","author_association":"CONTRIBUTOR","body":"Ok, so `WithRawMethod_Foo` is the winner.\r\n\r\nAs far as unbalanced goes, that is up for discussion. The real use cases that inspired this change wanted unbalanced. The RecvTensor method on server side for TensorFlow uses RecvTensorRequest, but then serialized directly into ByteBuffer while populating the response. See [here](https://github.com/tensorflow/tensorflow/blob/ced4fddc0400fedce8ba15fb9a3e6e765ddda757/tensorflow/core/distributed_runtime/rpc/grpc_worker_service.cc#L291-L292).\r\n\r\nIf this is too much code bloat, I could easily rewrite them to use pure Raw API, then just manually deserialize the request.\r\n\r\nI'd like to keep the ability to do `WithRawMethod_Foo<AsyncService>`, since I see that being the main use case. AKA a scenario where an async user wants to special case one or two of their methods. Otherwise we are forcing them to create a huge template chain with each of the methods of their service."}}
{"actor":{"display_login":"ncteisen"}}