grpc 1.18.0 → 1.22.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (428) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4731 -7404
  3. data/etc/roots.pem +146 -0
  4. data/include/grpc/grpc.h +11 -6
  5. data/include/grpc/grpc_security.h +297 -4
  6. data/include/grpc/grpc_security_constants.h +1 -1
  7. data/include/grpc/impl/codegen/byte_buffer.h +13 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +30 -7
  10. data/include/grpc/impl/codegen/port_platform.h +88 -7
  11. data/include/grpc/impl/codegen/slice.h +2 -22
  12. data/include/grpc/impl/codegen/status.h +2 -1
  13. data/include/grpc/impl/codegen/sync_posix.h +18 -0
  14. data/include/grpc/slice.h +3 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
  16. data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
  19. data/src/core/ext/filters/client_channel/client_channel.h +2 -10
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
  25. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
  26. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
  27. data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
  28. data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
  29. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
  40. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
  41. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
  46. data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
  47. data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
  48. data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
  49. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
  50. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
  51. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
  52. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
  53. data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
  65. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
  66. data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
  67. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
  68. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
  69. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
  70. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
  71. data/src/core/ext/filters/client_channel/resolver.cc +54 -1
  72. data/src/core/ext/filters/client_channel/resolver.h +52 -23
  73. data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
  74. data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
  75. data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
  77. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
  78. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
  79. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
  80. data/src/core/ext/filters/client_channel/server_address.cc +4 -54
  81. data/src/core/ext/filters/client_channel/server_address.h +1 -13
  82. data/src/core/ext/filters/client_channel/service_config.cc +329 -0
  83. data/src/core/ext/filters/client_channel/service_config.h +205 -0
  84. data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
  85. data/src/core/ext/filters/client_channel/subchannel.h +295 -128
  86. data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
  87. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
  88. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
  90. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  91. data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
  92. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  93. data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
  94. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
  95. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
  96. data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
  97. data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
  98. data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
  99. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
  102. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
  104. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
  107. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
  108. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
  109. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
  110. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
  111. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
  113. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
  131. data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
  136. data/src/core/lib/channel/channel_args.cc +2 -101
  137. data/src/core/lib/channel/channel_args.h +3 -37
  138. data/src/core/lib/channel/channel_stack.h +10 -6
  139. data/src/core/lib/channel/channel_trace.cc +4 -4
  140. data/src/core/lib/channel/channel_trace.h +4 -4
  141. data/src/core/lib/channel/channelz.cc +168 -38
  142. data/src/core/lib/channel/channelz.h +40 -44
  143. data/src/core/lib/channel/channelz_registry.cc +75 -107
  144. data/src/core/lib/channel/channelz_registry.h +10 -28
  145. data/src/core/lib/channel/connected_channel.cc +2 -2
  146. data/src/core/lib/channel/context.h +2 -2
  147. data/src/core/lib/channel/handshaker.cc +151 -218
  148. data/src/core/lib/channel/handshaker.h +110 -101
  149. data/src/core/lib/channel/handshaker_factory.h +11 -19
  150. data/src/core/lib/channel/handshaker_registry.cc +67 -51
  151. data/src/core/lib/channel/handshaker_registry.h +21 -16
  152. data/src/core/lib/compression/algorithm_metadata.h +3 -3
  153. data/src/core/lib/compression/compression.cc +14 -9
  154. data/src/core/lib/compression/compression_args.cc +127 -0
  155. data/src/core/lib/compression/compression_args.h +55 -0
  156. data/src/core/lib/compression/compression_internal.cc +16 -12
  157. data/src/core/lib/compression/compression_internal.h +1 -1
  158. data/src/core/lib/compression/stream_compression.cc +3 -2
  159. data/src/core/lib/compression/stream_compression.h +2 -2
  160. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  161. data/src/core/lib/debug/trace.cc +13 -7
  162. data/src/core/lib/debug/trace.h +14 -1
  163. data/src/core/lib/gpr/arena.h +13 -9
  164. data/src/core/lib/gpr/cpu_posix.cc +5 -3
  165. data/src/core/lib/gpr/env.h +3 -6
  166. data/src/core/lib/gpr/env_linux.cc +6 -1
  167. data/src/core/lib/gpr/env_posix.cc +5 -0
  168. data/src/core/lib/gpr/env_windows.cc +7 -5
  169. data/src/core/lib/gpr/log.cc +9 -13
  170. data/src/core/lib/gpr/log_posix.cc +2 -1
  171. data/src/core/lib/gpr/string.cc +20 -7
  172. data/src/core/lib/gpr/string.h +10 -3
  173. data/src/core/lib/gpr/sync_posix.cc +65 -4
  174. data/src/core/lib/gpr/time.cc +8 -0
  175. data/src/core/lib/gpr/time_posix.cc +21 -2
  176. data/src/core/lib/gprpp/arena.cc +103 -0
  177. data/src/core/lib/gprpp/arena.h +121 -0
  178. data/src/core/lib/gprpp/atomic.h +75 -5
  179. data/src/core/lib/gprpp/fork.cc +13 -32
  180. data/src/core/lib/gprpp/fork.h +5 -1
  181. data/src/core/lib/gprpp/global_config.h +96 -0
  182. data/src/core/lib/gprpp/global_config_custom.h +29 -0
  183. data/src/core/lib/gprpp/global_config_env.cc +135 -0
  184. data/src/core/lib/gprpp/global_config_env.h +131 -0
  185. data/src/core/lib/gprpp/global_config_generic.h +44 -0
  186. data/src/core/lib/gprpp/inlined_vector.h +8 -0
  187. data/src/core/lib/gprpp/map.h +436 -0
  188. data/src/core/lib/gprpp/memory.h +2 -2
  189. data/src/core/lib/gprpp/optional.h +48 -0
  190. data/src/core/lib/gprpp/orphanable.h +6 -5
  191. data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
  192. data/src/core/lib/gprpp/ref_counted.h +36 -17
  193. data/src/core/lib/gprpp/sync.h +126 -0
  194. data/src/core/lib/gprpp/thd.h +42 -7
  195. data/src/core/lib/gprpp/thd_posix.cc +31 -13
  196. data/src/core/lib/gprpp/thd_windows.cc +47 -34
  197. data/src/core/lib/http/httpcli.cc +6 -5
  198. data/src/core/lib/http/httpcli_security_connector.cc +13 -15
  199. data/src/core/lib/http/parser.cc +3 -2
  200. data/src/core/lib/http/parser.h +2 -1
  201. data/src/core/lib/iomgr/buffer_list.cc +182 -24
  202. data/src/core/lib/iomgr/buffer_list.h +72 -10
  203. data/src/core/lib/iomgr/call_combiner.cc +84 -90
  204. data/src/core/lib/iomgr/call_combiner.h +75 -82
  205. data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
  206. data/src/core/lib/iomgr/cfstream_handle.h +86 -0
  207. data/src/core/lib/iomgr/combiner.cc +11 -3
  208. data/src/core/lib/iomgr/combiner.h +1 -1
  209. data/src/core/lib/iomgr/endpoint.cc +2 -2
  210. data/src/core/lib/iomgr/endpoint.h +3 -2
  211. data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
  212. data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
  213. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  214. data/src/core/lib/iomgr/error.cc +21 -17
  215. data/src/core/lib/iomgr/error.h +36 -6
  216. data/src/core/lib/iomgr/error_cfstream.cc +52 -0
  217. data/src/core/lib/iomgr/error_cfstream.h +31 -0
  218. data/src/core/lib/iomgr/error_internal.h +1 -1
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
  222. data/src/core/lib/iomgr/ev_posix.cc +29 -19
  223. data/src/core/lib/iomgr/ev_posix.h +19 -3
  224. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  225. data/src/core/lib/iomgr/exec_ctx.cc +1 -0
  226. data/src/core/lib/iomgr/exec_ctx.h +137 -8
  227. data/src/core/lib/iomgr/executor.cc +147 -95
  228. data/src/core/lib/iomgr/executor.h +55 -49
  229. data/src/core/lib/iomgr/fork_posix.cc +6 -5
  230. data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
  231. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
  232. data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
  233. data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
  234. data/src/core/lib/iomgr/internal_errqueue.h +105 -3
  235. data/src/core/lib/iomgr/iomgr.cc +20 -13
  236. data/src/core/lib/iomgr/iomgr.h +15 -0
  237. data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
  238. data/src/core/lib/iomgr/iomgr_custom.h +2 -0
  239. data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
  240. data/src/core/lib/iomgr/iomgr_internal.h +12 -0
  241. data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
  242. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
  243. data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
  244. data/src/core/lib/iomgr/lockfree_event.cc +4 -4
  245. data/src/core/lib/iomgr/port.h +35 -0
  246. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  247. data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
  248. data/src/core/lib/iomgr/resource_quota.cc +40 -37
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
  250. data/src/core/lib/iomgr/socket_windows.cc +19 -0
  251. data/src/core/lib/iomgr/socket_windows.h +8 -0
  252. data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
  253. data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
  254. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +10 -14
  257. data/src/core/lib/iomgr/tcp_posix.cc +256 -140
  258. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  259. data/src/core/lib/iomgr/tcp_server.h +24 -0
  260. data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
  261. data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
  262. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
  263. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
  264. data/src/core/lib/iomgr/tcp_uv.cc +5 -7
  265. data/src/core/lib/iomgr/tcp_windows.cc +8 -14
  266. data/src/core/lib/iomgr/timer.h +2 -1
  267. data/src/core/lib/iomgr/timer_generic.cc +16 -16
  268. data/src/core/lib/iomgr/timer_manager.cc +20 -11
  269. data/src/core/lib/iomgr/udp_server.cc +8 -6
  270. data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
  271. data/src/core/lib/json/json.cc +1 -4
  272. data/src/core/lib/profiling/basic_timers.cc +10 -4
  273. data/src/core/lib/security/context/security_context.cc +6 -7
  274. data/src/core/lib/security/context/security_context.h +3 -4
  275. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
  276. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  277. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
  278. data/src/core/lib/security/credentials/credentials.h +9 -1
  279. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
  280. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
  281. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  282. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
  283. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
  284. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
  285. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
  286. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
  287. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
  288. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  289. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
  290. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
  291. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
  292. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
  293. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
  294. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
  295. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
  296. data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
  297. data/src/core/lib/security/security_connector/security_connector.cc +0 -1
  298. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  299. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
  300. data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
  301. data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
  302. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
  303. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
  304. data/src/core/lib/security/transport/auth_filters.h +5 -2
  305. data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
  306. data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
  307. data/src/core/lib/security/transport/security_handshaker.cc +271 -303
  308. data/src/core/lib/security/transport/security_handshaker.h +11 -2
  309. data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
  310. data/src/core/lib/slice/b64.h +2 -2
  311. data/src/core/lib/slice/percent_encoding.cc +3 -3
  312. data/src/core/lib/slice/percent_encoding.h +3 -3
  313. data/src/core/lib/slice/slice.cc +174 -122
  314. data/src/core/lib/slice/slice_buffer.cc +54 -21
  315. data/src/core/lib/slice/slice_hash_table.h +4 -4
  316. data/src/core/lib/slice/slice_intern.cc +49 -107
  317. data/src/core/lib/slice/slice_internal.h +264 -3
  318. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  319. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  320. data/src/core/lib/slice/slice_utils.h +50 -0
  321. data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
  322. data/src/core/lib/surface/api_trace.h +1 -1
  323. data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
  324. data/src/core/lib/surface/call.cc +67 -46
  325. data/src/core/lib/surface/call.h +7 -2
  326. data/src/core/lib/surface/call_details.cc +0 -1
  327. data/src/core/lib/surface/channel.cc +89 -97
  328. data/src/core/lib/surface/channel.h +60 -6
  329. data/src/core/lib/surface/channel_init.h +5 -0
  330. data/src/core/lib/surface/completion_queue.cc +221 -216
  331. data/src/core/lib/surface/completion_queue.h +2 -1
  332. data/src/core/lib/surface/init.cc +82 -33
  333. data/src/core/lib/surface/init.h +1 -0
  334. data/src/core/lib/surface/init_secure.cc +1 -1
  335. data/src/core/lib/surface/lame_client.cc +5 -7
  336. data/src/core/lib/surface/server.cc +42 -47
  337. data/src/core/lib/surface/validate_metadata.cc +14 -8
  338. data/src/core/lib/surface/validate_metadata.h +13 -2
  339. data/src/core/lib/surface/version.cc +1 -1
  340. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  341. data/src/core/lib/transport/bdp_estimator.h +2 -2
  342. data/src/core/lib/transport/connectivity_state.cc +10 -40
  343. data/src/core/lib/transport/connectivity_state.h +0 -8
  344. data/src/core/lib/transport/error_utils.cc +12 -0
  345. data/src/core/lib/transport/metadata.cc +258 -267
  346. data/src/core/lib/transport/metadata.h +227 -16
  347. data/src/core/lib/transport/metadata_batch.cc +1 -1
  348. data/src/core/lib/transport/metadata_batch.h +1 -1
  349. data/src/core/lib/transport/static_metadata.cc +477 -399
  350. data/src/core/lib/transport/static_metadata.h +273 -182
  351. data/src/core/lib/transport/status_metadata.cc +3 -3
  352. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  353. data/src/core/lib/transport/timeout_encoding.h +1 -1
  354. data/src/core/lib/transport/transport.cc +39 -72
  355. data/src/core/lib/transport/transport.h +59 -24
  356. data/src/core/lib/transport/transport_impl.h +1 -1
  357. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  358. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  359. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  360. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
  361. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
  363. data/src/core/tsi/fake_transport_security.cc +4 -4
  364. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
  365. data/src/core/tsi/ssl_transport_security.cc +12 -10
  366. data/src/core/tsi/ssl_transport_security.h +24 -4
  367. data/src/ruby/bin/math_pb.rb +18 -16
  368. data/src/ruby/ext/grpc/extconf.rb +12 -4
  369. data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
  370. data/src/ruby/ext/grpc/rb_channel.c +14 -10
  371. data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
  372. data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
  373. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  374. data/src/ruby/ext/grpc/rb_grpc.c +23 -24
  375. data/src/ruby/ext/grpc/rb_grpc.h +4 -2
  376. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
  377. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
  378. data/src/ruby/ext/grpc/rb_server.c +8 -4
  379. data/src/ruby/lib/grpc/errors.rb +22 -3
  380. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  381. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
  382. data/src/ruby/lib/grpc/version.rb +1 -1
  383. data/src/ruby/pb/README.md +1 -1
  384. data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
  385. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
  386. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
  388. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
  389. data/src/ruby/spec/errors_spec.rb +141 -0
  390. data/third_party/cares/cares/ares.h +12 -0
  391. data/third_party/cares/cares/ares_create_query.c +5 -1
  392. data/third_party/cares/cares/ares_data.c +74 -73
  393. data/third_party/cares/cares/ares_destroy.c +6 -1
  394. data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
  395. data/third_party/cares/cares/ares_gethostbyname.c +15 -4
  396. data/third_party/cares/cares/ares_getnameinfo.c +11 -0
  397. data/third_party/cares/cares/ares_init.c +274 -173
  398. data/third_party/cares/cares/ares_library_init.c +21 -3
  399. data/third_party/cares/cares/ares_options.c +6 -2
  400. data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
  401. data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
  402. data/third_party/cares/cares/ares_platform.c +7 -0
  403. data/third_party/cares/cares/ares_private.h +19 -11
  404. data/third_party/cares/cares/ares_process.c +27 -2
  405. data/third_party/cares/cares/ares_rules.h +1 -1
  406. data/third_party/cares/cares/ares_search.c +7 -0
  407. data/third_party/cares/cares/ares_send.c +6 -0
  408. data/third_party/cares/cares/ares_strsplit.c +174 -0
  409. data/third_party/cares/cares/ares_strsplit.h +43 -0
  410. data/third_party/cares/cares/ares_version.h +4 -4
  411. data/third_party/cares/cares/config-win32.h +1 -1
  412. data/third_party/cares/cares/inet_ntop.c +2 -3
  413. data/third_party/cares/config_darwin/ares_config.h +3 -0
  414. data/third_party/cares/config_freebsd/ares_config.h +3 -0
  415. data/third_party/cares/config_linux/ares_config.h +3 -0
  416. data/third_party/cares/config_openbsd/ares_config.h +3 -0
  417. metadata +83 -48
  418. data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
  419. data/src/core/ext/filters/client_channel/request_routing.h +0 -177
  420. data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
  421. data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
  422. data/src/core/lib/channel/handshaker_factory.cc +0 -42
  423. data/src/core/lib/gpr/arena.cc +0 -192
  424. data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
  425. data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
  426. data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
  427. data/src/core/lib/transport/service_config.cc +0 -106
  428. data/src/core/lib/transport/service_config.h +0 -249
