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
@@ -115,15 +115,21 @@
115
115
  #define GPR_POSIX_SUBPROCESS 1
116
116
  #define GPR_POSIX_SYNC 1
117
117
  #define GPR_POSIX_TIME 1
118
+ #define GPR_HAS_PTHREAD_H 1
118
119
  #define GPR_GETPID_IN_UNISTD_H 1
119
120
  #ifdef _LP64
120
121
  #define GPR_ARCH_64 1
121
122
  #else /* _LP64 */
122
123
  #define GPR_ARCH_32 1
123
124
  #endif /* _LP64 */
125
+ #include <linux/version.h>
124
126
  #elif defined(ANDROID) || defined(__ANDROID__)
125
127
  #define GPR_PLATFORM_STRING "android"
126
128
  #define GPR_ANDROID 1
129
+ // TODO(apolcyn): re-evaluate support for c-ares
130
+ // on android after upgrading our c-ares dependency.
131
+ // See https://github.com/grpc/grpc/issues/18038.
132
+ #define GRPC_ARES 0
127
133
  #ifdef _LP64
128
134
  #define GPR_ARCH_64 1
129
135
  #else /* _LP64 */
@@ -139,6 +145,7 @@
139
145
  #define GPR_POSIX_SUBPROCESS 1
140
146
  #define GPR_POSIX_SYNC 1
141
147
  #define GPR_POSIX_TIME 1
148
+ #define GPR_HAS_PTHREAD_H 1
142
149
  #define GPR_GETPID_IN_UNISTD_H 1
143
150
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
144
151
  #elif defined(__linux__)
@@ -165,6 +172,7 @@
165
172
  #define GPR_POSIX_SUBPROCESS 1
166
173
  #define GPR_POSIX_SYNC 1
167
174
  #define GPR_POSIX_TIME 1
175
+ #define GPR_HAS_PTHREAD_H 1
168
176
  #define GPR_GETPID_IN_UNISTD_H 1
169
177
  #ifdef _LP64
170
178
  #define GPR_ARCH_64 1
@@ -188,6 +196,9 @@
188
196
  #define GPR_PLATFORM_STRING "ios"
189
197
  #define GPR_CPU_IPHONE 1
190
198
  #define GPR_PTHREAD_TLS 1
199
+ #define GRPC_CFSTREAM 1
200
+ /* the c-ares resolver isnt safe to enable on iOS */
201
+ #define GRPC_ARES 0
191
202
  #else /* TARGET_OS_IPHONE */
192
203
  #define GPR_PLATFORM_STRING "osx"
193
204
  #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
@@ -227,8 +238,8 @@
227
238
  #define GPR_POSIX_SUBPROCESS 1
228
239
  #define GPR_POSIX_SYNC 1
229
240
  #define GPR_POSIX_TIME 1
241
+ #define GPR_HAS_PTHREAD_H 1
230
242
  #define GPR_GETPID_IN_UNISTD_H 1
231
- /* TODO(mxyan): Remove when CFStream becomes default */
232
243
  #ifndef GRPC_CFSTREAM
233
244
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
234
245
  #endif
@@ -253,6 +264,7 @@
253
264
  #define GPR_POSIX_SUBPROCESS 1
254
265
  #define GPR_POSIX_SYNC 1
255
266
  #define GPR_POSIX_TIME 1
267
+ #define GPR_HAS_PTHREAD_H 1
256
268
  #define GPR_GETPID_IN_UNISTD_H 1
257
269
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
258
270
  #ifdef _LP64
@@ -276,6 +288,7 @@
276
288
  #define GPR_POSIX_SUBPROCESS 1
277
289
  #define GPR_POSIX_SYNC 1
278
290
  #define GPR_POSIX_TIME 1
291
+ #define GPR_HAS_PTHREAD_H 1
279
292
  #define GPR_GETPID_IN_UNISTD_H 1
280
293
  #define GPR_SUPPORT_CHANNELS_FROM_FD 1
281
294
  #ifdef _LP64
@@ -296,6 +309,7 @@
296
309
  #define GPR_POSIX_SUBPROCESS 1
297
310
  #define GPR_POSIX_SYNC 1
298
311
  #define GPR_POSIX_TIME 1
312
+ #define GPR_HAS_PTHREAD_H 1
299
313
  #define GPR_GETPID_IN_UNISTD_H 1
300
314
  #ifdef _LP64
301
315
  #define GPR_ARCH_64 1
