grpc 1.37.1 → 1.39.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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +96 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +334 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +91 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +28 -13
  12. data/include/grpc/impl/codegen/port_platform.h +22 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
  17. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  44. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  78. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  81. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  82. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
  83. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  84. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  85. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  86. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  89. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  90. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  92. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  93. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  96. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  98. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  101. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  103. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
  105. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  107. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  109. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  110. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  112. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  114. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  120. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  123. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  125. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  127. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  128. data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
  129. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  130. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  131. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  132. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  133. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  134. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  135. data/src/core/ext/xds/xds_api.cc +348 -199
  136. data/src/core/ext/xds/xds_api.h +21 -12
  137. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  138. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  139. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  140. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  141. data/src/core/ext/xds/xds_channel_args.h +5 -2
  142. data/src/core/ext/xds/xds_client.cc +310 -178
  143. data/src/core/ext/xds/xds_client.h +41 -27
  144. data/src/core/ext/xds/xds_client_stats.h +3 -2
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  146. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  147. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  148. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  149. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  150. data/src/core/lib/channel/channel_stack.cc +10 -9
  151. data/src/core/lib/channel/channel_stack.h +10 -9
  152. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  153. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  154. data/src/core/lib/channel/channelz.cc +21 -13
  155. data/src/core/lib/channel/channelz.h +3 -0
  156. data/src/core/lib/channel/connected_channel.cc +4 -4
  157. data/src/core/lib/channel/handshaker.cc +7 -6
  158. data/src/core/lib/channel/handshaker.h +5 -5
  159. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  160. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  161. data/src/core/lib/event_engine/event_engine.cc +50 -0
  162. data/src/core/lib/event_engine/slice_allocator.cc +89 -0
  163. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  164. data/src/core/lib/event_engine/sockaddr.h +44 -0
  165. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  166. data/src/core/lib/gprpp/ref_counted.h +28 -14
  167. data/src/core/lib/gprpp/status_helper.cc +407 -0
  168. data/src/core/lib/gprpp/status_helper.h +183 -0
  169. data/src/core/lib/http/httpcli.cc +11 -11
  170. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  171. data/src/core/lib/http/parser.cc +16 -16
  172. data/src/core/lib/http/parser.h +4 -4
  173. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  174. data/src/core/lib/iomgr/buffer_list.h +4 -5
  175. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  176. data/src/core/lib/iomgr/call_combiner.h +12 -14
  177. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  178. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  179. data/src/core/lib/iomgr/closure.h +7 -6
  180. data/src/core/lib/iomgr/combiner.cc +14 -12
  181. data/src/core/lib/iomgr/combiner.h +2 -2
  182. data/src/core/lib/iomgr/endpoint.cc +1 -1
  183. data/src/core/lib/iomgr/endpoint.h +2 -2
  184. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  185. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  186. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  187. data/src/core/lib/iomgr/error.cc +168 -61
  188. data/src/core/lib/iomgr/error.h +217 -106
  189. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  190. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  191. data/src/core/lib/iomgr/error_internal.h +5 -1
  192. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  193. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  194. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  195. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  196. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  197. data/src/core/lib/iomgr/ev_posix.h +9 -9
  198. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  199. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  200. data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
  201. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  202. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  203. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  204. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  205. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  206. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  207. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  208. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  209. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  210. data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
  211. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  212. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  213. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  214. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  215. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  216. data/src/core/lib/iomgr/executor.cc +8 -8
  217. data/src/core/lib/iomgr/executor.h +2 -2
  218. data/src/core/lib/iomgr/iomgr.cc +2 -2
  219. data/src/core/lib/iomgr/iomgr.h +1 -1
  220. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  221. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  222. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  223. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  224. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  225. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  226. data/src/core/lib/iomgr/load_file.cc +4 -4
  227. data/src/core/lib/iomgr/load_file.h +2 -2
  228. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  229. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  230. data/src/core/lib/iomgr/pollset.cc +5 -5
  231. data/src/core/lib/iomgr/pollset.h +9 -9
  232. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  233. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  234. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  235. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  236. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  237. data/src/core/lib/iomgr/port.h +7 -5
  238. data/src/core/lib/iomgr/python_util.h +1 -1
  239. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  240. data/src/core/lib/iomgr/resolve_address.h +12 -6
  241. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  242. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  243. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  244. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  245. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  246. data/src/core/lib/iomgr/sockaddr.h +1 -0
  247. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  248. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  250. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  251. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  252. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  253. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  254. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  257. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  258. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  259. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  260. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  261. data/src/core/lib/iomgr/tcp_server.h +12 -11
  262. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  263. data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
  264. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  265. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  266. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  267. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  268. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  269. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  270. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  271. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  272. data/src/core/lib/iomgr/timer.h +6 -1
  273. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  274. data/src/core/lib/iomgr/timer_custom.h +1 -1
  275. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  276. data/src/core/lib/iomgr/udp_server.cc +21 -20
  277. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  278. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  279. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  280. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  281. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  282. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  283. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  284. data/src/core/lib/iomgr/work_serializer.h +17 -1
  285. data/src/core/lib/json/json.h +1 -1
  286. data/src/core/lib/json/json_reader.cc +4 -4
  287. data/src/core/lib/matchers/matchers.cc +39 -39
  288. data/src/core/lib/matchers/matchers.h +28 -28
  289. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  290. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  291. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  292. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  293. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  294. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  295. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  296. data/src/core/lib/security/credentials/credentials.h +2 -2
  297. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  298. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  307. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  308. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  309. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  310. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  311. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  312. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  313. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  314. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  315. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  316. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  317. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  318. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  319. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  320. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  321. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  322. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  323. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  324. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  325. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  326. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  327. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  328. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  329. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  330. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  331. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  332. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  333. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  334. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  335. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  336. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  337. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  338. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  339. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  340. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  341. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  342. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  343. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  344. data/src/core/lib/security/transport/tsi_error.h +2 -1
  345. data/src/core/lib/security/util/json_util.cc +2 -2
  346. data/src/core/lib/security/util/json_util.h +1 -1
  347. data/src/core/lib/surface/call.cc +67 -46
  348. data/src/core/lib/surface/call.h +13 -2
  349. data/src/core/lib/surface/channel.cc +6 -6
  350. data/src/core/lib/surface/channel.h +3 -2
  351. data/src/core/lib/surface/channel_ping.cc +1 -1
  352. data/src/core/lib/surface/completion_queue.cc +68 -69
  353. data/src/core/lib/surface/completion_queue.h +3 -2
  354. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  355. data/src/core/lib/surface/init.cc +1 -3
  356. data/src/core/lib/surface/init.h +10 -1
  357. data/src/core/lib/surface/lame_client.cc +11 -11
  358. data/src/core/lib/surface/lame_client.h +1 -1
  359. data/src/core/lib/surface/server.cc +28 -22
  360. data/src/core/lib/surface/server.h +16 -15
  361. data/src/core/lib/surface/validate_metadata.cc +7 -7
  362. data/src/core/lib/surface/validate_metadata.h +3 -2
  363. data/src/core/lib/surface/version.cc +4 -2
  364. data/src/core/lib/transport/byte_stream.cc +5 -5
  365. data/src/core/lib/transport/byte_stream.h +8 -8
  366. data/src/core/lib/transport/connectivity_state.cc +1 -1
  367. data/src/core/lib/transport/error_utils.cc +21 -10
  368. data/src/core/lib/transport/error_utils.h +11 -5
  369. data/src/core/lib/transport/metadata_batch.cc +37 -37
  370. data/src/core/lib/transport/metadata_batch.h +19 -18
  371. data/src/core/lib/transport/transport.cc +4 -3
  372. data/src/core/lib/transport/transport.h +6 -4
  373. data/src/core/lib/transport/transport_op_string.cc +6 -6
  374. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  375. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  376. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  377. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  378. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  379. data/src/core/tsi/ssl_transport_security.cc +32 -14
  380. data/src/core/tsi/ssl_transport_security.h +3 -4
  381. data/src/ruby/bin/math_services_pb.rb +1 -1
  382. data/src/ruby/ext/grpc/extconf.rb +2 -0
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  384. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  385. data/src/ruby/lib/grpc/version.rb +1 -1
  386. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  388. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  389. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  390. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  391. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  392. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  393. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  394. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  395. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  396. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  397. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  398. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  399. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  400. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  401. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  402. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  403. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  404. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  405. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  406. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  407. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  408. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  409. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  410. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  411. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  412. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  413. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  414. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  415. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  416. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  417. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  418. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  419. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  420. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  421. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  422. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  423. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  424. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  425. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  426. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  427. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  428. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  429. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  430. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  431. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  432. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  433. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  434. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  435. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  436. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  437. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  438. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  439. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  440. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  441. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  442. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  443. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  444. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  445. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  446. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  447. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  448. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  449. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  450. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  451. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  452. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  453. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  455. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  457. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  458. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  459. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  462. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  463. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  464. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  465. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  466. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  467. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  468. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  469. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  470. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  471. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  472. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  473. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  474. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  475. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  476. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  477. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  478. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  479. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  481. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  482. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  483. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  484. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  485. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  486. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  487. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  488. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  492. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  493. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  494. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  495. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  496. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  497. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  498. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  499. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  500. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  501. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  505. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  506. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  507. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  508. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  511. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  543. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  544. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  545. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  546. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  547. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  548. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  549. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  550. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  551. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  552. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  553. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  554. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  555. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  557. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  558. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  559. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  560. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  561. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  562. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  563. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  566. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  568. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  571. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  576. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  579. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  580. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  581. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  582. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  583. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  585. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  587. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  589. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  591. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  592. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  593. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  604. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  615. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  623. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  624. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  625. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  626. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  627. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  628. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  629. metadata +94 -46
  630. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  631. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  632. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  633. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  635. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -76,7 +76,7 @@ extern void (*grpc_cancel_ares_request_locked)(grpc_ares_request* request);