@@ -4,22 +4,24 @@
4
4
  require 'google/protobuf'
5
5
 
6
6
  Google::Protobuf::DescriptorPool.generated_pool.build do
7
- add_message "math.DivArgs" do
8
- optional :dividend, :int64, 1
9
- optional :divisor, :int64, 2
10
- end
11
- add_message "math.DivReply" do
12
- optional :quotient, :int64, 1
13
- optional :remainder, :int64, 2
14
- end
15
- add_message "math.FibArgs" do
16
- optional :limit, :int64, 1
17
- end
18
- add_message "math.Num" do
19
- optional :num, :int64, 1
20
- end
21
- add_message "math.FibReply" do
22
- optional :count, :int64, 1
7
+ add_file("math.proto", :syntax => :proto3) do
8
+ add_message "math.DivArgs" do
9
+ optional :dividend, :int64, 1
10
+ optional :divisor, :int64, 2
11
+ end
12
+ add_message "math.DivReply" do
13
+ optional :quotient, :int64, 1
14
+ optional :remainder, :int64, 2
15
+ end
16
+ add_message "math.FibArgs" do
17
+ optional :limit, :int64, 1
18
+ end
19
+ add_message "math.Num" do
20
+ optional :num, :int64, 1
21
+ end
22
+ add_message "math.FibReply" do
23
+ optional :count, :int64, 1
24
+ end
23
25
  end
