{"action":"closed","issue":{"url":"https://api.github.com/repos/grpc/grpc/issues/5721","repository_url":"https://api.github.com/repos/grpc/grpc","labels_url":"https://api.github.com/repos/grpc/grpc/issues/5721/labels{/name}","comments_url":"https://api.github.com/repos/grpc/grpc/issues/5721/comments","events_url":"https://api.github.com/repos/grpc/grpc/issues/5721/events","html_url":"https://github.com/grpc/grpc/issues/5721","id":140281971,"number":5721,"title":"Common Ruby Errors","user":{"login":"blowmage","id":730,"avatar_url":"https://avatars.githubusercontent.com/u/730?v=3","gravatar_id":"","url":"https://api.github.com/users/blowmage","html_url":"https://github.com/blowmage","followers_url":"https://api.github.com/users/blowmage/followers","following_url":"https://api.github.com/users/blowmage/following{/other_user}","gists_url":"https://api.github.com/users/blowmage/gists{/gist_id}","starred_url":"https://api.github.com/users/blowmage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/blowmage/subscriptions","organizations_url":"https://api.github.com/users/blowmage/orgs","repos_url":"https://api.github.com/users/blowmage/repos","events_url":"https://api.github.com/users/blowmage/events{/privacy}","received_events_url":"https://api.github.com/users/blowmage/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/grpc/grpc/labels/ruby","name":"ruby","color":"E0115F"}],"state":"closed","locked":false,"assignee":{"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},"milestone":null,"comments":10,"created_at":"2016-03-11T20:21:58Z","updated_at":"2016-03-22T00:05:00Z","closed_at":"2016-03-22T00:05:00Z","body":"We have a large number of acceptance tests that run against live Google Cloud services, using service account credentials. The tests take on average 10 minutes to run. We have seen many errors using GRPC/protobuf in this environment. \r\n\r\nWhen we create a new protobuf service (e.g. Pub/Sub Publisher or Subscriber) for every api call, the tests will run for a few minutes, but it is very common for an getaddrinfo error to be raised from within grpc causing the tests to hang.\r\n\r\n```\r\nE0311 10:06:34.633032000 123145306050560 resolve_address_posix.c:126] getaddrinfo: nodename nor servname provided, or not known\r\n```\r\n\r\nWhen we don't create a new protobuf service for every api call, but instead memoize the protobuf service, we can run our acceptance Pub/Sub tests to completion. However, when we run all the acceptance tests for all the services, we will eventually see a \"Getting metadata from plugin failed with error\" error.\r\n\r\n```\r\nE0310 09:04:41.211931000 123145303392256 credentials.c:1155] Getting metadata from plugin failed with error: NoMethodError\r\nE0310 09:04:41.211990000 123145303392256 client_auth_filter.c:93] Client side authentication failure: Credentials failed to get meta\r\n```\r\n\r\nThis metadata error is because the `updater_proc` object the ruby code gives to `GRPC::Core::CallCredentials` to sign the HTTP request is being replaced with a different object that doesn't have the `call` method. So the NoMethodError happens because new object (that is not the `updater_proc` object) does not have the `call` method. This behavior is very surprising. The objects we've been able to observe that have replaced our `updater_proc` object are the strings \"DATASTORE_BACKUP\" and \"path\". Both those strings are in our code, but nowhere near the proximity of any GRPC calls. I've looked extensively into this but have not yet found where this object is being replaced.\r\n\r\nWe are also increasingly seeing a \"goaway\" error. Sometimes this error will even create a segfault. The goaway error looks to be originating from the server. When this happens in our acceptance tests hang indefinitely, similar to the getaddrinfo error.\r\n\r\n```\r\nD0311 12:01:56.431449000 140735138045952 chttp2_transport.c:683] got goaway [0]: 73 65 73 73 69 6f 6e 5f 74 69 6d 65 64 5f 6f 75 74 'session_timed_out'\r\n```\r\n\r\nThese issues are becoming a real blocker for us adding GRPC as a dependency.\r\n\r\n/cc @jgeewax @quartzmo"}}