@@ -318,6 +332,7 @@
318
332
  #define GPR_POSIX_SUBPROCESS 1
319
333
  #define GPR_POSIX_SYNC 1
320
334
  #define GPR_POSIX_TIME 1
335
+ #define GPR_HAS_PTHREAD_H 1
321
336
  #define GPR_GETPID_IN_UNISTD_H 1
322
337
  #ifdef _LP64
323
338
  #define GPR_ARCH_64 1
@@ -346,12 +361,34 @@
346
361
  #define GPR_POSIX_SUBPROCESS 1
347
362
  #define GPR_POSIX_SYNC 1
348
363
  #define GPR_POSIX_TIME 1
364
+ #define GPR_HAS_PTHREAD_H 1
349
365
  #define GPR_GETPID_IN_UNISTD_H 1
350
366
  #ifdef _LP64
351
367
  #define GPR_ARCH_64 1
352
368
  #else /* _LP64 */
353
369
  #define GPR_ARCH_32 1
354
370
  #endif /* _LP64 */
371
+ #elif defined(__Fuchsia__)
372
+ #define GPR_FUCHSIA 1
373
+ #define GPR_ARCH_64 1
374
+ #define GPR_PLATFORM_STRING "fuchsia"
375
+ #include <features.h>
376
+ // Specifying musl libc affects wrap_memcpy.c. It causes memmove() to be
377
+ // invoked.
378
+ #define GPR_MUSL_LIBC_COMPAT 1
379
+ #define GPR_CPU_POSIX 1
380
+ #define GPR_GCC_ATOMIC 1
381
+ #define GPR_PTHREAD_TLS 1
382
+ #define GPR_POSIX_LOG 1
383
+ #define GPR_POSIX_SYNC 1
384
+ #define GPR_POSIX_ENV 1
385
+ #define GPR_POSIX_TMPFILE 1
386
+ #define GPR_POSIX_SUBPROCESS 1
387
+ #define GPR_POSIX_SYNC 1
388
+ #define GPR_POSIX_STRING 1
389
+ #define GPR_POSIX_TIME 1
390
+ #define GPR_HAS_PTHREAD_H 1
391
+ #define GPR_GETPID_IN_UNISTD_H 1
355
392
  #else
356
393
  #error "Could not auto-detect platform"
357
394
  #endif
@@ -465,6 +502,10 @@ typedef unsigned __int64 uint64_t;
465
502
  #define GRPC_ARES 1
466
503
  #endif
467
504
 
505
+ #ifndef GRPC_IF_NAMETOINDEX
506
+ #define GRPC_IF_NAMETOINDEX 1
507
+ #endif
508
+
468
509
  #ifndef GRPC_MUST_USE_RESULT
469
510
  #if defined(__GNUC__) && !defined(__MINGW32__)
470
511
  #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result))
@@ -515,12 +556,47 @@ typedef unsigned __int64 uint64_t;
515
556
  #define CENSUSAPI GRPCAPI
516
557
  #endif
517
558
 
559
+ #ifndef GPR_HAS_ATTRIBUTE
560
+ #ifdef __has_attribute
561
+ #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a)
562
+ #else
563
+ #define GPR_HAS_ATTRIBUTE(a) 0
564
+ #endif
565
+ #endif /* GPR_HAS_ATTRIBUTE */
566
+
567
+ #ifndef GPR_HAS_FEATURE
568
+ #ifdef __has_feature
569
+ #define GPR_HAS_FEATURE(a) __has_feature(a)
570
+ #else
571
+ #define GPR_HAS_FEATURE(a) 0
572
+ #endif
573
+ #endif /* GPR_HAS_FEATURE */
574
+
575
+ #ifndef GPR_ATTRIBUTE_NOINLINE
576
+ #if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
577
+ #define GPR_ATTRIBUTE_NOINLINE __attribute__((noinline))
578
+ #define GPR_HAS_ATTRIBUTE_NOINLINE 1
579
+ #else
580
+ #define GPR_ATTRIBUTE_NOINLINE
581
+ #endif
582
+ #endif /* GPR_ATTRIBUTE_NOINLINE */
583
+
584
+ #ifndef GPR_ATTRIBUTE_WEAK
585
+ /* Attribute weak is broken on LLVM/windows:
586
+ * https://bugs.llvm.org/show_bug.cgi?id=37598 */
587
+ #if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \
588
+ !(defined(__llvm__) && defined(_WIN32))
589
+ #define GPR_ATTRIBUTE_WEAK __attribute__((weak))
590
+ #define GPR_HAS_ATTRIBUTE_WEAK 1
591
+ #else
592
+ #define GPR_ATTRIBUTE_WEAK
593
+ #endif
594
+ #endif /* GPR_ATTRIBUTE_WEAK */
595
+
518
596
  #ifndef GPR_ATTRIBUTE_NO_TSAN /* (1) */