24
26
  end
25
27
 
@@ -24,10 +24,18 @@ grpc_config = ENV['GRPC_CONFIG'] || 'opt'
24
24
 
25
25
  ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.7'
26
26
 
27
- ENV['AR'] = RbConfig::CONFIG['AR'] + ' rcs'
28
- ENV['CC'] = RbConfig::CONFIG['CC']
29
- ENV['CXX'] = RbConfig::CONFIG['CXX']
30
- ENV['LD'] = ENV['CC']
27
+ if ENV['AR'].nil? || ENV['AR'].size == 0
28
+ ENV['AR'] = RbConfig::CONFIG['AR'] + ' rcs'
29
+ end
30
+ if ENV['CC'].nil? || ENV['CC'].size == 0
31
+ ENV['CC'] = RbConfig::CONFIG['CC']
32
+ end
33
+ if ENV['CXX'].nil? || ENV['CXX'].size == 0
34
+ ENV['CXX'] = RbConfig::CONFIG['CXX']
35
+ end
36
+ if ENV['LD'].nil? || ENV['LD'].size == 0
37
+ ENV['LD'] = ENV['CC']
38
+ end
31
39
 
32
40
  ENV['AR'] = 'libtool -o' if RUBY_PLATFORM =~ /darwin/
33
41
 
@@ -134,8 +134,7 @@ static void grpc_rb_call_credentials_plugin_destroy(void* state) {
134
134
  // Not sure what needs to be done here
135
135
  }
136
136
 