76
76
 
77
77
  /* Initialize gRPC ares wrapper. Must be called at least once before
78
78
  grpc_resolve_address_ares(). */
79
- grpc_error* grpc_ares_init(void);
79
+ grpc_error_handle grpc_ares_init(void);
80
80
 
81
81
  /* Uninitialized gRPC ares wrapper. If there was more than one previous call to
82
82
  grpc_ares_init(), this function uninitializes the gRPC ares wrapper only if
@@ -0,0 +1,28 @@
1
+ // Copyright 2021 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ #include <grpc/support/port_platform.h>
15
+
16
+ #include "src/core/lib/iomgr/port.h"
17
+ #if GRPC_ARES == 1 && defined(GRPC_USE_EVENT_ENGINE)
18
+
19
+ #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
20
+
21
+ bool grpc_ares_query_ipv6() {
22
+ /* The libuv grpc code currently does not have the code to probe for this,
23
+ * so we assume for now that IPv6 is always available in contexts where this
24
+ * code will be used. */
25
+ return true;
26
+ }
27
+
28
+ #endif /* GRPC_ARES == 1 && defined(GRPC_USE_EVENT_ENGINE) */
@@ -25,8 +25,8 @@
25
25
 
26
26
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
27
27
  #include "src/core/ext/filters/client_channel/server_address.h"