519
- #if defined(__has_feature)
520
- #if __has_feature(thread_sanitizer)
597
+ #if GPR_HAS_FEATURE(thread_sanitizer)
521
598
  #define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread")))
522
- #endif /* __has_feature(thread_sanitizer) */
523
- #endif /* defined(__has_feature) */
599
+ #endif /* GPR_HAS_FEATURE */
524
600
  #ifndef GPR_ATTRIBUTE_NO_TSAN /* (2) */
525
601
  #define GPR_ATTRIBUTE_NO_TSAN
526
602
  #endif /* GPR_ATTRIBUTE_NO_TSAN (2) */
@@ -529,10 +605,15 @@ typedef unsigned __int64 uint64_t;
529
605
  /* GRPC_TSAN_ENABLED will be defined, when compiled with thread sanitizer. */
530
606
  #if defined(__SANITIZE_THREAD__)
531
607
  #define GRPC_TSAN_ENABLED
532
- #elif defined(__has_feature)
533
- #if __has_feature(thread_sanitizer)
608
+ #elif GPR_HAS_FEATURE(thread_sanitizer)
534
609
  #define GRPC_TSAN_ENABLED
535
610
  #endif
611
+
612
+ /* GRPC_ASAN_ENABLED will be defined, when compiled with address sanitizer. */
613
+ #if defined(__SANITIZE_ADDRESS__)
614
+ #define GRPC_ASAN_ENABLED
615
+ #elif GPR_HAS_FEATURE(address_sanitizer)
616
+ #define GRPC_ASAN_ENABLED
536
617
  #endif
537
618
 
538
619
  /* GRPC_ALLOW_EXCEPTIONS should be 0 or 1 if exceptions are allowed or not */
@@ -40,27 +40,6 @@ typedef struct grpc_slice grpc_slice;
40
40
  reference ownership semantics (who should call unref?) and mutability
41
41
  constraints (is the callee allowed to modify the slice?) */
42
42
 
43
- typedef struct grpc_slice_refcount_vtable {
44
- void (*ref)(void*);
45
- void (*unref)(void*);
46
- int (*eq)(grpc_slice a, grpc_slice b);
47
- uint32_t (*hash)(grpc_slice slice);
48
- } grpc_slice_refcount_vtable;
49
-
50
- /** Reference count container for grpc_slice. Contains function pointers to
51
- increment and decrement reference counts. Implementations should cleanup
52
- when the reference count drops to zero.
53
- Typically client code should not touch this, and use grpc_slice_malloc,
54
- grpc_slice_new, or grpc_slice_new_with_len instead. */
55
- typedef struct grpc_slice_refcount {
56
- const grpc_slice_refcount_vtable* vtable;
57
- /** If a subset of this slice is taken, use this pointer for the refcount.
58
- Typically points back to the refcount itself, however iterning
59
- implementations can use this to avoid a verification step on each hash
60
- or equality check */
61
- struct grpc_slice_refcount* sub_refcount;
62
- } grpc_slice_refcount;
63
-
64
43
  /* Inlined half of grpc_slice is allowed to expand the size of the overall type
65
44
  by this many bytes */
66
45
  #define GRPC_SLICE_INLINE_EXTRA_SIZE sizeof(void*)