137
- /* Destroys the credentials instances. */
138
- static void grpc_rb_call_credentials_free(void* p) {
137
+ static void grpc_rb_call_credentials_free_internal(void* p) {
139
138
  grpc_rb_call_credentials* wrapper;
140
139
  if (p == NULL) {
141
140
  return;
@@ -143,10 +142,15 @@ static void grpc_rb_call_credentials_free(void* p) {
143
142
  wrapper = (grpc_rb_call_credentials*)p;
144
143
  grpc_call_credentials_release(wrapper->wrapped);
145
144
  wrapper->wrapped = NULL;
146
-
147
145
  xfree(p);
148
146
  }
149
147
 
148
+ /* Destroys the credentials instances. */
149
+ static void grpc_rb_call_credentials_free(void* p) {
150
+ grpc_rb_call_credentials_free_internal(p);
151
+ grpc_ruby_shutdown();
152
+ }
153
+
150
154
  /* Protects the mark object from GC */
151
155
  static void grpc_rb_call_credentials_mark(void* p) {
152
156
  grpc_rb_call_credentials* wrapper = NULL;
@@ -175,6 +179,7 @@ static rb_data_type_t grpc_rb_call_credentials_data_type = {
175
179
  /* Allocates CallCredentials instances.
176
180
  Provides safe initial defaults for the instance fields. */
177
181
  static VALUE grpc_rb_call_credentials_alloc(VALUE cls) {
182
+ grpc_ruby_init();
178
183
  grpc_rb_call_credentials* wrapper = ALLOC(grpc_rb_call_credentials);
179
184
  wrapper->wrapped = NULL;
180
185
  wrapper->mark = Qnil;
@@ -212,8 +217,6 @@ static VALUE grpc_rb_call_credentials_init(VALUE self, VALUE proc) {
212
217
  grpc_call_credentials* creds = NULL;
213
218
  grpc_metadata_credentials_plugin plugin;
214
219
 
215
- grpc_ruby_once_init();
216
-
217
220
  TypedData_Get_Struct(self, grpc_rb_call_credentials,
218
221
  &grpc_rb_call_credentials_data_type, wrapper);
219
222
 
@@ -143,26 +143,29 @@ static void* channel_safe_destroy_without_gil(void* arg) {
143
143
  return NULL;
144
144
  }
145
145
 
146
- /* Destroys Channel instances. */
147
- static void grpc_rb_channel_free(void* p) {
146
+ static void grpc_rb_channel_free_internal(void* p) {
148
147
  grpc_rb_channel* ch = NULL;
149
148
  if (p == NULL) {
150
149
  return;
151
150
  };
152
151
  ch = (grpc_rb_channel*)p;
153
-
154
152
  if (ch->bg_wrapped != NULL) {
155
153
  /* assumption made here: it's ok to directly gpr_mu_lock the global
156
- * connection polling mutex becuse we're in a finalizer,
154
+ * connection polling mutex because we're in a finalizer,
157
155
  * and we can count on this thread to not be interrupted or
158
156
  * yield the gil. */
159
157
  grpc_rb_channel_safe_destroy(ch->bg_wrapped);
160
158
  ch->bg_wrapped = NULL;
161
159
  }
162
-
163
160
  xfree(p);
164
161
  }
165
162
 
163
+ /* Destroys Channel instances. */
164
+ static void grpc_rb_channel_free(void* p) {
165
+ grpc_rb_channel_free_internal(p);
166
+ grpc_ruby_shutdown();
167
+ }
168
+
166
169
  /* Protects the mark object from GC */
167
170
  static void grpc_rb_channel_mark(void* p) {
168
171
  grpc_rb_channel* channel = NULL;
@@ -189,6 +192,7 @@ static rb_data_type_t grpc_channel_data_type = {"grpc_channel",
189
192
 
190
193
  /* Allocates grpc_rb_channel instances. */
191
194
  static VALUE grpc_rb_channel_alloc(VALUE cls) {
195
+ grpc_ruby_init();
192
196
  grpc_rb_channel* wrapper = ALLOC(grpc_rb_channel);
193
197
  wrapper->bg_wrapped = NULL;
194
198
  wrapper->credentials = Qnil;
@@ -216,7 +220,6 @@ static VALUE grpc_rb_channel_init(int argc, VALUE* argv, VALUE self) {
216
220
  int stop_waiting_for_thread_start = 0;
217
221
  MEMZERO(&args, grpc_channel_args, 1);
218
222
 
219
- grpc_ruby_once_init();
220
223
  grpc_ruby_fork_guard();
221
224
  rb_thread_call_without_gvl(
222
225
  wait_until_channel_polling_thread_started_no_gil,
@@ -292,7 +295,7 @@ static void* get_state_without_gil(void* arg) {
292
295
  Indicates the current state of the channel, whose value is one of the
293
296
  constants defined in GRPC::Core::ConnectivityStates.
294
297
 
295
- It also tries to connect if the chennel is idle in the second form. */
298
+ It also tries to connect if the channel is idle in the second form. */
296
299
  static VALUE grpc_rb_channel_get_connectivity_state(int argc, VALUE* argv,
297
300
  VALUE self) {
298
301
  VALUE try_to_connect_param = Qfalse;
@@ -327,8 +330,8 @@ static void* wait_for_watch_state_op_complete_without_gvl(void* arg) {
327
330
  void* success = (void*)0;
328
331
 
329
332
  gpr_mu_lock(&global_connection_polling_mu);
330
- // its unsafe to do a "watch" after "channel polling abort" because the cq has
331
- // been shut down.
333
+ // it's unsafe to do a "watch" after "channel polling abort" because the cq
334
+ // has been shut down.
332
335
  if (abort_channel_polling || stack->bg_wrapped->channel_destroyed) {
333
336
  gpr_mu_unlock(&global_connection_polling_mu);
334
337
  return (void*)0;
@@ -682,9 +685,10 @@ static VALUE run_poll_channels_loop(VALUE arg) {
682
685
  gpr_log(
683
686
  GPR_DEBUG,
684
687
  "GRPC_RUBY: run_poll_channels_loop - create connection polling thread");
688
+ grpc_ruby_init();
685
689
  rb_thread_call_without_gvl(run_poll_channels_loop_no_gil, NULL,
686
690
  run_poll_channels_loop_unblocking_func, NULL);
687
-
691
+ grpc_ruby_shutdown();
688
692
  return Qnil;
689
693
  }
690
694
 
@@ -48,8 +48,7 @@ typedef struct grpc_rb_channel_credentials {
48
48
  grpc_channel_credentials* wrapped;
49
49
  } grpc_rb_channel_credentials;
50
50
 
51
- /* Destroys the credentials instances. */
52
- static void grpc_rb_channel_credentials_free(void* p) {
51
+ static void grpc_rb_channel_credentials_free_internal(void* p) {
53
52
  grpc_rb_channel_credentials* wrapper = NULL;
54
53
  if (p == NULL) {
55
54
  return;
@@ -61,6 +60,12 @@ static void grpc_rb_channel_credentials_free(void* p) {
61
60
  xfree(p);
62
61
  }
63
62
 
63
+ /* Destroys the credentials instances. */
64
+ static void grpc_rb_channel_credentials_free(void* p) {
65
+ grpc_rb_channel_credentials_free_internal(p);
66
+ grpc_ruby_shutdown();
67
+ }
68
+
64
69
  /* Protects the mark object from GC */
65
70
  static void grpc_rb_channel_credentials_mark(void* p) {
66
71
  grpc_rb_channel_credentials* wrapper = NULL;
@@ -90,6 +95,7 @@ static rb_data_type_t grpc_rb_channel_credentials_data_type = {
90
95
  /* Allocates ChannelCredential instances.
91
96
  Provides safe initial defaults for the instance fields. */
92
97
  static VALUE grpc_rb_channel_credentials_alloc(VALUE cls) {
98
+ grpc_ruby_init();
93
99
  grpc_rb_channel_credentials* wrapper = ALLOC(grpc_rb_channel_credentials);
94
100
  wrapper->wrapped = NULL;
95
101
  wrapper->mark = Qnil;
@@ -147,8 +153,6 @@ static VALUE grpc_rb_channel_credentials_init(int argc, VALUE* argv,
147
153
  const char* pem_root_certs_cstr = NULL;
148
154
  MEMZERO(&key_cert_pair, grpc_ssl_pem_key_cert_pair, 1);
149
155
 
150
- grpc_ruby_once_init();
151
-
152
156
  /* "03" == no mandatory arg, 3 optional */
153
157
  rb_scan_args(argc, argv, "03", &pem_root_certs, &pem_private_key,
154
158
  &pem_cert_chain);
@@ -52,23 +52,26 @@ typedef struct grpc_rb_compression_options {
52
52
  grpc_compression_options* wrapped;
53
53
  } grpc_rb_compression_options;
54
54
 
55
- /* Destroys the compression options instances and free the
56
- * wrapped grpc compression options. */
57
- static void grpc_rb_compression_options_free(void* p) {
55
+ static void grpc_rb_compression_options_free_internal(void* p) {
58
56
  grpc_rb_compression_options* wrapper = NULL;
59
57
  if (p == NULL) {
60
58
  return;
61
59
  };
62
60
  wrapper = (grpc_rb_compression_options*)p;
63
-
64
61
  if (wrapper->wrapped != NULL) {
65
62
  gpr_free(wrapper->wrapped);
66
63
  wrapper->wrapped = NULL;
67
64
  }
68
-
69
65
  xfree(p);
70
66
  }
71
67
 
68
+ /* Destroys the compression options instances and free the
69
+ * wrapped grpc compression options. */
70
+ static void grpc_rb_compression_options_free(void* p) {
71
+ grpc_rb_compression_options_free_internal(p);
72
+ grpc_ruby_shutdown();
73
+ }
74
+
72
75
  /* Ruby recognized data type for the CompressionOptions class. */
73
76
  static rb_data_type_t grpc_rb_compression_options_data_type = {
74
77
  "grpc_compression_options",
@@ -87,10 +90,9 @@ static rb_data_type_t grpc_rb_compression_options_data_type = {
87
90
  Allocate the wrapped grpc compression options and
88
91
  initialize it here too. */
89
92
  static VALUE grpc_rb_compression_options_alloc(VALUE cls) {
93
+ grpc_ruby_init();
90
94
  grpc_rb_compression_options* wrapper = NULL;
91
95
 
92
- grpc_ruby_once_init();
93
-
94
96
  wrapper = gpr_malloc(sizeof(grpc_rb_compression_options));
95
97
  wrapper->wrapped = NULL;
96
98
  wrapper->wrapped = gpr_malloc(sizeof(grpc_compression_options));
@@ -115,6 +115,7 @@ static void grpc_rb_event_unblocking_func(void* arg) {
115
115
  static VALUE grpc_rb_event_thread(VALUE arg) {
116
116
  grpc_rb_event* event;
117
117
  (void)arg;
118
+ grpc_ruby_init();
118
119
  while (true) {
119
120
  event = (grpc_rb_event*)rb_thread_call_without_gvl(
120
121
  grpc_rb_wait_for_event_no_gil, NULL, grpc_rb_event_unblocking_func,
@@ -128,6 +129,7 @@ static VALUE grpc_rb_event_thread(VALUE arg) {
128
129
  }
129
130
  }
130
131
  grpc_rb_event_queue_destroy();
132
+ grpc_ruby_shutdown();
131
133
  return Qnil;
132
134
  }
133
135
 
@@ -276,10 +276,6 @@ static bool grpc_ruby_forked_after_init(void) {
276
276
  }
277
277
  #endif
278
278
 
279
- static void grpc_rb_shutdown(void) {
280
- if (!grpc_ruby_forked_after_init()) grpc_shutdown();
281
- }
282
-
283
279
  /* Initialize the GRPC module structs */
284
280
 
285
281
  /* grpc_rb_sNewServerRpc is the struct that holds new server rpc details. */
@@ -298,12 +294,6 @@ VALUE sym_metadata = Qundef;
298
294
 
299
295
  static gpr_once g_once_init = GPR_ONCE_INIT;
300
296
 
301
- static void grpc_ruby_once_init_internal() {
302
- grpc_ruby_set_init_pid();
303
- grpc_init();
304
- atexit(grpc_rb_shutdown);
305
- }
306
-
307
297
  void grpc_ruby_fork_guard() {
308
298
  if (grpc_ruby_forked_after_init()) {
309
299
  rb_raise(rb_eRuntimeError, "grpc cannot be used before and after forking");
@@ -313,20 +303,8 @@ void grpc_ruby_fork_guard() {
313
303
  static VALUE bg_thread_init_rb_mu = Qundef;
314
304
  static int bg_thread_init_done = 0;
315
305
 
316
- void grpc_ruby_once_init() {
317
- /* ruby_vm_at_exit doesn't seem to be working. It would crash once every
318
- * blue moon, and some users are getting it repeatedly. See the discussions
319
- * - https://github.com/grpc/grpc/pull/5337
320
- * - https://bugs.ruby-lang.org/issues/12095
321
- *
322
- * In order to still be able to handle the (unlikely) situation where the
323
- * extension is loaded by a first Ruby VM that is subsequently destroyed,
324
- * then loaded again by another VM within the same process, we need to
325
- * schedule our initialization and destruction only once.
326
- */
327
- gpr_once_init(&g_once_init, grpc_ruby_once_init_internal);
328
-
329
- // Avoid calling calling into ruby library (when creating threads here)
306
+ static void grpc_ruby_init_threads() {
307
+ // Avoid calling into ruby library (when creating threads here)
330
308
  // in gpr_once_init. In general, it appears to be unsafe to call
331
309
  // into the ruby library while holding a non-ruby mutex, because a gil yield
332
310
  // could end up trying to lock onto that same mutex and deadlocking.
@@ -339,6 +317,27 @@ void grpc_ruby_once_init() {
339
317
  rb_mutex_unlock(bg_thread_init_rb_mu);
340
318
  }
341
319
 
320
+ static int64_t g_grpc_ruby_init_count;
321
+
322
+ void grpc_ruby_init() {
323
+ gpr_once_init(&g_once_init, grpc_ruby_set_init_pid);
324
+ grpc_init();
325
+ grpc_ruby_init_threads();
326
+ // (only gpr_log after logging has been initialized)
327
+ gpr_log(GPR_DEBUG,
328
+ "GRPC_RUBY: grpc_ruby_init - prev g_grpc_ruby_init_count:%" PRId64,
329
+ g_grpc_ruby_init_count++);
330
+ }
331
+
332
+ void grpc_ruby_shutdown() {
333
+ GPR_ASSERT(g_grpc_ruby_init_count > 0);
334
+ if (!grpc_ruby_forked_after_init()) grpc_shutdown();
335
+ gpr_log(
336
+ GPR_DEBUG,
337
+ "GRPC_RUBY: grpc_ruby_shutdown - prev g_grpc_ruby_init_count:%" PRId64,
338
+ g_grpc_ruby_init_count--);
339
+ }
340
+
342
341
  void Init_grpc_c() {
343
342
  if (!grpc_rb_load_core()) {
344
343
  rb_raise(rb_eLoadError, "Couldn't find or load gRPC's dynamic C core");
@@ -67,8 +67,10 @@ VALUE grpc_rb_cannot_init_copy(VALUE copy, VALUE self);
67
67
  /* grpc_rb_time_timeval creates a gpr_timespec from a ruby time object. */
68
68
  gpr_timespec grpc_rb_time_timeval(VALUE time, int interval);
69
69
 
70
- void grpc_ruby_once_init();
71
-
72
70
  void grpc_ruby_fork_guard();
73
71
 
72
+ void grpc_ruby_init();
73
+
74
+ void grpc_ruby_shutdown();
75
+
74
76
  #endif /* GRPC_RB_H_ */
@@ -39,6 +39,7 @@ grpc_register_plugin_type grpc_register_plugin_import;
39
39
  grpc_init_type grpc_init_import;
40
40
  grpc_shutdown_type grpc_shutdown_import;
41
41
  grpc_is_initialized_type grpc_is_initialized_import;
42
+ grpc_shutdown_blocking_type grpc_shutdown_blocking_import;
42
43
  grpc_version_string_type grpc_version_string_import;
43
44
  grpc_g_stands_for_type grpc_g_stands_for_import;
44
45
  grpc_completion_queue_factory_lookup_type grpc_completion_queue_factory_lookup_import;
@@ -123,6 +124,7 @@ grpc_channel_credentials_release_type grpc_channel_credentials_release_import;
123
124
  grpc_google_default_credentials_create_type grpc_google_default_credentials_create_import;
124
125
  grpc_set_ssl_roots_override_callback_type grpc_set_ssl_roots_override_callback_import;
125
126
  grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import;
127
+ grpc_ssl_credentials_create_ex_type grpc_ssl_credentials_create_ex_import;
126
128
  grpc_call_credentials_release_type grpc_call_credentials_release_import;
127
129
  grpc_composite_channel_credentials_create_type grpc_composite_channel_credentials_create_import;
128
130
  grpc_composite_call_credentials_create_type grpc_composite_call_credentials_create_import;
@@ -154,6 +156,15 @@ grpc_alts_credentials_create_type grpc_alts_credentials_create_import;
154
156
  grpc_alts_server_credentials_create_type grpc_alts_server_credentials_create_import;
155
157
  grpc_local_credentials_create_type grpc_local_credentials_create_import;
156
158
  grpc_local_server_credentials_create_type grpc_local_server_credentials_create_import;
159
+ grpc_tls_credentials_options_create_type grpc_tls_credentials_options_create_import;
160
+ grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import;
161
+ grpc_tls_credentials_options_set_key_materials_config_type grpc_tls_credentials_options_set_key_materials_config_import;
162
+ grpc_tls_credentials_options_set_credential_reload_config_type grpc_tls_credentials_options_set_credential_reload_config_import;
163
+ grpc_tls_credentials_options_set_server_authorization_check_config_type grpc_tls_credentials_options_set_server_authorization_check_config_import;
164
+ grpc_tls_key_materials_config_create_type grpc_tls_key_materials_config_create_import;
165
+ grpc_tls_key_materials_config_set_key_materials_type grpc_tls_key_materials_config_set_key_materials_import;
166
+ grpc_tls_credential_reload_config_create_type grpc_tls_credential_reload_config_create_import;
167
+ grpc_tls_server_authorization_check_config_create_type grpc_tls_server_authorization_check_config_create_import;
157
168
  grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import;
158
169
  grpc_raw_compressed_byte_buffer_create_type grpc_raw_compressed_byte_buffer_create_import;
159
170
  grpc_byte_buffer_copy_type grpc_byte_buffer_copy_import;
@@ -162,6 +173,7 @@ grpc_byte_buffer_destroy_type grpc_byte_buffer_destroy_import;
162
173
  grpc_byte_buffer_reader_init_type grpc_byte_buffer_reader_init_import;
163
174
  grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_import;
164
175
  grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import;
176
+ grpc_byte_buffer_reader_peek_type grpc_byte_buffer_reader_peek_import;
165
177
  grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import;
166
178
  grpc_raw_byte_buffer_from_reader_type grpc_raw_byte_buffer_from_reader_import;
167
179
  gpr_log_severity_string_type gpr_log_severity_string_import;
@@ -297,6 +309,7 @@ void grpc_rb_load_imports(HMODULE library) {
297
309
  grpc_init_import = (grpc_init_type) GetProcAddress(library, "grpc_init");
298
310
  grpc_shutdown_import = (grpc_shutdown_type) GetProcAddress(library, "grpc_shutdown");
299
311
  grpc_is_initialized_import = (grpc_is_initialized_type) GetProcAddress(library, "grpc_is_initialized");
312
+ grpc_shutdown_blocking_import = (grpc_shutdown_blocking_type) GetProcAddress(library, "grpc_shutdown_blocking");
300
313
  grpc_version_string_import = (grpc_version_string_type) GetProcAddress(library, "grpc_version_string");
301
314
  grpc_g_stands_for_import = (grpc_g_stands_for_type) GetProcAddress(library, "grpc_g_stands_for");
302
315
  grpc_completion_queue_factory_lookup_import = (grpc_completion_queue_factory_lookup_type) GetProcAddress(library, "grpc_completion_queue_factory_lookup");
@@ -381,6 +394,7 @@ void grpc_rb_load_imports(HMODULE library) {
381
394
  grpc_google_default_credentials_create_import = (grpc_google_default_credentials_create_type) GetProcAddress(library, "grpc_google_default_credentials_create");
382
395
  grpc_set_ssl_roots_override_callback_import = (grpc_set_ssl_roots_override_callback_type) GetProcAddress(library, "grpc_set_ssl_roots_override_callback");
383
396
  grpc_ssl_credentials_create_import = (grpc_ssl_credentials_create_type) GetProcAddress(library, "grpc_ssl_credentials_create");
397
+ grpc_ssl_credentials_create_ex_import = (grpc_ssl_credentials_create_ex_type) GetProcAddress(library, "grpc_ssl_credentials_create_ex");
384
398
  grpc_call_credentials_release_import = (grpc_call_credentials_release_type) GetProcAddress(library, "grpc_call_credentials_release");
385
399
  grpc_composite_channel_credentials_create_import = (grpc_composite_channel_credentials_create_type) GetProcAddress(library, "grpc_composite_channel_credentials_create");
386
400
  grpc_composite_call_credentials_create_import = (grpc_composite_call_credentials_create_type) GetProcAddress(library, "grpc_composite_call_credentials_create");
@@ -412,6 +426,15 @@ void grpc_rb_load_imports(HMODULE library) {
412
426
  grpc_alts_server_credentials_create_import = (grpc_alts_server_credentials_create_type) GetProcAddress(library, "grpc_alts_server_credentials_create");
413
427
  grpc_local_credentials_create_import = (grpc_local_credentials_create_type) GetProcAddress(library, "grpc_local_credentials_create");
414
428
  grpc_local_server_credentials_create_import = (grpc_local_server_credentials_create_type) GetProcAddress(library, "grpc_local_server_credentials_create");
429
+ grpc_tls_credentials_options_create_import = (grpc_tls_credentials_options_create_type) GetProcAddress(library, "grpc_tls_credentials_options_create");
430
+ grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type");
431
+ grpc_tls_credentials_options_set_key_materials_config_import = (grpc_tls_credentials_options_set_key_materials_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_key_materials_config");
432
+ grpc_tls_credentials_options_set_credential_reload_config_import = (grpc_tls_credentials_options_set_credential_reload_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_credential_reload_config");
433
+ grpc_tls_credentials_options_set_server_authorization_check_config_import = (grpc_tls_credentials_options_set_server_authorization_check_config_type) GetProcAddress(library, "grpc_tls_credentials_options_set_server_authorization_check_config");
434
+ grpc_tls_key_materials_config_create_import = (grpc_tls_key_materials_config_create_type) GetProcAddress(library, "grpc_tls_key_materials_config_create");
435
+ grpc_tls_key_materials_config_set_key_materials_import = (grpc_tls_key_materials_config_set_key_materials_type) GetProcAddress(library, "grpc_tls_key_materials_config_set_key_materials");
436
+ grpc_tls_credential_reload_config_create_import = (grpc_tls_credential_reload_config_create_type) GetProcAddress(library, "grpc_tls_credential_reload_config_create");
437
+ grpc_tls_server_authorization_check_config_create_import = (grpc_tls_server_authorization_check_config_create_type) GetProcAddress(library, "grpc_tls_server_authorization_check_config_create");
415
438
  grpc_raw_byte_buffer_create_import = (grpc_raw_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_byte_buffer_create");
416
439
  grpc_raw_compressed_byte_buffer_create_import = (grpc_raw_compressed_byte_buffer_create_type) GetProcAddress(library, "grpc_raw_compressed_byte_buffer_create");
417
440
  grpc_byte_buffer_copy_import = (grpc_byte_buffer_copy_type) GetProcAddress(library, "grpc_byte_buffer_copy");
@@ -420,6 +443,7 @@ void grpc_rb_load_imports(HMODULE library) {
420
443
  grpc_byte_buffer_reader_init_import = (grpc_byte_buffer_reader_init_type) GetProcAddress(library, "grpc_byte_buffer_reader_init");
421
444
  grpc_byte_buffer_reader_destroy_import = (grpc_byte_buffer_reader_destroy_type) GetProcAddress(library, "grpc_byte_buffer_reader_destroy");
422
445
  grpc_byte_buffer_reader_next_import = (grpc_byte_buffer_reader_next_type) GetProcAddress(library, "grpc_byte_buffer_reader_next");
446
+ grpc_byte_buffer_reader_peek_import = (grpc_byte_buffer_reader_peek_type) GetProcAddress(library, "grpc_byte_buffer_reader_peek");
423
447
  grpc_byte_buffer_reader_readall_import = (grpc_byte_buffer_reader_readall_type) GetProcAddress(library, "grpc_byte_buffer_reader_readall");
424
448
  grpc_raw_byte_buffer_from_reader_import = (grpc_raw_byte_buffer_from_reader_type) GetProcAddress(library, "grpc_raw_byte_buffer_from_reader");
425
449
  gpr_log_severity_string_import = (gpr_log_severity_string_type) GetProcAddress(library, "gpr_log_severity_string");
@@ -92,6 +92,9 @@ extern grpc_shutdown_type grpc_shutdown_import;
92
92
  typedef int(*grpc_is_initialized_type)(void);
93
93
  extern grpc_is_initialized_type grpc_is_initialized_import;
94
94
  #define grpc_is_initialized grpc_is_initialized_import
95
+ typedef void(*grpc_shutdown_blocking_type)(void);
96
+ extern grpc_shutdown_blocking_type grpc_shutdown_blocking_import;
97
+ #define grpc_shutdown_blocking grpc_shutdown_blocking_import
95
98
  typedef const char*(*grpc_version_string_type)(void);
96
99
  extern grpc_version_string_type grpc_version_string_import;
97
100
  #define grpc_version_string grpc_version_string_import
@@ -344,6 +347,9 @@ extern grpc_set_ssl_roots_override_callback_type grpc_set_ssl_roots_override_cal
344
347
  typedef grpc_channel_credentials*(*grpc_ssl_credentials_create_type)(const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const verify_peer_options* verify_options, void* reserved);
345
348
  extern grpc_ssl_credentials_create_type grpc_ssl_credentials_create_import;
346
349
  #define grpc_ssl_credentials_create grpc_ssl_credentials_create_import
350
+ typedef grpc_channel_credentials*(*grpc_ssl_credentials_create_ex_type)(const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair, const grpc_ssl_verify_peer_options* verify_options, void* reserved);
351
+ extern grpc_ssl_credentials_create_ex_type grpc_ssl_credentials_create_ex_import;
352
+ #define grpc_ssl_credentials_create_ex grpc_ssl_credentials_create_ex_import
347
353
  typedef void(*grpc_call_credentials_release_type)(grpc_call_credentials* creds);
348
354
  extern grpc_call_credentials_release_type grpc_call_credentials_release_import;
349
355
  #define grpc_call_credentials_release grpc_call_credentials_release_import
@@ -437,6 +443,33 @@ extern grpc_local_credentials_create_type grpc_local_credentials_create_import;
437
443
  typedef grpc_server_credentials*(*grpc_local_server_credentials_create_type)(grpc_local_connect_type type);
438
444
  extern grpc_local_server_credentials_create_type grpc_local_server_credentials_create_import;
439
445
  #define grpc_local_server_credentials_create grpc_local_server_credentials_create_import
446
+ typedef grpc_tls_credentials_options*(*grpc_tls_credentials_options_create_type)(void);
447
+ extern grpc_tls_credentials_options_create_type grpc_tls_credentials_options_create_import;
448
+ #define grpc_tls_credentials_options_create grpc_tls_credentials_options_create_import
449
+ typedef int(*grpc_tls_credentials_options_set_cert_request_type_type)(grpc_tls_credentials_options* options, grpc_ssl_client_certificate_request_type type);
450
+ extern grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import;
451
+ #define grpc_tls_credentials_options_set_cert_request_type grpc_tls_credentials_options_set_cert_request_type_import
452
+ typedef int(*grpc_tls_credentials_options_set_key_materials_config_type)(grpc_tls_credentials_options* options, grpc_tls_key_materials_config* config);
453
+ extern grpc_tls_credentials_options_set_key_materials_config_type grpc_tls_credentials_options_set_key_materials_config_import;
454
+ #define grpc_tls_credentials_options_set_key_materials_config grpc_tls_credentials_options_set_key_materials_config_import
455
+ typedef int(*grpc_tls_credentials_options_set_credential_reload_config_type)(grpc_tls_credentials_options* options, grpc_tls_credential_reload_config* config);
456
+ extern grpc_tls_credentials_options_set_credential_reload_config_type grpc_tls_credentials_options_set_credential_reload_config_import;
457
+ #define grpc_tls_credentials_options_set_credential_reload_config grpc_tls_credentials_options_set_credential_reload_config_import
458
+ typedef int(*grpc_tls_credentials_options_set_server_authorization_check_config_type)(grpc_tls_credentials_options* options, grpc_tls_server_authorization_check_config* config);
459
+ extern grpc_tls_credentials_options_set_server_authorization_check_config_type grpc_tls_credentials_options_set_server_authorization_check_config_import;
460
+ #define grpc_tls_credentials_options_set_server_authorization_check_config grpc_tls_credentials_options_set_server_authorization_check_config_import
461
+ typedef grpc_tls_key_materials_config*(*grpc_tls_key_materials_config_create_type)(void);
462
+ extern grpc_tls_key_materials_config_create_type grpc_tls_key_materials_config_create_import;
463
+ #define grpc_tls_key_materials_config_create grpc_tls_key_materials_config_create_import
464
+ typedef int(*grpc_tls_key_materials_config_set_key_materials_type)(grpc_tls_key_materials_config* config, const char* pem_root_certs, const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs, size_t num_key_cert_pairs);
465
+ extern grpc_tls_key_materials_config_set_key_materials_type grpc_tls_key_materials_config_set_key_materials_import;
466
+ #define grpc_tls_key_materials_config_set_key_materials grpc_tls_key_materials_config_set_key_materials_import
467
+ typedef grpc_tls_credential_reload_config*(*grpc_tls_credential_reload_config_create_type)(const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_credential_reload_arg* arg), void (*destruct)(void* config_user_data));
468
+ extern grpc_tls_credential_reload_config_create_type grpc_tls_credential_reload_config_create_import;
469
+ #define grpc_tls_credential_reload_config_create grpc_tls_credential_reload_config_create_import
470
+ typedef grpc_tls_server_authorization_check_config*(*grpc_tls_server_authorization_check_config_create_type)(const void* config_user_data, int (*schedule)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*cancel)(void* config_user_data, grpc_tls_server_authorization_check_arg* arg), void (*destruct)(void* config_user_data));
471
+ extern grpc_tls_server_authorization_check_config_create_type grpc_tls_server_authorization_check_config_create_import;
472
+ #define grpc_tls_server_authorization_check_config_create grpc_tls_server_authorization_check_config_create_import
440
473
  typedef grpc_byte_buffer*(*grpc_raw_byte_buffer_create_type)(grpc_slice* slices, size_t nslices);
441
474
  extern grpc_raw_byte_buffer_create_type grpc_raw_byte_buffer_create_import;
442
475
  #define grpc_raw_byte_buffer_create grpc_raw_byte_buffer_create_import
@@ -461,6 +494,9 @@ extern grpc_byte_buffer_reader_destroy_type grpc_byte_buffer_reader_destroy_impo
461
494
  typedef int(*grpc_byte_buffer_reader_next_type)(grpc_byte_buffer_reader* reader, grpc_slice* slice);
462
495
  extern grpc_byte_buffer_reader_next_type grpc_byte_buffer_reader_next_import;
463
496
  #define grpc_byte_buffer_reader_next grpc_byte_buffer_reader_next_import
497
+ typedef int(*grpc_byte_buffer_reader_peek_type)(grpc_byte_buffer_reader* reader, grpc_slice** slice);
498
+ extern grpc_byte_buffer_reader_peek_type grpc_byte_buffer_reader_peek_import;
499
+ #define grpc_byte_buffer_reader_peek grpc_byte_buffer_reader_peek_import
464
500
  typedef grpc_slice(*grpc_byte_buffer_reader_readall_type)(grpc_byte_buffer_reader* reader);
465
501
  extern grpc_byte_buffer_reader_readall_type grpc_byte_buffer_reader_readall_import;
466
502
  #define grpc_byte_buffer_reader_readall grpc_byte_buffer_reader_readall_import
@@ -86,8 +86,7 @@ static void grpc_rb_server_maybe_destroy(grpc_rb_server* server) {
86
86
  }
87
87
  }
88
88
 
89
- /* Destroys server instances. */
90
- static void grpc_rb_server_free(void* p) {
89
+ static void grpc_rb_server_free_internal(void* p) {
91
90
  grpc_rb_server* svr = NULL;
92
91
  gpr_timespec deadline;
93
92
  if (p == NULL) {
@@ -104,6 +103,12 @@ static void grpc_rb_server_free(void* p) {
104
103
  xfree(p);
105
104
  }
106
105
 
106
+ /* Destroys server instances. */
107
+ static void grpc_rb_server_free(void* p) {
108
+ grpc_rb_server_free_internal(p);
109
+ grpc_ruby_shutdown();
110
+ }
111
+
107
112
  static const rb_data_type_t grpc_rb_server_data_type = {
108
113
  "grpc_server",
109
114
  {GRPC_RB_GC_NOT_MARKED,
@@ -123,6 +128,7 @@ static const rb_data_type_t grpc_rb_server_data_type = {
123
128
 
124
129
  /* Allocates grpc_rb_server instances. */
125
130
  static VALUE grpc_rb_server_alloc(VALUE cls) {
131
+ grpc_ruby_init();
126
132
  grpc_rb_server* wrapper = ALLOC(grpc_rb_server);
127
133
  wrapper->wrapped = NULL;
128
134
  wrapper->destroy_done = 0;
@@ -142,8 +148,6 @@ static VALUE grpc_rb_server_init(VALUE self, VALUE channel_args) {
142
148
  grpc_channel_args args;
143
149
  MEMZERO(&args, grpc_channel_args, 1);
144
150
 
145
- grpc_ruby_once_init();
146
-
147
151
  cq = grpc_completion_queue_create_for_pluck(NULL);
148
152
  TypedData_Get_Struct(self, grpc_rb_server, &grpc_rb_server_data_type,
149
153
  wrapper);
@@ -42,12 +42,31 @@ module GRPC
42
42
  @metadata = metadata
43
43
  end
44
44
 
45
- # Converts the exception to a GRPC::Status for use in the networking
45
+ # Converts the exception to a {Struct::Status} for use in the networking
46
46
  # wrapper layer.
47
47
  #
48
- # @return [Status] with the same code and details
48
+ # @return [Struct::Status] with the same code and details
49
49
  def to_status
50
- Struct::Status.new(code, details, @metadata)
50
+ Struct::Status.new(code, details, metadata)
51
+ end
52
+
53
+ # Converts the exception to a deserialized {Google::Rpc::Status} object.
54
+ # Returns `nil` if the `grpc-status-details-bin` trailer could not be
55
+ # converted to a {Google::Rpc::Status} due to the server not providing
56
+ # the necessary trailers.
57
+ #
58
+ # @return [Google::Rpc::Status, nil]
59
+ def to_rpc_status
60
+ # Lazily require google_rpc_status_utils to scope
61
+ # loading protobuf_c.so to the users of this method.
62
+ require_relative './google_rpc_status_utils'
63
+ status = to_status
64
+ return if status.nil?
65
+ GoogleRpcStatusUtils.extract_google_rpc_status(status)
66
+ rescue Google::Protobuf::ParseError => parse_error
67
+ GRPC.logger.warn('parse error: to_rpc_status failed')
68
+ GRPC.logger.warn(parse_error)
69
+ nil
51
70
  end
52
71
 
53
72
  def self.new_status_exception(code, details = 'unknown cause',
@@ -224,7 +224,7 @@ module GRPC
224
224
  set_input_stream_done.call
225
225
  end
226
226
  GRPC.logger.debug('bidi-read-loop: finished')
227
- # Make sure that the write loop is done done before finishing the call.
227
+ # Make sure that the write loop is done before finishing the call.
228
228
  # Note that blocking is ok at this point because we've already received
229
229
  # a status
230
230
  @enq_th.join if is_client
@@ -202,7 +202,7 @@ module GRPC
202
202
  # forcing an abrupt exit to each thread.
203
203
  #
204
204
  # * connect_md_proc:
205
- # when non-nil is a proc for determining metadata to to send back the client
205
+ # when non-nil is a proc for determining metadata to send back the client
206
206
  # on receiving an invocation req. The proc signature is:
207
207
  # {key: val, ..} func(method_name, {key: val, ...})
208
208
  #
@@ -217,7 +217,7 @@ module GRPC
217
217
  def initialize(pool_size: DEFAULT_POOL_SIZE,
218
218
  max_waiting_requests: DEFAULT_MAX_WAITING_REQUESTS,
219
219
  poll_period: DEFAULT_POLL_PERIOD,
220
- pool_keep_alive: GRPC::RpcServer::DEFAULT_POOL_SIZE,
220
+ pool_keep_alive: Pool::DEFAULT_KEEP_ALIVE,
221
221
  connect_md_proc: nil,
222
222
  server_args: {},
223
223
  interceptors: [])
@@ -14,5 +14,5 @@
14
14
 
15
15
  # GRPC contains the General RPC module.
16
16
  module GRPC
17
- VERSION = '1.18.0'
17
+ VERSION = '1.22.0'
18
18
  end
@@ -7,7 +7,7 @@ code to them.
7
7
  PREREQUISITES
8
8
  -------------
9
9
 
10
- The code is is generated using the protoc (> 3.0.0.alpha.1) and the
10
+ The code is generated using the protoc (> 3.0.0.alpha.1) and the
11
11
  grpc_ruby_plugin. These must be installed to regenerate the IDL defined
12
12
  classes, but that's not necessary just to use them.
13
13