28
+ #include "src/core/lib/address_utils/parse_address.h"
28
29
  #include "src/core/lib/gpr/string.h"
29
- #include "src/core/lib/iomgr/parse_address.h"
30
30
 
31
31
  bool grpc_ares_query_ipv6() {
32
32
  /* The libuv grpc code currently does not have the code to probe for this,
@@ -25,8 +25,8 @@
25
25
 
26
26
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
27
27
  #include "src/core/ext/filters/client_channel/server_address.h"
28
+ #include "src/core/lib/address_utils/parse_address.h"
28
29
  #include "src/core/lib/gpr/string.h"
29
- #include "src/core/lib/iomgr/parse_address.h"
30
30
  #include "src/core/lib/iomgr/socket_windows.h"
31
31
 
32
32
  bool grpc_ares_query_ipv6() { return grpc_ipv6_loopback_available(); }
@@ -48,8 +48,6 @@ namespace grpc_core {
48
48
 
49
49
  namespace {
50
50
 
51
- const char kDefaultPort[] = "https";
52
-
53
51
  class NativeDnsResolver : public Resolver {
54
52
  public:
55
53
  explicit NativeDnsResolver(ResolverArgs args);
@@ -68,10 +66,10 @@ class NativeDnsResolver : public Resolver {
68
66
  void MaybeStartResolvingLocked();
69
67
  void StartResolvingLocked();
70
68
 
71
- static void OnNextResolution(void* arg, grpc_error* error);
72
- void OnNextResolutionLocked(grpc_error* error);
73
- static void OnResolved(void* arg, grpc_error* error);
74
- void OnResolvedLocked(grpc_error* error);
69
+ static void OnNextResolution(void* arg, grpc_error_handle error);
70
+ void OnNextResolutionLocked(grpc_error_handle error);
71
+ static void OnResolved(void* arg, grpc_error_handle error);
72
+ void OnResolvedLocked(grpc_error_handle error);
75
73
 
76
74
  /// name to resolve
77
75
  std::string name_to_resolve_;
@@ -148,14 +146,14 @@ void NativeDnsResolver::ShutdownLocked() {
148
146
  }
149
147
  }
150
148
 
151
- void NativeDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
149
+ void NativeDnsResolver::OnNextResolution(void* arg, grpc_error_handle error) {
152
150
  NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
153
151
  GRPC_ERROR_REF(error); // ref owned by lambda
154
152
  r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
155
153
  DEBUG_LOCATION);
156
154
  }
157
155
 
158
- void NativeDnsResolver::OnNextResolutionLocked(grpc_error* error) {
156
+ void NativeDnsResolver::OnNextResolutionLocked(grpc_error_handle error) {
159
157
  have_next_resolution_timer_ = false;
160
158
  if (error == GRPC_ERROR_NONE && !resolving_) {
161
159
  StartResolvingLocked();
@@ -164,14 +162,14 @@ void NativeDnsResolver::OnNextResolutionLocked(grpc_error* error) {
164
162
  GRPC_ERROR_UNREF(error);
165
163
  }
166
164
 
167
- void NativeDnsResolver::OnResolved(void* arg, grpc_error* error) {
165
+ void NativeDnsResolver::OnResolved(void* arg, grpc_error_handle error) {
168
166
  NativeDnsResolver* r = static_cast<NativeDnsResolver*>(arg);
169
167
  GRPC_ERROR_REF(error); // owned by lambda
170
168
  r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
171
169
  DEBUG_LOCATION);
172
170
  }
173
171
 
174
- void NativeDnsResolver::OnResolvedLocked(grpc_error* error) {
172
+ void NativeDnsResolver::OnResolvedLocked(grpc_error_handle error) {
175
173
  GPR_ASSERT(resolving_);
176
174
  resolving_ = false;
177
175
  if (shutdown_) {
@@ -194,7 +192,7 @@ void NativeDnsResolver::OnResolvedLocked(grpc_error* error) {
194
192
  backoff_.Reset();
195
193
  } else {
196
194
  gpr_log(GPR_INFO, "dns resolution failed (will retry): %s",
197
- grpc_error_string(error));
195
+ grpc_error_std_string(error).c_str());
198
196
  // Return transient error.
199
197
  std::string error_message =
200
198
  absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
@@ -203,6 +201,10 @@ void NativeDnsResolver::OnResolvedLocked(grpc_error* error) {
203
201
  &error, 1),
204
202
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
205
203
  // Set up for retry.
204
+ // InvalidateNow to avoid getting stuck re-initializing this timer
205
+ // in a loop while draining the currently-held WorkSerializer.
206
+ // Also see https://github.com/grpc/grpc/issues/26079.
207
+ ExecCtx::Get()->InvalidateNow();
206
208
  grpc_millis next_try = backoff_.NextAttemptTime();
207
209
  grpc_millis timeout = next_try - ExecCtx::Get()->Now();
208
210
  GPR_ASSERT(!have_next_resolution_timer_);
@@ -229,6 +231,10 @@ void NativeDnsResolver::MaybeStartResolvingLocked() {
229
231
  // can start the next resolution.
230
232
  if (have_next_resolution_timer_) return;
231
233
  if (last_resolution_timestamp_ >= 0) {
234
+ // InvalidateNow to avoid getting stuck re-initializing this timer
235
+ // in a loop while draining the currently-held WorkSerializer.
236
+ // Also see https://github.com/grpc/grpc/issues/26079.
237
+ ExecCtx::Get()->InvalidateNow();
232
238
  const grpc_millis earliest_next_resolution =
233
239
  last_resolution_timestamp_ + min_time_between_resolutions_;
234
240
  const grpc_millis ms_until_next_resolution =
@@ -268,7 +274,7 @@ void NativeDnsResolver::StartResolvingLocked() {
268
274
  addresses_ = nullptr;
269
275
  GRPC_CLOSURE_INIT(&on_resolved_, NativeDnsResolver::OnResolved, this,
270
276
  grpc_schedule_on_exec_ctx);
271
- grpc_resolve_address(name_to_resolve_.c_str(), kDefaultPort,
277
+ grpc_resolve_address(name_to_resolve_.c_str(), kDefaultSecurePort,
272
278
  interested_parties_, &on_resolved_, &addresses_);
273
279
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
274
280
  }
@@ -30,11 +30,11 @@
30
30
 
31
31
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
32
32
  #include "src/core/ext/filters/client_channel/server_address.h"
33
+ #include "src/core/lib/address_utils/parse_address.h"
33
34
  #include "src/core/lib/channel/channel_args.h"
34
35
  #include "src/core/lib/gpr/string.h"
35
36
  #include "src/core/lib/gpr/useful.h"
36
37
  #include "src/core/lib/iomgr/closure.h"
37
- #include "src/core/lib/iomgr/parse_address.h"
38
38
  #include "src/core/lib/iomgr/resolve_address.h"
39
39
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
40
40
  #include "src/core/lib/iomgr/work_serializer.h"
@@ -313,48 +313,40 @@ void FakeResolverResponseGenerator::SetFakeResolver(
313
313
 
314
314
  namespace {
315
315
 
316
- static void* response_generator_arg_copy(void* p) {
317
- FakeResolverResponseGenerator* generator =
318
- static_cast<FakeResolverResponseGenerator*>(p);
319
- // TODO(roth): We currently deal with this ref manually. Once the
320
- // new channel args code is converted to C++, find a way to track this ref
321
- // in a cleaner way.
322
- RefCountedPtr<FakeResolverResponseGenerator> copy = generator->Ref();
323
- copy.release();
316
+ void* ResponseGeneratorChannelArgCopy(void* p) {
317
+ auto* generator = static_cast<FakeResolverResponseGenerator*>(p);
318
+ generator->Ref().release();
324
319
  return p;
325
320
  }
326
321
 
327
- static void response_generator_arg_destroy(void* p) {
328
- FakeResolverResponseGenerator* generator =
329
- static_cast<FakeResolverResponseGenerator*>(p);
322
+ void ResponseGeneratorChannelArgDestroy(void* p) {
323
+ auto* generator = static_cast<FakeResolverResponseGenerator*>(p);
330
324
  generator->Unref();
331
325
  }
332
326
 
333
- static int response_generator_cmp(void* a, void* b) { return GPR_ICMP(a, b); }
334
-
335
- static const grpc_arg_pointer_vtable response_generator_arg_vtable = {
336
- response_generator_arg_copy, response_generator_arg_destroy,
337
- response_generator_cmp};
327
+ int ResponseGeneratorChannelArgCmp(void* a, void* b) { return GPR_ICMP(a, b); }
338
328
 
339
329
  } // namespace
340
330
 
331
+ const grpc_arg_pointer_vtable
332
+ FakeResolverResponseGenerator::kChannelArgPointerVtable = {
333
+ ResponseGeneratorChannelArgCopy, ResponseGeneratorChannelArgDestroy,
334
+ ResponseGeneratorChannelArgCmp};
335
+
341
336
  grpc_arg FakeResolverResponseGenerator::MakeChannelArg(
342
337
  FakeResolverResponseGenerator* generator) {
343
- grpc_arg arg;
344
- arg.type = GRPC_ARG_POINTER;
345
- arg.key = const_cast<char*>(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
346
- arg.value.pointer.p = generator;
347
- arg.value.pointer.vtable = &response_generator_arg_vtable;
348
- return arg;
338
+ return grpc_channel_arg_pointer_create(
339
+ const_cast<char*>(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR), generator,
340
+ &kChannelArgPointerVtable);
349
341
  }
350
342
 
351
343
  RefCountedPtr<FakeResolverResponseGenerator>
352
344
  FakeResolverResponseGenerator::GetFromArgs(const grpc_channel_args* args) {
353
- const grpc_arg* arg =
354
- grpc_channel_args_find(args, GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
355
- if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
356
- return static_cast<FakeResolverResponseGenerator*>(arg->value.pointer.p)
357
- ->Ref();
345
+ auto* response_generator =
346
+ grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
347
+ args, GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
348
+ if (response_generator == nullptr) return nullptr;
349
+ return response_generator->Ref();
358
350
  }
359
351
 
360
352
  //
@@ -42,6 +42,8 @@ class FakeResolver;
42
42
  class FakeResolverResponseGenerator
43
43
  : public RefCounted<FakeResolverResponseGenerator> {
44
44
  public:
45
+ static const grpc_arg_pointer_vtable kChannelArgPointerVtable;
46
+
45
47
  FakeResolverResponseGenerator();
46
48
  ~FakeResolverResponseGenerator() override;
47
49
 
@@ -69,6 +71,7 @@ class FakeResolverResponseGenerator
69
71
  void SetFailureOnReresolution();
70
72
 
71
73
  // Returns a channel arg containing \a generator.
74
+ // TODO(roth): When we have time, make this a non-static method.
72
75
  static grpc_arg MakeChannelArg(FakeResolverResponseGenerator* generator);
73
76
 
74
77
  // Returns the response generator in \a args, or null if not found.
@@ -82,12 +85,11 @@ class FakeResolverResponseGenerator
82
85
 
83
86
  // Mutex protecting the members below.
84
87
  Mutex mu_;
85
- RefCountedPtr<FakeResolver> resolver_;
86
- Resolver::Result result_;
87
- bool has_result_ = false;
88
+ RefCountedPtr<FakeResolver> resolver_ ABSL_GUARDED_BY(mu_);
89
+ Resolver::Result result_ ABSL_GUARDED_BY(mu_);
90
+ bool has_result_ ABSL_GUARDED_BY(mu_) = false;
88
91
  };
89
92
 
90
93
  } // namespace grpc_core
91
94
 
92
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_FAKE_FAKE_RESOLVER_H \
93
- */
95
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_FAKE_FAKE_RESOLVER_H
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
+ #include <random>
20
+
19
21
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
20
22
  #include "src/core/ext/xds/xds_client.h"
21
23
  #include "src/core/lib/gpr/env.h"
@@ -48,15 +50,15 @@ class GoogleCloud2ProdResolver : public Resolver {
48
50
  void Orphan() override;
49
51
 
50
52
  private:
51
- static void OnHttpRequestDone(void* arg, grpc_error* error);
53
+ static void OnHttpRequestDone(void* arg, grpc_error_handle error);
52
54
 
53
55
  // Calls OnDone() if not already called. Releases a ref.
54
- void MaybeCallOnDone(grpc_error* error);
56
+ void MaybeCallOnDone(grpc_error_handle error);
55
57
 
56
58
  // If error is not GRPC_ERROR_NONE, then it's not safe to look at response.
57
59
  virtual void OnDone(GoogleCloud2ProdResolver* resolver,
58
60
  const grpc_http_response* response,
59
- grpc_error* error) = 0;
61
+ grpc_error_handle error) = 0;
60
62
 
61
63
  RefCountedPtr<GoogleCloud2ProdResolver> resolver_;
62
64
  grpc_httpcli_context context_;
@@ -73,7 +75,8 @@ class GoogleCloud2ProdResolver : public Resolver {
73
75
 
74
76
  private:
75
77
  void OnDone(GoogleCloud2ProdResolver* resolver,
76
- const grpc_http_response* response, grpc_error* error) override;
78
+ const grpc_http_response* response,
79
+ grpc_error_handle error) override;
77
80
  };