@@ -68,6 +47,7 @@ typedef struct grpc_slice_refcount {
68
47
  #define GRPC_SLICE_INLINED_SIZE \
69
48
  (sizeof(size_t) + sizeof(uint8_t*) - 1 + GRPC_SLICE_INLINE_EXTRA_SIZE)
70
49
 
50
+ struct grpc_slice_refcount;
71
51
  /** A grpc_slice s, if initialized, represents the byte range
72
52
  s.bytes[0..s.length-1].
73
53
 
@@ -81,8 +61,8 @@ struct grpc_slice {
81
61
  struct grpc_slice_refcount* refcount;
82
62
  union grpc_slice_data {
83
63
  struct grpc_slice_refcounted {
84
- uint8_t* bytes;
85
64
  size_t length;
65
+ uint8_t* bytes;
86
66
  } refcounted;
87
67
  struct grpc_slice_inlined {
88
68
  uint8_t length;
@@ -128,7 +128,8 @@ typedef enum {
128
128
 
129
129
  /** The service is currently unavailable. This is a most likely a
130
130
  transient condition and may be corrected by retrying with
131
- a backoff.
131
+ a backoff. Note that it is not always safe to retry non-idempotent
132
+ operations.
132
133
 
133
134
  WARNING: Although data MIGHT not have been transmitted when this
134
135
  status occurs, there is NOT A GUARANTEE that the server has not seen
@@ -25,8 +25,26 @@
25
25
 
26
26
  #include <pthread.h>
27
27
 
28
+ #ifdef GRPC_ASAN_ENABLED
29
+ /* The member |leak_checker| is used to check whether there is a memory leak
30
+ * caused by upper layer logic that's missing the |gpr_xx_destroy| call
31
+ * to the object before freeing it.
32
+ * This issue was reported at https://github.com/grpc/grpc/issues/17563
33
+ * and discussed at https://github.com/grpc/grpc/pull/17586
34
+ */
35
+ typedef struct {
36
+ pthread_mutex_t mutex;
37
+ int* leak_checker;
38
+ } gpr_mu;
39
+
40
+ typedef struct {
41
+ pthread_cond_t cond_var;
42
+ int* leak_checker;
43
+ } gpr_cv;
44
+ #else
28
45
  typedef pthread_mutex_t gpr_mu;
29
46
  typedef pthread_cond_t gpr_cv;
47
+ #endif
30
48
  typedef pthread_once_t gpr_once;
31
49
 
32
50
  #define GPR_ONCE_INIT PTHREAD_ONCE_INIT
data/include/grpc/slice.h CHANGED
@@ -107,7 +107,7 @@ GPRAPI grpc_slice grpc_slice_sub_no_ref(grpc_slice s, size_t begin, size_t end);
107
107
 
108
108
  /** Splits s into two: modifies s to be s[0:split], and returns a new slice,
109
109
  sharing a refcount with s, that contains s[split:s.length].
110
- Requires s intialized, split <= s.length */
110
+ Requires s initialized, split <= s.length */
111
111
  GPRAPI grpc_slice grpc_slice_split_tail(grpc_slice* s, size_t split);
112
112
 
113
113
  typedef enum {
@@ -124,7 +124,7 @@ GPRAPI grpc_slice grpc_slice_split_tail_maybe_ref(grpc_slice* s, size_t split,
124
124
 
125
125
  /** Splits s into two: modifies s to be s[split:s.length], and returns a new
126
126
  slice, sharing a refcount with s, that contains s[0:split].
127
- Requires s intialized, split <= s.length */
127
+ Requires s initialized, split <= s.length */
128
128
  GPRAPI grpc_slice grpc_slice_split_head(grpc_slice* s, size_t split);
129
129
 
130
130
  GPRAPI grpc_slice grpc_empty_slice(void);
@@ -147,7 +147,7 @@ GPRAPI int grpc_slice_buf_start_eq(grpc_slice a, const void* b, size_t blen);
147
147
  GPRAPI int grpc_slice_rchr(grpc_slice s, char c);
148
148
  GPRAPI int grpc_slice_chr(grpc_slice s, char c);
149
149
 
150
- /** return the index of the first occurance of \a needle in \a haystack, or -1
150
+ /** return the index of the first occurrence of \a needle in \a haystack, or -1
151
151
  if it's not found */
152
152
  GPRAPI int grpc_slice_slice(grpc_slice haystack, grpc_slice needle);
153
153
 
@@ -25,8 +25,8 @@
25
25
  #include <grpc/support/log.h>
26
26
  #include <grpc/support/sync.h>
27
27
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
- #include "src/core/lib/gpr/env.h"
29
28
  #include "src/core/lib/gpr/string.h"
29
+ #include "src/core/lib/gprpp/global_config.h"
30
30
  #include "src/core/lib/iomgr/error.h"
31
31
  #include "src/core/lib/iomgr/pollset.h"
32
32
  #include "src/core/lib/iomgr/timer.h"
@@ -56,21 +56,27 @@ static backup_poller* g_poller = nullptr; // guarded by g_poller_mu
56
56
  // treated as const.
57
57
  static int g_poll_interval_ms = DEFAULT_POLL_INTERVAL_MS;
58
58
 
59
- static void init_globals() {
60
- gpr_mu_init(&g_poller_mu);
61
- char* env = gpr_getenv("GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS");
62
- if (env != nullptr) {
63
- int poll_interval_ms = gpr_parse_nonnegative_int(env);
64
- if (poll_interval_ms == -1) {
65
- gpr_log(GPR_ERROR,
66
- "Invalid GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS: %s, "
67
- "default value %d will be used.",
68
- env, g_poll_interval_ms);
69
- } else {
70
- g_poll_interval_ms = poll_interval_ms;
71
- }
59
+ GPR_GLOBAL_CONFIG_DEFINE_INT32(
60
+ grpc_client_channel_backup_poll_interval_ms, DEFAULT_POLL_INTERVAL_MS,
61
+ "Declares the interval in ms between two backup polls on client channels. "
62
+ "These polls are run in the timer thread so that gRPC can process "
63
+ "connection failures while there is no active polling thread. "
64
+ "They help reconnect disconnected client channels (mostly due to "
65
+ "idleness), so that the next RPC on this channel won't fail. Set to 0 to "
66
+ "turn off the backup polls.");
67
+
68
+ void grpc_client_channel_global_init_backup_polling() {
69
+ gpr_once_init(&g_once, [] { gpr_mu_init(&g_poller_mu); });
70
+ int32_t poll_interval_ms =
71
+ GPR_GLOBAL_CONFIG_GET(grpc_client_channel_backup_poll_interval_ms);
72
+ if (poll_interval_ms < 0) {
73
+ gpr_log(GPR_ERROR,
74
+ "Invalid GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS: %d, "
75
+ "default value %d will be used.",
76
+ poll_interval_ms, g_poll_interval_ms);
77
+ } else {
78
+ g_poll_interval_ms = poll_interval_ms;
72
79
  }
73
- gpr_free(env);
74
80
  }
75
81
 
76
82
  static void backup_poller_shutdown_unref(backup_poller* p) {
@@ -147,7 +153,6 @@ static void g_poller_init_locked() {
147
153
 
148
154
  void grpc_client_channel_start_backup_polling(
149
155
  grpc_pollset_set* interested_parties) {
150
- gpr_once_init(&g_once, init_globals);
151
156
  if (g_poll_interval_ms == 0) {
152
157
  return;
153
158
  }
@@ -23,12 +23,18 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
  #include "src/core/lib/channel/channel_stack.h"
26
+ #include "src/core/lib/gprpp/global_config.h"
26
27
 
27
- /* Start polling \a interested_parties periodically in the timer thread */
28
+ GPR_GLOBAL_CONFIG_DECLARE_INT32(grpc_client_channel_backup_poll_interval_ms);
29
+
30
+ /* Initializes backup polling. */
31
+ void grpc_client_channel_global_init_backup_polling();
32
+
33
+ /* Starts polling \a interested_parties periodically in the timer thread. */
28
34
  void grpc_client_channel_start_backup_polling(
29
35
  grpc_pollset_set* interested_parties);
30
36
 
31
- /* Stop polling \a interested_parties */
37
+ /* Stops polling \a interested_parties. */
32
38
  void grpc_client_channel_stop_backup_polling(
33
39
  grpc_pollset_set* interested_parties);
34
40
 
@@ -35,6 +35,7 @@ grpc_connectivity_state grpc_channel_check_connectivity_state(
35
35
  /* forward through to the underlying client channel */
36
36
  grpc_channel_element* client_channel_elem =
37
37
  grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
38
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
38
39
  grpc_core::ExecCtx exec_ctx;
39
40
  grpc_connectivity_state state;
40
41
  GRPC_API_TRACE(
@@ -124,7 +125,7 @@ static void partly_done(state_watcher* w, bool due_to_completion,
124
125
  gpr_mu_lock(&w->mu);
125
126
 
126
127
  if (due_to_completion) {
127
- if (grpc_trace_operation_failures.enabled()) {
128
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
128
129
  GRPC_LOG_IF_ERROR("watch_completion_error", GRPC_ERROR_REF(error));
129
130
  }
130
131
  GRPC_ERROR_UNREF(error);
@@ -202,6 +203,7 @@ void grpc_channel_watch_connectivity_state(
202
203
  gpr_timespec deadline, grpc_completion_queue* cq, void* tag) {
203
204
  grpc_channel_element* client_channel_elem =
204
205
  grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
206
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
205
207
  grpc_core::ExecCtx exec_ctx;
206
208
  state_watcher* w = static_cast<state_watcher*>(gpr_malloc(sizeof(*w)));
207
209