78
81
 
79
82
  // A metadata server query to get the IPv6 address.
@@ -84,7 +87,8 @@ class GoogleCloud2ProdResolver : public Resolver {
84
87
 
85
88
  private:
86
89
  void OnDone(GoogleCloud2ProdResolver* resolver,
87
- const grpc_http_response* response, grpc_error* error) override;
90
+ const grpc_http_response* response,
91
+ grpc_error_handle error) override;
88
92
  };
89
93
 
90
94
  void ZoneQueryDone(std::string zone);
@@ -143,13 +147,13 @@ void GoogleCloud2ProdResolver::MetadataQuery::Orphan() {
143
147
  }
144
148
 
145
149
  void GoogleCloud2ProdResolver::MetadataQuery::OnHttpRequestDone(
146
- void* arg, grpc_error* error) {
150
+ void* arg, grpc_error_handle error) {
147
151
  auto* self = static_cast<MetadataQuery*>(arg);
148
152
  self->MaybeCallOnDone(GRPC_ERROR_REF(error));
149
153
  }
150
154
 
151
155
  void GoogleCloud2ProdResolver::MetadataQuery::MaybeCallOnDone(
152
- grpc_error* error) {
156
+ grpc_error_handle error) {
153
157
  bool expected = false;
154
158
  if (!on_done_called_.CompareExchangeStrong(
155
159
  &expected, true, MemoryOrder::RELAXED, MemoryOrder::RELAXED)) {
@@ -180,10 +184,10 @@ GoogleCloud2ProdResolver::ZoneQuery::ZoneQuery(
180
184
 
181
185
  void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
182
186
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
183
- grpc_error* error) {
187
+ grpc_error_handle error) {
184
188
  if (error != GRPC_ERROR_NONE) {
185
189
  gpr_log(GPR_ERROR, "error fetching zone from metadata server: %s",
186
- grpc_error_string(error));
190
+ grpc_error_std_string(error).c_str());
187
191
  }
188
192
  std::string zone;
189
193
  if (error == GRPC_ERROR_NONE && response->status == 200) {
@@ -193,7 +197,7 @@ void GoogleCloud2ProdResolver::ZoneQuery::OnDone(
193
197
  gpr_log(GPR_ERROR, "could not parse zone from metadata server: %s",
194
198
  std::string(body).c_str());
195
199
  } else {
196
- zone = std::string(body.substr(i));
200
+ zone = std::string(body.substr(i + 1));
197
201
  }
198
202
  }
199
203
  resolver->ZoneQueryDone(std::move(zone));
@@ -213,10 +217,10 @@ GoogleCloud2ProdResolver::IPv6Query::IPv6Query(
213
217
 
214
218
  void GoogleCloud2ProdResolver::IPv6Query::OnDone(
215
219
  GoogleCloud2ProdResolver* resolver, const grpc_http_response* response,
216
- grpc_error* error) {
220
+ grpc_error_handle error) {
217
221
  if (error != GRPC_ERROR_NONE) {
218
222
  gpr_log(GPR_ERROR, "error fetching IPv6 address from metadata server: %s",
219
- grpc_error_string(error));
223
+ grpc_error_std_string(error).c_str());
220
224
  }
221
225
  resolver->IPv6QueryDone(error == GRPC_ERROR_NONE && response->status == 200);
222
226
  GRPC_ERROR_UNREF(error);
@@ -295,8 +299,11 @@ void GoogleCloud2ProdResolver::IPv6QueryDone(bool ipv6_supported) {
295
299
 
296
300
  void GoogleCloud2ProdResolver::StartXdsResolver() {
297
301
  // Construct bootstrap JSON.
302
+ std::random_device rd;
303
+ std::mt19937 mt(rd());
304
+ std::uniform_int_distribution<uint64_t> dist(1, UINT64_MAX);
298
305
  Json::Object node = {
299
- {"id", "C2P"},
306
+ {"id", absl::StrCat("C2P-", dist(mt))},
300
307
  };
301
308
  if (!zone_->empty()) {
302
309
  node["locality"] = Json::Object{
@@ -30,9 +30,9 @@
30
30
 
31
31
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
32
32
  #include "src/core/ext/filters/client_channel/server_address.h"
33
+ #include "src/core/lib/address_utils/parse_address.h"
33
34
  #include "src/core/lib/channel/channel_args.h"
34
35
  #include "src/core/lib/gpr/string.h"
35
- #include "src/core/lib/iomgr/parse_address.h"
36
36
  #include "src/core/lib/iomgr/resolve_address.h"
37
37
  #include "src/core/lib/iomgr/unix_sockets_posix.h"
38
38
  #include "src/core/lib/slice/slice_internal.h"
@@ -28,6 +28,7 @@
28
28
  #include "src/core/ext/filters/client_channel/config_selector.h"
29
29
  #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
30
30
  #include "src/core/ext/filters/client_channel/resolver_registry.h"
31
+ #include "src/core/ext/xds/xds_channel_args.h"
31
32
  #include "src/core/ext/xds/xds_client.h"
32
33
  #include "src/core/ext/xds/xds_http_filters.h"
33
34
  #include "src/core/lib/channel/channel_args.h"
@@ -73,19 +74,23 @@ class XdsResolver : public Resolver {
73
74
 
74
75
  void ShutdownLocked() override;
75
76
 
77
+ void ResetBackoffLocked() override {
78
+ if (xds_client_ != nullptr) xds_client_->ResetBackoff();
79
+ }
80
+
76
81
  private:
77
82
  class Notifier {
78
83
  public:
79
84
  Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::LdsUpdate update);
80
85
  Notifier(RefCountedPtr<XdsResolver> resolver, XdsApi::RdsUpdate update);
81
- Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error* error);
86
+ Notifier(RefCountedPtr<XdsResolver> resolver, grpc_error_handle error);
82
87
  explicit Notifier(RefCountedPtr<XdsResolver> resolver);
83
88
 
84
89
  private:
85
90
  enum Type { kLdsUpdate, kRdsUpdate, kError, kDoesNotExist };
86
91
 
87
- static void RunInExecCtx(void* arg, grpc_error* error);
88
- void RunInWorkSerializer(grpc_error* error);
92
+ static void RunInExecCtx(void* arg, grpc_error_handle error);
93
+ void RunInWorkSerializer(grpc_error_handle error);
89
94
 
90
95
  RefCountedPtr<XdsResolver> resolver_;
91
96
  grpc_closure closure_;
@@ -100,7 +105,9 @@ class XdsResolver : public Resolver {
100
105
  void OnListenerChanged(XdsApi::LdsUpdate listener) override {
101
106
  new Notifier(resolver_, std::move(listener));
102
107
  }
103
- void OnError(grpc_error* error) override { new Notifier(resolver_, error); }
108
+ void OnError(grpc_error_handle error) override {
109
+ new Notifier(resolver_, error);
110
+ }
104
111
  void OnResourceDoesNotExist() override { new Notifier(resolver_); }
105
112
 
106
113
  private:
@@ -114,7 +121,9 @@ class XdsResolver : public Resolver {
114
121
  void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
115
122
  new Notifier(resolver_, std::move(route_config));
116
123
  }
117
- void OnError(grpc_error* error) override { new Notifier(resolver_, error); }
124
+ void OnError(grpc_error_handle error) override {
125
+ new Notifier(resolver_, error);
126
+ }
118
127
  void OnResourceDoesNotExist() override { new Notifier(resolver_); }
119
128
 
120
129
  private:
@@ -122,7 +131,7 @@ class XdsResolver : public Resolver {
122
131
  };
123
132
 
124
133
  class ClusterState
125
- : public RefCounted<ClusterState, PolymorphicRefCount, false> {
134
+ : public RefCounted<ClusterState, PolymorphicRefCount, kUnrefNoDelete> {
126
135
  public:
127
136
  using ClusterStateMap =
128
137
  std::map<std::string, std::unique_ptr<ClusterState>>;
@@ -140,7 +149,8 @@ class XdsResolver : public Resolver {
140
149
 
141
150
  class XdsConfigSelector : public ConfigSelector {
142
151
  public:
143
- XdsConfigSelector(RefCountedPtr<XdsResolver> resolver, grpc_error** error);
152
+ XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
153
+ grpc_error_handle* error);
144
154
  ~XdsConfigSelector() override;
145
155
 
146
156
  const char* name() const override { return "XdsConfigSelector"; }
@@ -179,7 +189,7 @@ class XdsResolver : public Resolver {
179
189
  using RouteTable = std::vector<Route>;
180
190
 
181
191
  void MaybeAddCluster(const std::string& name);
182
- grpc_error* CreateMethodConfig(
192
+ grpc_error_handle CreateMethodConfig(
183
193
  const XdsApi::Route& route,
184
194
  const XdsApi::Route::ClusterWeight* cluster_weight,
185
195
  RefCountedPtr<ServiceConfig>* method_config);
@@ -188,15 +198,16 @@ class XdsResolver : public Resolver {
188
198
  RouteTable route_table_;
189
199
  std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
190
200
  std::vector<const grpc_channel_filter*> filters_;
191
- grpc_error* filter_error_ = GRPC_ERROR_NONE;
201
+ grpc_error_handle filter_error_ = GRPC_ERROR_NONE;
192
202
  };
193
203
 
194
204
  void OnListenerUpdate(XdsApi::LdsUpdate listener);
195
205
  void OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update);
196
- void OnError(grpc_error* error);
206
+ void OnError(grpc_error_handle error);
197
207
  void OnResourceDoesNotExist();
198
208
 
199
- grpc_error* CreateServiceConfig(RefCountedPtr<ServiceConfig>* service_config);
209
+ grpc_error_handle CreateServiceConfig(
210
+ RefCountedPtr<ServiceConfig>* service_config);
200
211
  void GenerateResult();
201
212
  void MaybeRemoveUnusedClusters();
202
213
 
@@ -243,7 +254,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
243
254
  }
244
255
 
245
256
  XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
246
- grpc_error* error)
257
+ grpc_error_handle error)
247
258
  : resolver_(std::move(resolver)), type_(kError) {
248
259
  GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
249
260
  ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
@@ -255,14 +266,14 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
255
266
  ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
256
267
  }
257
268
 
258
- void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error* error) {
269
+ void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error_handle error) {
259
270
  Notifier* self = static_cast<Notifier*>(arg);
260
271
  GRPC_ERROR_REF(error);
261
272
  self->resolver_->work_serializer_->Run(
262
273
  [self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
263
274
  }
264
275
 
265
- void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
276
+ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error_handle error) {
266
277
  if (resolver_->xds_client_ == nullptr) {
267
278
  GRPC_ERROR_UNREF(error);
268
279
  delete this;
@@ -314,7 +325,7 @@ bool XdsResolver::XdsConfigSelector::Route::operator==(
314
325
  //
315
326
 
316
327
  XdsResolver::XdsConfigSelector::XdsConfigSelector(
317
- RefCountedPtr<XdsResolver> resolver, grpc_error** error)
328
+ RefCountedPtr<XdsResolver> resolver, grpc_error_handle* error)
318
329
  : resolver_(std::move(resolver)) {
319
330
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
320
331
  gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
@@ -425,7 +436,7 @@ const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
425
436
  return nullptr;
426
437
  }
427
438
 
428
- grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
439
+ grpc_error_handle XdsResolver::XdsConfigSelector::CreateMethodConfig(
429
440
  const XdsApi::Route& route,
430
441
  const XdsApi::Route::ClusterWeight* cluster_weight,
431
442
  RefCountedPtr<ServiceConfig>* method_config) {
@@ -482,7 +493,7 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
482
493
  "\n ]"));
483
494
  }
484
495
  // Construct service config.
485
- grpc_error* error = GRPC_ERROR_NONE;
496
+ grpc_error_handle error = GRPC_ERROR_NONE;
486
497
  if (!fields.empty()) {
487
498
  std::string json = absl::StrCat(
488
499
  "{\n"
@@ -557,6 +568,9 @@ absl::optional<uint64_t> HeaderHashHelper(
557
568
  std::string value_buffer;
558
569
  absl::optional<absl::string_view> header_value =
559
570
  GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
571
+ if (!header_value.has_value()) {
572
+ return absl::nullopt;
573
+ }
560
574
  if (policy.regex != nullptr) {
561
575
  // If GetHeaderValue() did not already store the value in
562
576
  // value_buffer, copy it there now, so we can modify it.
@@ -660,7 +674,12 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
660
674
  }
661
675
  if (!hash.has_value()) {
662
676
  // If there is no hash, we just choose a random value as a default.
663
- hash = rand();
677
+ // We cannot directly use the result of rand() as the hash value,
678
+ // since it is a 32-bit number and not a 64-bit number and will
679
+ // therefore not be evenly distributed.
680
+ uint32_t upper = rand();
681
+ uint32_t lower = rand();
682
+ hash = (static_cast<uint64_t>(upper) << 32) | lower;
664
683
  }
665
684
  CallConfig call_config;
666
685
  if (method_config != nullptr) {
@@ -669,8 +688,12 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
669
688
  call_config.service_config = std::move(method_config);
670
689
  }
671
690
  call_config.call_attributes[kXdsClusterAttribute] = it->first;
672
- call_config.call_attributes[kRequestRingHashAttribute] =
673
- absl::StrFormat("%" PRIu64, hash.value());
691
+ std::string hash_string = absl::StrCat(hash.value());
692
+ char* hash_value =
693
+ static_cast<char*>(args.arena->Alloc(hash_string.size() + 1));
694
+ memcpy(hash_value, hash_string.c_str(), hash_string.size());
695
+ hash_value[hash_string.size()] = '\0';
696
+ call_config.call_attributes[kRequestRingHashAttribute] = hash_value;
674
697
  call_config.on_call_committed = [resolver, cluster_state]() {
675
698
  cluster_state->Unref();
676
699
  ExecCtx::Run(
@@ -684,7 +707,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
684
707
  // the data plane mutex.
685
708
  DEBUG_LOCATION,
686
709
  GRPC_CLOSURE_CREATE(
687
- [](void* arg, grpc_error* /*error*/) {
710
+ [](void* arg, grpc_error_handle /*error*/) {
688
711
  auto* resolver = static_cast<XdsResolver*>(arg);
689
712
  resolver->work_serializer_->Run(
690
713
  [resolver]() {
@@ -706,13 +729,13 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
706
729
  //
707
730
 
708
731
  void XdsResolver::StartLocked() {
709
- grpc_error* error = GRPC_ERROR_NONE;
710
- xds_client_ = XdsClient::GetOrCreate(&error);
732
+ grpc_error_handle error = GRPC_ERROR_NONE;
733
+ xds_client_ = XdsClient::GetOrCreate(args_, &error);
711
734
  if (error != GRPC_ERROR_NONE) {
712
735
  gpr_log(GPR_ERROR,
713
736
  "Failed to create xds client -- channel will remain in "
714
737
  "TRANSIENT_FAILURE: %s",
715
- grpc_error_string(error));
738
+ grpc_error_std_string(error).c_str());
716
739
  result_handler_->ReturnError(error);
717
740
  return;
718
741
  }
@@ -809,11 +832,12 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
809
832
  GenerateResult();
810
833
  }
811
834
 
812
- void XdsResolver::OnError(grpc_error* error) {
835
+ void XdsResolver::OnError(grpc_error_handle error) {
813
836
  gpr_log(GPR_ERROR, "[xds_resolver %p] received error from XdsClient: %s",
814
- this, grpc_error_string(error));
837
+ this, grpc_error_std_string(error).c_str());
815
838
  Result result;
816
- result.args = grpc_channel_args_copy(args_);
839
+ grpc_arg new_arg = xds_client_->MakeChannelArg();
840
+ result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
817
841
  result.service_config_error = error;
818
842
  result_handler_->ReturnResult(std::move(result));
819
843
  }
@@ -832,7 +856,7 @@ void XdsResolver::OnResourceDoesNotExist() {
832
856
  result_handler_->ReturnResult(std::move(result));
833
857
  }
834
858
 
835
- grpc_error* XdsResolver::CreateServiceConfig(
859
+ grpc_error_handle XdsResolver::CreateServiceConfig(
836
860
  RefCountedPtr<ServiceConfig>* service_config) {
837
861
  std::vector<std::string> clusters;
838
862
  for (const auto& cluster : cluster_state_map_) {
@@ -859,7 +883,7 @@ grpc_error* XdsResolver::CreateServiceConfig(
859
883
  " ]\n"
860
884
  "}");
861
885
  std::string json = absl::StrJoin(config_parts, "");
862
- grpc_error* error = GRPC_ERROR_NONE;
886
+ grpc_error_handle error = GRPC_ERROR_NONE;
863
887
  *service_config = ServiceConfig::Create(args_, json.c_str(), &error);
864
888
  return error;
865
889
  }
@@ -868,7 +892,7 @@ void XdsResolver::GenerateResult() {
868
892
  if (current_virtual_host_.routes.empty()) return;
869
893
  // First create XdsConfigSelector, which may add new entries to the cluster
870
894
  // state map, and then CreateServiceConfig for LB policies.
871
- grpc_error* error = GRPC_ERROR_NONE;
895
+ grpc_error_handle error = GRPC_ERROR_NONE;
872
896
  auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
873
897
  if (error != GRPC_ERROR_NONE) {
874
898
  OnError(error);
@@ -884,8 +908,12 @@ void XdsResolver::GenerateResult() {
884
908
  gpr_log(GPR_INFO, "[xds_resolver %p] generated service config: %s", this,
885
909
  result.service_config->json_string().c_str());
886
910
  }
887
- grpc_arg new_arg = config_selector->MakeChannelArg();
888
- result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
911
+ grpc_arg new_args[] = {
912
+ xds_client_->MakeChannelArg(),
913
+ config_selector->MakeChannelArg(),
914
+ };
915
+ result.args =
916
+ grpc_channel_args_copy_and_add(args_, new_args, GPR_ARRAY_SIZE(new_args));
889
917
  result_handler_->ReturnResult(std::move(result));
890
918
  }
891
919