grpc 1.32.0 → 1.36.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 (1031) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1086 -3054
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +15 -7
  6. data/include/grpc/grpc_security.h +227 -171
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +10 -8
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/port_platform.h +22 -55
  12. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  13. data/include/grpc/slice_buffer.h +3 -3
  14. data/include/grpc/support/sync.h +3 -3
  15. data/include/grpc/support/time.h +7 -7
  16. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  17. data/src/core/ext/filters/client_channel/client_channel.cc +2788 -1535
  18. data/src/core/ext/filters/client_channel/client_channel.h +0 -6
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
  21. data/src/core/ext/filters/client_channel/config_selector.h +40 -8
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +10 -7
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +7 -8
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +6 -2
  29. data/src/core/ext/filters/client_channel/lb_policy.h +6 -7
  30. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  32. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +204 -195
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  41. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +58 -26
  42. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -5
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
  44. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +478 -145
  46. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
  47. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +810 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
  51. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  52. data/src/core/ext/filters/client_channel/resolver.cc +4 -5
  53. data/src/core/ext/filters/client_channel/resolver.h +5 -13
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +43 -59
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +3 -3
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +443 -17
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +22 -23
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -18
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +362 -0
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +37 -30
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +566 -366
  65. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
  66. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  67. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  68. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  69. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +29 -74
  70. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +12 -10
  71. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  72. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -2
  73. data/src/core/ext/filters/client_channel/server_address.cc +86 -0
  74. data/src/core/ext/filters/client_channel/server_address.h +52 -36
  75. data/src/core/ext/filters/client_channel/service_config.cc +18 -13
  76. data/src/core/ext/filters/client_channel/service_config.h +8 -5
  77. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  79. data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
  80. data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
  81. data/src/core/ext/filters/client_channel/subchannel.cc +53 -66
  82. data/src/core/ext/filters/client_channel/subchannel.h +14 -20
  83. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
  85. data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
  86. data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
  87. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
  88. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  89. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +36 -33
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +3 -2
  93. data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
  94. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  95. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  100. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +226 -95
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  105. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  106. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  107. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +28 -42
  108. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -2
  109. data/src/core/ext/transport/chttp2/transport/flow_control.h +13 -3
  110. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  112. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  113. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
  114. data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
  115. data/src/core/ext/transport/chttp2/transport/parsing.cc +18 -3
  116. data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
  117. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  118. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +52 -33
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +199 -34
  123. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  124. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +171 -98
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +625 -202
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
  131. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +36 -24
  132. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +133 -39
  133. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  134. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +70 -45
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +31 -24
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +107 -47
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +74 -28
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +248 -43
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +63 -39
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +254 -60
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +42 -0
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
  157. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
  158. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  159. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  160. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  161. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  162. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  163. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  164. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  165. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +49 -27
  166. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +204 -48
  167. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +47 -26
  168. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +181 -48
  169. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
  170. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  171. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -17
  172. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +96 -33
  173. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
  174. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
  175. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +352 -199
  176. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1334 -443
  177. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +8 -7
  178. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +34 -10
  179. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
  180. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  181. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  182. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +129 -80
  184. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +525 -166
  185. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  186. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  187. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +26 -24
  188. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +121 -64
  189. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -6
  190. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -8
  191. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +70 -29
  192. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +296 -63
  193. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  194. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  195. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  196. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  197. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -34
  198. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +188 -75
  199. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
  200. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  201. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
  202. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  203. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
  204. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  205. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
  206. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  207. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  208. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  209. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  210. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  211. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  213. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  214. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  215. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  216. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  217. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +4 -4
  218. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +22 -3
  219. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  220. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  221. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  222. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  223. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  224. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  225. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  226. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  227. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  228. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  229. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  230. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  231. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  232. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  233. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
  234. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
  235. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
  236. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
  237. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  238. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  239. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  240. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  241. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  242. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  243. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  244. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  245. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  246. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  247. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  248. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  249. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  250. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  251. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  252. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  253. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  254. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  255. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  256. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  257. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  258. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  259. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  260. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  261. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  262. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  263. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  264. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  265. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  266. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  267. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
  268. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -0
  269. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  270. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  271. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  272. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  273. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  274. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  275. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  276. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  277. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  278. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
  279. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  280. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  281. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  282. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  283. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  284. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
  285. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  286. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  287. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  288. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  289. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  290. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
  291. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  292. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
  293. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  294. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
  295. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  296. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
  297. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  298. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
  299. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
  300. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
  301. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  302. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
  303. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  304. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
  305. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  306. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
  307. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  308. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
  309. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
  310. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
  311. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
  312. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
  313. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  314. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
  315. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
  316. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
  317. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  318. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
  319. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
  320. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
  321. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  322. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
  323. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
  324. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
  325. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  326. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
  327. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  328. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
  329. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  330. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
  331. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  332. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
  333. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
  334. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
  335. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  336. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
  337. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  338. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
  339. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
  340. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
  341. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  342. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
  343. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  344. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +101 -0
  345. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  346. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +938 -0
  347. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +285 -0
  348. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
  349. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  350. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
  351. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  352. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  353. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  354. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +504 -0
  355. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
  356. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
  357. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  358. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
  359. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
  360. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
  361. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  362. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
  363. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
  364. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
  365. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
  366. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
  367. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  368. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
  369. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
  370. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
  371. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
  372. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
  373. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
  374. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
  375. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  376. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
  377. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
  378. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
  379. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
  380. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
  381. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  382. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
  383. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  384. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
  385. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  386. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
  387. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  388. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
  389. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  390. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
  391. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  392. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
  393. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  394. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
  395. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  396. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
  397. data/src/core/ext/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
  398. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
  399. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  400. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
  401. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  402. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  404. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  405. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  406. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
  407. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  408. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
  409. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  410. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
  411. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  412. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
  413. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  414. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
  415. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  416. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
  417. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  418. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
  419. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  420. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
  421. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  422. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
  423. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  424. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
  425. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  426. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
  427. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  428. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
  429. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  430. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
  431. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  432. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
  433. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  434. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +310 -0
  435. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  436. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  437. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  438. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  439. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  440. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  441. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  442. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  443. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  444. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  445. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  446. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  447. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  448. data/src/core/ext/xds/certificate_provider_factory.h +61 -0
  449. data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
  450. data/src/core/ext/xds/certificate_provider_registry.h +57 -0
  451. data/src/core/ext/xds/certificate_provider_store.cc +87 -0
  452. data/src/core/ext/xds/certificate_provider_store.h +112 -0
  453. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
  454. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
  455. data/src/core/ext/xds/xds_api.cc +1149 -1058
  456. data/src/core/ext/xds/xds_api.h +215 -144
  457. data/src/core/ext/xds/xds_bootstrap.cc +228 -62
  458. data/src/core/ext/xds/xds_bootstrap.h +35 -12
  459. data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
  460. data/src/core/ext/xds/xds_certificate_provider.h +151 -0
  461. data/src/core/ext/xds/xds_channel_args.h +6 -3
  462. data/src/core/ext/xds/xds_client.cc +620 -495
  463. data/src/core/ext/xds/xds_client.h +121 -58
  464. data/src/core/ext/xds/xds_client_stats.cc +61 -17
  465. data/src/core/ext/xds/xds_client_stats.h +35 -7
  466. data/src/core/ext/xds/xds_server_config_fetcher.cc +267 -0
  467. data/src/core/lib/channel/channel_args.cc +9 -8
  468. data/src/core/lib/channel/channel_args.h +0 -1
  469. data/src/core/lib/channel/channel_trace.cc +4 -2
  470. data/src/core/lib/channel/channel_trace.h +1 -1
  471. data/src/core/lib/channel/channelz.cc +23 -59
  472. data/src/core/lib/channel/channelz.h +13 -22
  473. data/src/core/lib/channel/channelz_registry.cc +12 -11
  474. data/src/core/lib/channel/channelz_registry.h +3 -1
  475. data/src/core/lib/channel/handshaker.cc +4 -7
  476. data/src/core/lib/channel/handshaker.h +3 -3
  477. data/src/core/lib/compression/compression.cc +8 -4
  478. data/src/core/lib/compression/compression_args.cc +3 -2
  479. data/src/core/lib/compression/compression_internal.cc +10 -5
  480. data/src/core/lib/compression/compression_internal.h +2 -1
  481. data/src/core/lib/compression/stream_compression_identity.cc +1 -3
  482. data/src/core/lib/debug/stats.h +2 -2
  483. data/src/core/lib/debug/stats_data.cc +1 -0
  484. data/src/core/lib/debug/stats_data.h +13 -13
  485. data/src/core/lib/gpr/alloc.cc +3 -2
  486. data/src/core/lib/gpr/cpu_iphone.cc +10 -2
  487. data/src/core/lib/gpr/log.cc +59 -17
  488. data/src/core/lib/gpr/log_linux.cc +19 -3
  489. data/src/core/lib/gpr/log_posix.cc +15 -1
  490. data/src/core/lib/gpr/log_windows.cc +18 -4
  491. data/src/core/lib/gpr/murmur_hash.cc +1 -1
  492. data/src/core/lib/gpr/spinlock.h +10 -2
  493. data/src/core/lib/gpr/string.cc +23 -22
  494. data/src/core/lib/gpr/string.h +5 -6
  495. data/src/core/lib/gpr/sync.cc +4 -4
  496. data/src/core/lib/gpr/time.cc +12 -12
  497. data/src/core/lib/gpr/time_precise.cc +5 -2
  498. data/src/core/lib/gpr/time_precise.h +6 -2
  499. data/src/core/lib/gpr/tls.h +4 -0
  500. data/src/core/lib/gpr/tls_msvc.h +2 -0
  501. data/src/core/lib/gpr/tls_stdcpp.h +48 -0
  502. data/src/core/lib/gpr/useful.h +5 -4
  503. data/src/core/lib/gprpp/arena.h +3 -2
  504. data/src/core/lib/gprpp/dual_ref_counted.h +331 -0
  505. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  506. data/src/core/lib/gprpp/examine_stack.h +46 -0
  507. data/src/core/lib/gprpp/fork.cc +2 -2
  508. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  509. data/src/core/lib/gprpp/mpscq.cc +2 -2
  510. data/src/core/lib/gprpp/orphanable.h +4 -8
  511. data/src/core/lib/gprpp/ref_counted.h +91 -68
  512. data/src/core/lib/gprpp/ref_counted_ptr.h +166 -7
  513. data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
  514. data/src/core/lib/gprpp/stat_posix.cc +49 -0
  515. data/src/core/lib/gprpp/stat_windows.cc +48 -0
  516. data/src/core/lib/gprpp/sync.h +129 -40
  517. data/src/core/lib/gprpp/thd.h +2 -2
  518. data/src/core/lib/gprpp/thd_posix.cc +42 -37
  519. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  520. data/src/core/lib/gprpp/time_util.cc +77 -0
  521. data/src/core/lib/gprpp/time_util.h +42 -0
  522. data/src/core/lib/http/httpcli.cc +1 -1
  523. data/src/core/lib/http/httpcli.h +2 -3
  524. data/src/core/lib/http/httpcli_security_connector.cc +3 -3
  525. data/src/core/lib/http/parser.cc +47 -27
  526. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  527. data/src/core/lib/iomgr/combiner.cc +2 -1
  528. data/src/core/lib/iomgr/endpoint.h +1 -1
  529. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -5
  530. data/src/core/lib/iomgr/error.cc +17 -12
  531. data/src/core/lib/iomgr/error_internal.h +1 -1
  532. data/src/core/lib/iomgr/ev_apple.cc +10 -7
  533. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  534. data/src/core/lib/iomgr/ev_epollex_linux.cc +29 -21
  535. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  536. data/src/core/lib/iomgr/exec_ctx.cc +1 -1
  537. data/src/core/lib/iomgr/exec_ctx.h +16 -12
  538. data/src/core/lib/iomgr/executor.cc +2 -1
  539. data/src/core/lib/iomgr/executor.h +1 -1
  540. data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
  541. data/src/core/lib/iomgr/executor/threadpool.h +4 -4
  542. data/src/core/lib/iomgr/iomgr.cc +1 -1
  543. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  544. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  545. data/src/core/lib/iomgr/load_file.h +1 -1
  546. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  547. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  548. data/src/core/lib/iomgr/parse_address.cc +127 -43
  549. data/src/core/lib/iomgr/parse_address.h +32 -8
  550. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
  551. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  552. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  553. data/src/core/lib/iomgr/python_util.h +4 -4
  554. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  555. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
  556. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  557. data/src/core/lib/iomgr/sockaddr_utils.cc +11 -11
  558. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  559. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  560. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  561. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  562. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  563. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  564. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  565. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  566. data/src/core/lib/iomgr/tcp_posix.cc +16 -12
  567. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  568. data/src/core/lib/iomgr/timer_custom.cc +5 -5
  569. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  570. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  571. data/src/core/lib/iomgr/udp_server.cc +1 -2
  572. data/src/core/lib/iomgr/udp_server.h +1 -2
  573. data/src/core/lib/iomgr/unix_sockets_posix.cc +32 -21
  574. data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
  575. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
  576. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  577. data/src/core/lib/json/json.h +12 -2
  578. data/src/core/lib/json/json_reader.cc +8 -4
  579. data/src/core/lib/json/json_util.cc +58 -0
  580. data/src/core/lib/json/json_util.h +204 -0
  581. data/src/core/lib/json/json_writer.cc +2 -1
  582. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  583. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  584. data/src/core/lib/security/authorization/matchers.cc +339 -0
  585. data/src/core/lib/security/authorization/matchers.h +158 -0
  586. data/src/core/lib/security/authorization/mock_cel/activation.h +1 -1
  587. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
  588. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
  589. data/src/core/lib/security/authorization/mock_cel/cel_value.h +13 -7
  590. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
  591. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
  592. data/src/core/lib/security/context/security_context.cc +4 -3
  593. data/src/core/lib/security/context/security_context.h +3 -1
  594. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  595. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  596. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  597. data/src/core/lib/security/credentials/credentials.cc +7 -7
  598. data/src/core/lib/security/credentials/credentials.h +5 -4
  599. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  600. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  601. data/src/core/lib/security/credentials/external/aws_request_signer.cc +213 -0
  602. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  603. data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
  604. data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
  605. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
  606. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
  607. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
  608. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
  609. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
  610. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
  611. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +64 -0
  612. data/src/core/lib/security/credentials/jwt/json_token.cc +3 -3
  613. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  614. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -4
  615. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  616. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  617. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +39 -46
  618. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  619. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  620. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
  621. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
  622. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +346 -0
  623. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
  624. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
  625. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
  626. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
  627. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
  628. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
  629. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  630. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  631. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  632. data/src/core/lib/security/credentials/xds/xds_credentials.cc +244 -0
  633. data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
  634. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  635. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -13
  636. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
  637. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
  638. data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
  639. data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
  640. data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
  641. data/src/core/lib/security/security_connector/security_connector.cc +4 -3
  642. data/src/core/lib/security/security_connector/security_connector.h +4 -2
  643. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  644. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -2
  645. data/src/core/lib/security/security_connector/ssl_utils.h +19 -19
  646. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +354 -279
  647. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
  648. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  649. data/src/core/lib/security/transport/security_handshaker.cc +4 -6
  650. data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
  651. data/src/core/lib/security/util/json_util.h +1 -0
  652. data/src/core/lib/slice/slice.cc +7 -4
  653. data/src/core/lib/slice/slice_buffer.cc +2 -1
  654. data/src/core/lib/slice/slice_intern.cc +7 -8
  655. data/src/core/lib/slice/slice_internal.h +2 -2
  656. data/src/core/lib/surface/call.cc +41 -32
  657. data/src/core/lib/surface/call_details.cc +8 -8
  658. data/src/core/lib/surface/channel.cc +25 -41
  659. data/src/core/lib/surface/channel.h +9 -3
  660. data/src/core/lib/surface/channel_init.cc +1 -1
  661. data/src/core/lib/surface/completion_queue.cc +30 -24
  662. data/src/core/lib/surface/completion_queue.h +16 -16
  663. data/src/core/lib/surface/init.cc +45 -29
  664. data/src/core/lib/surface/lame_client.cc +20 -46
  665. data/src/core/lib/surface/lame_client.h +4 -0
  666. data/src/core/lib/surface/server.cc +66 -20
  667. data/src/core/lib/surface/server.h +42 -7
  668. data/src/core/lib/surface/validate_metadata.h +3 -0
  669. data/src/core/lib/surface/version.cc +2 -2
  670. data/src/core/lib/transport/authority_override.cc +6 -4
  671. data/src/core/lib/transport/authority_override.h +7 -2
  672. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  673. data/src/core/lib/transport/bdp_estimator.h +2 -1
  674. data/src/core/lib/transport/byte_stream.h +3 -3
  675. data/src/core/lib/transport/connectivity_state.h +11 -9
  676. data/src/core/lib/transport/error_utils.h +1 -1
  677. data/src/core/lib/transport/metadata.cc +16 -2
  678. data/src/core/lib/transport/metadata.h +2 -2
  679. data/src/core/lib/transport/metadata_batch.h +4 -4
  680. data/src/core/lib/transport/static_metadata.cc +1 -1
  681. data/src/core/lib/transport/status_metadata.cc +4 -3
  682. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  683. data/src/core/lib/transport/transport.cc +5 -3
  684. data/src/core/lib/transport/transport.h +8 -8
  685. data/src/core/lib/uri/uri_parser.cc +131 -249
  686. data/src/core/lib/uri/uri_parser.h +57 -21
  687. data/src/core/plugin_registry/grpc_plugin_registry.cc +47 -20
  688. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  689. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  690. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +18 -21
  691. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -47
  692. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  693. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  694. data/src/core/tsi/fake_transport_security.cc +7 -4
  695. data/src/core/tsi/local_transport_security.cc +5 -1
  696. data/src/core/tsi/local_transport_security.h +6 -7
  697. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  698. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  699. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -2
  700. data/src/core/tsi/ssl_transport_security.cc +75 -58
  701. data/src/core/tsi/ssl_transport_security.h +6 -6
  702. data/src/core/tsi/transport_security.cc +10 -8
  703. data/src/core/tsi/transport_security_interface.h +1 -1
  704. data/src/ruby/ext/grpc/extconf.rb +1 -1
  705. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  706. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -16
  707. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -40
  708. data/src/ruby/lib/grpc/version.rb +1 -1
  709. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
  710. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  711. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  712. data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
  713. data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
  714. data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
  715. data/third_party/abseil-cpp/absl/base/casts.h +9 -6
  716. data/third_party/abseil-cpp/absl/base/config.h +60 -17
  717. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
  718. data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
  719. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
  720. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  721. data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
  722. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  723. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
  724. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
  725. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
  726. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
  727. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
  728. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
  729. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
  730. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  731. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  732. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
  733. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
  734. data/third_party/abseil-cpp/absl/base/macros.h +36 -109
  735. data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
  736. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  737. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  738. data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
  739. data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
  740. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  741. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
  742. data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
  743. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
  744. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
  745. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
  746. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
  747. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  748. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
  749. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
  750. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
  751. data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
  752. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  753. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
  754. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
  755. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
  756. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
  757. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
  758. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
  759. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  760. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  761. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
  762. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
  763. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
  764. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  765. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
  766. data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
  767. data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
  768. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  769. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  770. data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
  771. data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
  772. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  773. data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
  774. data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
  775. data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
  776. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
  777. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  778. data/third_party/abseil-cpp/absl/status/status.cc +4 -6
  779. data/third_party/abseil-cpp/absl/status/status.h +502 -113
  780. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  781. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  782. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  783. data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
  784. data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
  785. data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
  786. data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
  787. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  788. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  789. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  790. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  791. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
  792. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
  793. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
  794. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
  795. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
  796. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
  797. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
  798. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
  799. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
  800. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
  801. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
  802. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
  803. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
  804. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
  805. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  806. data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
  807. data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
  808. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  809. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
  810. data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
  811. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
  812. data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
  813. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  814. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
  815. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
  816. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
  817. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
  818. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
  819. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
  820. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
  821. data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
  822. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
  823. data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
  824. data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
  825. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  826. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
  827. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
  828. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  829. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  830. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  831. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  832. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
  833. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  834. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
  835. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
  836. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
  837. data/third_party/abseil-cpp/absl/time/time.h +15 -16
  838. data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
  839. data/third_party/abseil-cpp/absl/types/optional.h +9 -9
  840. data/third_party/abseil-cpp/absl/types/span.h +49 -36
  841. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  842. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  843. data/third_party/boringssl-with-bazel/err_data.c +728 -720
  844. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  845. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  846. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  847. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  848. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  849. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  850. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  851. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -20
  852. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  853. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  854. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  855. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  856. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  857. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  858. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  859. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  860. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  861. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  862. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  863. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  864. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  865. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  866. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  867. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  868. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  869. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  870. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  871. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
  872. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  873. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  874. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  875. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
  876. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  877. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  878. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  879. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  880. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  881. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
  882. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  883. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  884. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
  885. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  886. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  887. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  888. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +128 -38
  889. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  890. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  891. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
  892. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +107 -54
  893. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +155 -2
  894. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +112 -36
  895. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +63 -9
  896. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  897. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  898. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  899. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  900. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  901. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  902. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  903. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  904. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  905. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  906. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
  907. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +6 -4
  908. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  909. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
  910. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
  911. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +8 -3
  912. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
  913. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
  914. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  915. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +32 -11
  916. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
  917. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  918. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +4 -4
  919. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
  920. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +42 -25
  921. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
  922. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
  923. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +3 -4
  924. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
  925. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  926. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +38 -3
  927. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  928. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  929. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
  930. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  931. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +25 -24
  932. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  933. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +32 -28
  934. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  935. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  936. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  937. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  938. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  939. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  940. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +2 -2
  941. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
  942. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -7
  943. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  944. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
  945. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +10 -8
  946. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -546
  947. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  948. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +15 -7
  949. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
  950. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  951. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  952. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -0
  953. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
  954. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  955. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
  956. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -0
  957. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  958. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +16 -3
  959. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  960. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
  961. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  962. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  963. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +106 -27
  964. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -8
  965. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  966. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +462 -163
  967. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +593 -440
  968. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  969. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
  970. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +22 -21
  971. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +13 -23
  972. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +11 -6
  973. data/third_party/boringssl-with-bazel/src/ssl/internal.h +82 -26
  974. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  975. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
  976. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
  977. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +87 -14
  978. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +18 -22
  979. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  980. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  981. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +537 -34
  982. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
  983. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +59 -21
  984. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  985. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +194 -58
  986. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  987. data/third_party/upb/upb/decode.c +248 -167
  988. data/third_party/upb/upb/decode.h +20 -1
  989. data/third_party/upb/upb/decode.int.h +163 -0
  990. data/third_party/upb/upb/decode_fast.c +1040 -0
  991. data/third_party/upb/upb/decode_fast.h +126 -0
  992. data/third_party/upb/upb/def.c +2178 -0
  993. data/third_party/upb/upb/def.h +315 -0
  994. data/third_party/upb/upb/def.hpp +439 -0
  995. data/third_party/upb/upb/encode.c +227 -169
  996. data/third_party/upb/upb/encode.h +27 -2
  997. data/third_party/upb/upb/json_decode.c +1443 -0
  998. data/third_party/upb/upb/json_decode.h +23 -0
  999. data/third_party/upb/upb/json_encode.c +713 -0
  1000. data/third_party/upb/upb/json_encode.h +36 -0
  1001. data/third_party/upb/upb/msg.c +167 -88
  1002. data/third_party/upb/upb/msg.h +174 -34
  1003. data/third_party/upb/upb/port_def.inc +74 -61
  1004. data/third_party/upb/upb/port_undef.inc +3 -7
  1005. data/third_party/upb/upb/reflection.c +408 -0
  1006. data/third_party/upb/upb/reflection.h +168 -0
  1007. data/third_party/upb/upb/table.c +34 -197
  1008. data/third_party/upb/upb/table.int.h +14 -5
  1009. data/third_party/upb/upb/text_encode.c +421 -0
  1010. data/third_party/upb/upb/text_encode.h +38 -0
  1011. data/third_party/upb/upb/upb.c +18 -41
  1012. data/third_party/upb/upb/upb.h +36 -7
  1013. data/third_party/upb/upb/upb.hpp +4 -4
  1014. data/third_party/upb/upb/upb.int.h +29 -0
  1015. metadata +309 -63
  1016. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -946
  1017. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
  1018. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
  1019. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  1020. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  1021. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -354
  1022. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -142
  1023. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  1024. data/src/core/ext/xds/xds_channel.h +0 -46
  1025. data/src/core/ext/xds/xds_channel_secure.cc +0 -103
  1026. data/src/core/lib/gprpp/map.h +0 -53
  1027. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  1028. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  1029. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  1030. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  1031. data/third_party/upb/upb/port.c +0 -26
@@ -23,7 +23,9 @@
23
23
  #include <string.h>
24
24
 
25
25
  #include "absl/container/inlined_vector.h"
26
+ #include "absl/strings/str_cat.h"
26
27
  #include "absl/strings/str_format.h"
28
+ #include "absl/strings/str_join.h"
27
29
 
28
30
  #include "src/core/lib/gpr/string.h"
29
31
 
@@ -126,6 +128,7 @@ grpc_error* ParseLoadBalancingConfigHelper(
126
128
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING("type should be array");
127
129
  }
128
130
  // Find the first LB policy that this client supports.
131
+ std::vector<absl::string_view> policies_tried;
129
132
  for (const Json& lb_config : lb_config_array.array_value()) {
130
133
  if (lb_config.type() != Json::Type::OBJECT) {
131
134
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -149,8 +152,12 @@ grpc_error* ParseLoadBalancingConfigHelper(
149
152
  *result = it;
150
153
  return GRPC_ERROR_NONE;
151
154
  }
155
+ policies_tried.push_back(it->first);
152
156
  }
153
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No known policy");
157
+ return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
158
+ absl::StrCat("No known policies in list: ",
159
+ absl::StrJoin(policies_tried, " "))
160
+ .c_str());
154
161
  }
155
162
 
156
163
  } // namespace
@@ -29,11 +29,10 @@ namespace grpc_core {
29
29
  // Resolver
30
30
  //
31
31
 
32
- Resolver::Resolver(std::shared_ptr<WorkSerializer> work_serializer,
33
- std::unique_ptr<ResultHandler> result_handler)
34
- : InternallyRefCounted(&grpc_trace_resolver_refcount),
35
- work_serializer_(std::move(work_serializer)),
36
- result_handler_(std::move(result_handler)) {}
32
+ Resolver::Resolver()
33
+ : InternallyRefCounted(GRPC_TRACE_FLAG_ENABLED(grpc_trace_resolver_refcount)
34
+ ? "Resolver"
35
+ : nullptr) {}
37
36
 
38
37
  //
39
38
  // Resolver::Result
@@ -32,6 +32,9 @@
32
32
 
33
33
  extern grpc_core::DebugOnlyTraceFlag grpc_trace_resolver_refcount;
34
34
 
35
+ // Name associated with individual address, if available.
36
+ #define GRPC_ARG_ADDRESS_NAME "grpc.address_name"
37
+
35
38
  namespace grpc_core {
36
39
 
37
40
  /// Interface for name resolution.
@@ -87,7 +90,7 @@ class Resolver : public InternallyRefCounted<Resolver> {
87
90
  // Not copyable nor movable.
88
91
  Resolver(const Resolver&) = delete;
89
92
  Resolver& operator=(const Resolver&) = delete;
90
- virtual ~Resolver() = default;
93
+ ~Resolver() override = default;
91
94
 
92
95
  /// Starts resolving.
93
96
  virtual void StartLocked() = 0;
@@ -122,21 +125,10 @@ class Resolver : public InternallyRefCounted<Resolver> {
122
125
  }
123
126
 
124
127
  protected:
125
- Resolver(std::shared_ptr<WorkSerializer> work_serializer,
126
- std::unique_ptr<ResultHandler> result_handler);
128
+ Resolver();
127
129
 
128
130
  /// Shuts down the resolver.
129
131
  virtual void ShutdownLocked() = 0;
130
-
131
- std::shared_ptr<WorkSerializer> work_serializer() const {
132
- return work_serializer_;
133
- }
134
-
135
- ResultHandler* result_handler() const { return result_handler_.get(); }
136
-
137
- private:
138
- std::shared_ptr<WorkSerializer> work_serializer_;
139
- std::unique_ptr<ResultHandler> result_handler_;
140
132
  };
141
133
 
142
134
  } // namespace grpc_core
@@ -75,7 +75,7 @@ class AresDnsResolver : public Resolver {
75
75
  void ShutdownLocked() override;
76
76
 
77
77
  private:
78
- virtual ~AresDnsResolver();
78
+ ~AresDnsResolver() override;
79
79
 
80
80
  void MaybeStartResolvingLocked();
81
81
  void StartResolvingLocked();
@@ -86,15 +86,25 @@ class AresDnsResolver : public Resolver {
86
86
  void OnResolvedLocked(grpc_error* error);
87
87
 
88
88
  /// DNS server to use (if not system default)
89
- char* dns_server_;
89
+ std::string dns_server_;
90
90
  /// name to resolve (usually the same as target_name)
91
- char* name_to_resolve_;
91
+ std::string name_to_resolve_;
92
92
  /// channel args
93
93
  grpc_channel_args* channel_args_;
94
- /// whether to request the service config
95
- bool request_service_config_;
94
+ std::shared_ptr<WorkSerializer> work_serializer_;
95
+ std::unique_ptr<ResultHandler> result_handler_;
96
96
  /// pollset_set to drive the name resolution process
97
97
  grpc_pollset_set* interested_parties_;
98
+
99
+ /// whether to request the service config
100
+ bool request_service_config_;
101
+ // whether or not to enable SRV DNS queries
102
+ bool enable_srv_queries_;
103
+ // timeout in milliseconds for active DNS queries
104
+ int query_timeout_ms_;
105
+ /// min interval between DNS requests
106
+ grpc_millis min_time_between_resolutions_;
107
+
98
108
  /// closures used by the work_serializer
99
109
  grpc_closure on_next_resolution_;
100
110
  grpc_closure on_resolved_;
@@ -105,8 +115,6 @@ class AresDnsResolver : public Resolver {
105
115
  /// next resolution timer
106
116
  bool have_next_resolution_timer_ = false;
107
117
  grpc_timer next_resolution_timer_;
108
- /// min interval between DNS requests
109
- grpc_millis min_time_between_resolutions_;
110
118
  /// timestamp of last DNS request
111
119
  grpc_millis last_resolution_timestamp_ = -1;
112
120
  /// retry backoff state
@@ -119,14 +127,25 @@ class AresDnsResolver : public Resolver {
119
127
  char* service_config_json_ = nullptr;
120
128
  // has shutdown been initiated
121
129
  bool shutdown_initiated_ = false;
122
- // timeout in milliseconds for active DNS queries
123
- int query_timeout_ms_;
124
- // whether or not to enable SRV DNS queries
125
- bool enable_srv_queries_;
126
130
  };
127
131
 
128
132
  AresDnsResolver::AresDnsResolver(ResolverArgs args)
129
- : Resolver(std::move(args.work_serializer), std::move(args.result_handler)),
133
+ : dns_server_(args.uri.authority()),
134
+ name_to_resolve_(absl::StripPrefix(args.uri.path(), "/")),
135
+ channel_args_(grpc_channel_args_copy(args.args)),
136
+ work_serializer_(std::move(args.work_serializer)),
137
+ result_handler_(std::move(args.result_handler)),
138
+ interested_parties_(args.pollset_set),
139
+ request_service_config_(!grpc_channel_args_find_bool(
140
+ channel_args_, GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION, true)),
141
+ enable_srv_queries_(grpc_channel_args_find_bool(
142
+ channel_args_, GRPC_ARG_DNS_ENABLE_SRV_QUERIES, false)),
143
+ query_timeout_ms_(grpc_channel_args_find_integer(
144
+ channel_args_, GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS,
145
+ {GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, 0, INT_MAX})),
146
+ min_time_between_resolutions_(grpc_channel_args_find_integer(
147
+ channel_args_, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
148
+ {1000 * 30, 0, INT_MAX})),
130
149
  backoff_(
131
150
  BackOff::Options()
132
151
  .set_initial_backoff(GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS *
@@ -134,49 +153,14 @@ AresDnsResolver::AresDnsResolver(ResolverArgs args)
134
153
  .set_multiplier(GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER)
135
154
  .set_jitter(GRPC_DNS_RECONNECT_JITTER)
136
155
  .set_max_backoff(GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)) {
137
- // Closure Initialization
156
+ // Closure initialization.
138
157
  GRPC_CLOSURE_INIT(&on_next_resolution_, OnNextResolution, this,
139
158
  grpc_schedule_on_exec_ctx);
140
159
  GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, grpc_schedule_on_exec_ctx);
141
- // Get name to resolve from URI path.
142
- const char* path = args.uri->path;
143
- if (path[0] == '/') ++path;
144
- name_to_resolve_ = gpr_strdup(path);
145
- // Get DNS server from URI authority.
146
- dns_server_ = nullptr;
147
- if (0 != strcmp(args.uri->authority, "")) {
148
- dns_server_ = gpr_strdup(args.uri->authority);
149
- }
150
- channel_args_ = grpc_channel_args_copy(args.args);
151
- // Disable service config option
152
- const grpc_arg* arg = grpc_channel_args_find(
153
- channel_args_, GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION);
154
- request_service_config_ = !grpc_channel_arg_get_bool(arg, true);
155
- // Min time b/t resolutions option
156
- arg = grpc_channel_args_find(channel_args_,
157
- GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS);
158
- min_time_between_resolutions_ =
159
- grpc_channel_arg_get_integer(arg, {1000 * 30, 0, INT_MAX});
160
- // Enable SRV queries option
161
- arg = grpc_channel_args_find(channel_args_, GRPC_ARG_DNS_ENABLE_SRV_QUERIES);
162
- enable_srv_queries_ = grpc_channel_arg_get_bool(arg, false);
163
- interested_parties_ = grpc_pollset_set_create();
164
- if (args.pollset_set != nullptr) {
165
- grpc_pollset_set_add_pollset_set(interested_parties_, args.pollset_set);
166
- }
167
-
168
- const grpc_arg* query_timeout_ms_arg =
169
- grpc_channel_args_find(channel_args_, GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS);
170
- query_timeout_ms_ = grpc_channel_arg_get_integer(
171
- query_timeout_ms_arg,
172
- {GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, 0, INT_MAX});
173
160
  }
174
161
 
175
162
  AresDnsResolver::~AresDnsResolver() {
176
163
  GRPC_CARES_TRACE_LOG("resolver:%p destroying AresDnsResolver", this);
177
- grpc_pollset_set_destroy(interested_parties_);
178
- gpr_free(dns_server_);
179
- gpr_free(name_to_resolve_);
180
164
  grpc_channel_args_destroy(channel_args_);
181
165
  }
182
166
 
@@ -212,8 +196,8 @@ void AresDnsResolver::ShutdownLocked() {
212
196
  void AresDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
213
197
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
214
198
  GRPC_ERROR_REF(error); // ref owned by lambda
215
- r->work_serializer()->Run([r, error]() { r->OnNextResolutionLocked(error); },
216
- DEBUG_LOCATION);
199
+ r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
200
+ DEBUG_LOCATION);
217
201
  }
218
202
 
219
203
  void AresDnsResolver::OnNextResolutionLocked(grpc_error* error) {
@@ -324,8 +308,8 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
324
308
  void AresDnsResolver::OnResolved(void* arg, grpc_error* error) {
325
309
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
326
310
  GRPC_ERROR_REF(error); // ref owned by lambda
327
- r->work_serializer()->Run([r, error]() { r->OnResolvedLocked(error); },
328
- DEBUG_LOCATION);
311
+ r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
312
+ DEBUG_LOCATION);
329
313
  }
330
314
 
331
315
  void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
@@ -352,7 +336,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
352
336
  GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
353
337
  this, service_config_string.c_str());
354
338
  result.service_config = ServiceConfig::Create(
355
- service_config_string, &result.service_config_error);
339
+ channel_args_, service_config_string, &result.service_config_error);
356
340
  }
357
341
  }
358
342
  absl::InlinedVector<grpc_arg, 1> new_args;
@@ -362,7 +346,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
362
346
  }
363
347
  result.args = grpc_channel_args_copy_and_add(channel_args_, new_args.data(),
364
348
  new_args.size());
365
- result_handler()->ReturnResult(std::move(result));
349
+ result_handler_->ReturnResult(std::move(result));
366
350
  addresses_.reset();
367
351
  balancer_addresses_.reset();
368
352
  // Reset backoff state so that we start from the beginning when the
@@ -373,7 +357,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
373
357
  grpc_error_string(error));
374
358
  std::string error_message =
375
359
  absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
376
- result_handler()->ReturnError(grpc_error_set_int(
360
+ result_handler_->ReturnError(grpc_error_set_int(
377
361
  GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(error_message.c_str(),
378
362
  &error, 1),
379
363
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
@@ -439,11 +423,11 @@ void AresDnsResolver::StartResolvingLocked() {
439
423
  resolving_ = true;
440
424
  service_config_json_ = nullptr;
441
425
  pending_request_ = grpc_dns_lookup_ares_locked(
442
- dns_server_, name_to_resolve_, kDefaultPort, interested_parties_,
443
- &on_resolved_, &addresses_,
426
+ dns_server_.c_str(), name_to_resolve_.c_str(), kDefaultPort,
427
+ interested_parties_, &on_resolved_, &addresses_,
444
428
  enable_srv_queries_ ? &balancer_addresses_ : nullptr,
445
429
  request_service_config_ ? &service_config_json_ : nullptr,
446
- query_timeout_ms_, work_serializer());
430
+ query_timeout_ms_, work_serializer_);
447
431
  last_resolution_timestamp_ = grpc_core::ExecCtx::Get()->Now();
448
432
  GRPC_CARES_TRACE_LOG("resolver:%p Started resolving. pending_request_:%p",
449
433
  this, pending_request_);
@@ -455,7 +439,7 @@ void AresDnsResolver::StartResolvingLocked() {
455
439
 
456
440
  class AresDnsResolverFactory : public ResolverFactory {
457
441
  public:
458
- bool IsValidUri(const grpc_uri* /*uri*/) const override { return true; }
442
+ bool IsValidUri(const URI& /*uri*/) const override { return true; }
459
443
 
460
444
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
461
445
  return MakeOrphanable<AresDnsResolver>(std::move(args));
@@ -22,39 +22,8 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <ares.h>
25
- #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
26
25
  #include "src/core/lib/iomgr/pollset_set.h"
27
-
28
- typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;
29
-
30
- /* Start \a ev_driver. It will keep working until all IO on its ares_channel is
31
- done, or grpc_ares_ev_driver_destroy() is called. It may notify the callbacks
32
- bound to its ares_channel when necessary. */
33
- void grpc_ares_ev_driver_start_locked(grpc_ares_ev_driver* ev_driver);
34
-
35
- /* Returns the ares_channel owned by \a ev_driver. To bind a c-ares query to
36
- \a ev_driver, use the ares_channel owned by \a ev_driver as the arg of the
37
- query. */
38
- ares_channel* grpc_ares_ev_driver_get_channel_locked(
39
- grpc_ares_ev_driver* ev_driver);
40
-
41
- /* Creates a new grpc_ares_ev_driver. Returns GRPC_ERROR_NONE if \a ev_driver is
42
- created successfully. */
43
- grpc_error* grpc_ares_ev_driver_create_locked(
44
- grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
45
- int query_timeout_ms,
46
- std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
47
- grpc_ares_request* request);
48
-
49
- /* Called back when all DNS lookups have completed. */
50
- void grpc_ares_ev_driver_on_queries_complete_locked(
51
- grpc_ares_ev_driver* ev_driver);
52
-
53
- /* Shutdown all the grpc_fds used by \a ev_driver */
54
- void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver);
55
-
56
- /* Exposed in this header for C-core tests only */
57
- extern void (*grpc_ares_test_only_inject_config)(ares_channel channel);
26
+ #include "src/core/lib/iomgr/work_serializer.h"
58
27
 
59
28
  namespace grpc_core {
60
29
 
@@ -43,13 +43,13 @@ namespace grpc_core {
43
43
  class GrpcPolledFdPosix : public GrpcPolledFd {
44
44
  public:
45
45
  GrpcPolledFdPosix(ares_socket_t as, grpc_pollset_set* driver_pollset_set)
46
- : name_(absl::StrCat("c-ares fd: ", (int)as)), as_(as) {
47
- fd_ = grpc_fd_create((int)as, name_.c_str(), false);
46
+ : name_(absl::StrCat("c-ares fd: ", static_cast<int>(as))), as_(as) {
47
+ fd_ = grpc_fd_create(static_cast<int>(as), name_.c_str(), false);
48
48
  driver_pollset_set_ = driver_pollset_set;
49
49
  grpc_pollset_set_add_fd(driver_pollset_set_, fd_);
50
50
  }
51
51
 
52
- ~GrpcPolledFdPosix() {
52
+ ~GrpcPolledFdPosix() override {
53
53
  grpc_pollset_set_del_fd(driver_pollset_set_, fd_);
54
54
  /* c-ares library will close the fd inside grpc_fd. This fd may be picked up
55
55
  immediately by another thread, and should not be closed by the following
@@ -46,6 +46,7 @@
46
46
  #include "src/core/lib/iomgr/nameser.h"
47
47
  #include "src/core/lib/iomgr/parse_address.h"
48
48
  #include "src/core/lib/iomgr/sockaddr_utils.h"
49
+ #include "src/core/lib/iomgr/timer.h"
49
50
  #include "src/core/lib/transport/authority_override.h"
50
51
 
51
52
  using grpc_core::ServerAddress;
@@ -56,6 +57,8 @@ grpc_core::TraceFlag grpc_trace_cares_address_sorting(false,
56
57
 
57
58
  grpc_core::TraceFlag grpc_trace_cares_resolver(false, "cares_resolver");
58
59
 
60
+ typedef struct grpc_ares_ev_driver grpc_ares_ev_driver;
61
+
59
62
  struct grpc_ares_request {
60
63
  /** indicates the DNS server to use, if specified */
61
64
  struct ares_addr_port_node dns_server_addr;
@@ -77,6 +80,58 @@ struct grpc_ares_request {
77
80
  grpc_error* error;
78
81
  };
79
82
 
83
+ typedef struct fd_node {
84
+ /** the owner of this fd node */
85
+ grpc_ares_ev_driver* ev_driver;
86
+ /** a closure wrapping on_readable_locked, which should be
87
+ invoked when the grpc_fd in this node becomes readable. */
88
+ grpc_closure read_closure;
89
+ /** a closure wrapping on_writable_locked, which should be
90
+ invoked when the grpc_fd in this node becomes writable. */
91
+ grpc_closure write_closure;
92
+ /** next fd node in the list */
93
+ struct fd_node* next;
94
+
95
+ /** wrapped fd that's polled by grpc's poller for the current platform */
96
+ grpc_core::GrpcPolledFd* grpc_polled_fd;
97
+ /** if the readable closure has been registered */
98
+ bool readable_registered;
99
+ /** if the writable closure has been registered */
100
+ bool writable_registered;
101
+ /** if the fd has been shutdown yet from grpc iomgr perspective */
102
+ bool already_shutdown;
103
+ } fd_node;
104
+
105
+ struct grpc_ares_ev_driver {
106
+ /** the ares_channel owned by this event driver */
107
+ ares_channel channel;
108
+ /** pollset set for driving the IO events of the channel */
109
+ grpc_pollset_set* pollset_set;
110
+ /** refcount of the event driver */
111
+ gpr_refcount refs;
112
+
113
+ /** work_serializer to synchronize c-ares and I/O callbacks on */
114
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
115
+ /** a list of grpc_fd that this event driver is currently using. */
116
+ fd_node* fds;
117
+ /** is this event driver being shut down */
118
+ bool shutting_down;
119
+ /** request object that's using this ev driver */
120
+ grpc_ares_request* request;
121
+ /** Owned by the ev_driver. Creates new GrpcPolledFd's */
122
+ std::unique_ptr<grpc_core::GrpcPolledFdFactory> polled_fd_factory;
123
+ /** query timeout in milliseconds */
124
+ int query_timeout_ms;
125
+ /** alarm to cancel active queries */
126
+ grpc_timer query_timeout;
127
+ /** cancels queries on a timeout */
128
+ grpc_closure on_timeout_locked;
129
+ /** alarm to poll ares_process on in case fd events don't happen */
130
+ grpc_timer ares_backup_poll_alarm;
131
+ /** polls ares_process on a periodic timer */
132
+ grpc_closure on_ares_backup_poll_alarm_locked;
133
+ };
134
+
80
135
  // TODO(apolcyn): make grpc_ares_hostbyname_request a sub-class
81
136
  // of GrpcAresQuery.
82
137
  typedef struct grpc_ares_hostbyname_request {
@@ -121,6 +176,380 @@ class GrpcAresQuery {
121
176
  const std::string name_;
122
177
  };
123
178
 
179
+ static grpc_ares_ev_driver* grpc_ares_ev_driver_ref(
180
+ grpc_ares_ev_driver* ev_driver) {
181
+ GRPC_CARES_TRACE_LOG("request:%p Ref ev_driver %p", ev_driver->request,
182
+ ev_driver);
183
+ gpr_ref(&ev_driver->refs);
184
+ return ev_driver;
185
+ }
186
+
187
+ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver) {
188
+ GRPC_CARES_TRACE_LOG("request:%p Unref ev_driver %p", ev_driver->request,
189
+ ev_driver);
190
+ if (gpr_unref(&ev_driver->refs)) {
191
+ GRPC_CARES_TRACE_LOG("request:%p destroy ev_driver %p", ev_driver->request,
192
+ ev_driver);
193
+ GPR_ASSERT(ev_driver->fds == nullptr);
194
+ ares_destroy(ev_driver->channel);
195
+ grpc_ares_complete_request_locked(ev_driver->request);
196
+ delete ev_driver;
197
+ }
198
+ }
199
+
200
+ static void fd_node_destroy_locked(fd_node* fdn) {
201
+ GRPC_CARES_TRACE_LOG("request:%p delete fd: %s", fdn->ev_driver->request,
202
+ fdn->grpc_polled_fd->GetName());
203
+ GPR_ASSERT(!fdn->readable_registered);
204
+ GPR_ASSERT(!fdn->writable_registered);
205
+ GPR_ASSERT(fdn->already_shutdown);
206
+ delete fdn->grpc_polled_fd;
207
+ gpr_free(fdn);
208
+ }
209
+
210
+ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
211
+ if (!fdn->already_shutdown) {
212
+ fdn->already_shutdown = true;
213
+ fdn->grpc_polled_fd->ShutdownLocked(
214
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING(reason));
215
+ }
216
+ }
217
+
218
+ void grpc_ares_ev_driver_on_queries_complete_locked(
219
+ grpc_ares_ev_driver* ev_driver) {
220
+ // We mark the event driver as being shut down.
221
+ // grpc_ares_notify_on_event_locked will shut down any remaining
222
+ // fds.
223
+ ev_driver->shutting_down = true;
224
+ grpc_timer_cancel(&ev_driver->query_timeout);
225
+ grpc_timer_cancel(&ev_driver->ares_backup_poll_alarm);
226
+ grpc_ares_ev_driver_unref(ev_driver);
227
+ }
228
+
229
+ void grpc_ares_ev_driver_shutdown_locked(grpc_ares_ev_driver* ev_driver) {
230
+ ev_driver->shutting_down = true;
231
+ fd_node* fn = ev_driver->fds;
232
+ while (fn != nullptr) {
233
+ fd_node_shutdown_locked(fn, "grpc_ares_ev_driver_shutdown");
234
+ fn = fn->next;
235
+ }
236
+ }
237
+
238
+ // Search fd in the fd_node list head. This is an O(n) search, the max possible
239
+ // value of n is ARES_GETSOCK_MAXNUM (16). n is typically 1 - 2 in our tests.
240
+ static fd_node* pop_fd_node_locked(fd_node** head, ares_socket_t as) {
241
+ fd_node dummy_head;
242
+ dummy_head.next = *head;
243
+ fd_node* node = &dummy_head;
244
+ while (node->next != nullptr) {
245
+ if (node->next->grpc_polled_fd->GetWrappedAresSocketLocked() == as) {
246
+ fd_node* ret = node->next;
247
+ node->next = node->next->next;
248
+ *head = dummy_head.next;
249
+ return ret;
250
+ }
251
+ node = node->next;
252
+ }
253
+ return nullptr;
254
+ }
255
+
256
+ static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
257
+ grpc_ares_ev_driver* driver) {
258
+ // An alternative here could be to use ares_timeout to try to be more
259
+ // accurate, but that would require using "struct timeval"'s, which just makes
260
+ // things a bit more complicated. So just poll every second, as suggested
261
+ // by the c-ares code comments.
262
+ grpc_millis ms_until_next_ares_backup_poll_alarm = 1000;
263
+ GRPC_CARES_TRACE_LOG(
264
+ "request:%p ev_driver=%p. next ares process poll time in "
265
+ "%" PRId64 " ms",
266
+ driver->request, driver, ms_until_next_ares_backup_poll_alarm);
267
+ return ms_until_next_ares_backup_poll_alarm +
268
+ grpc_core::ExecCtx::Get()->Now();
269
+ }
270
+
271
+ static void on_timeout_locked(grpc_ares_ev_driver* driver, grpc_error* error) {
272
+ GRPC_CARES_TRACE_LOG(
273
+ "request:%p ev_driver=%p on_timeout_locked. driver->shutting_down=%d. "
274
+ "err=%s",
275
+ driver->request, driver, driver->shutting_down, grpc_error_string(error));
276
+ if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
277
+ grpc_ares_ev_driver_shutdown_locked(driver);
278
+ }
279
+ grpc_ares_ev_driver_unref(driver);
280
+ GRPC_ERROR_UNREF(error);
281
+ }
282
+
283
+ static void on_timeout(void* arg, grpc_error* error) {
284
+ grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
285
+ GRPC_ERROR_REF(error); // ref owned by lambda
286
+ driver->work_serializer->Run(
287
+ [driver, error]() { on_timeout_locked(driver, error); }, DEBUG_LOCATION);
288
+ }
289
+
290
+ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver);
291
+
292
+ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
293
+ grpc_error* error);
294
+
295
+ static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
296
+ grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
297
+ GRPC_ERROR_REF(error);
298
+ driver->work_serializer->Run(
299
+ [driver, error]() { on_ares_backup_poll_alarm_locked(driver, error); },
300
+ DEBUG_LOCATION);
301
+ }
302
+
303
+ /* In case of non-responsive DNS servers, dropped packets, etc., c-ares has
304
+ * intelligent timeout and retry logic, which we can take advantage of by
305
+ * polling ares_process_fd on time intervals. Overall, the c-ares library is
306
+ * meant to be called into and given a chance to proceed name resolution:
307
+ * a) when fd events happen
308
+ * b) when some time has passed without fd events having happened
309
+ * For the latter, we use this backup poller. Also see
310
+ * https://github.com/grpc/grpc/pull/17688 description for more details. */
311
+ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
312
+ grpc_error* error) {
313
+ GRPC_CARES_TRACE_LOG(
314
+ "request:%p ev_driver=%p on_ares_backup_poll_alarm_locked. "
315
+ "driver->shutting_down=%d. "
316
+ "err=%s",
317
+ driver->request, driver, driver->shutting_down, grpc_error_string(error));
318
+ if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
319
+ fd_node* fdn = driver->fds;
320
+ while (fdn != nullptr) {
321
+ if (!fdn->already_shutdown) {
322
+ GRPC_CARES_TRACE_LOG(
323
+ "request:%p ev_driver=%p on_ares_backup_poll_alarm_locked; "
324
+ "ares_process_fd. fd=%s",
325
+ driver->request, driver, fdn->grpc_polled_fd->GetName());
326
+ ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
327
+ ares_process_fd(driver->channel, as, as);
328
+ }
329
+ fdn = fdn->next;
330
+ }
331
+ if (!driver->shutting_down) {
332
+ grpc_millis next_ares_backup_poll_alarm =
333
+ calculate_next_ares_backup_poll_alarm_ms(driver);
334
+ grpc_ares_ev_driver_ref(driver);
335
+ GRPC_CLOSURE_INIT(&driver->on_ares_backup_poll_alarm_locked,
336
+ on_ares_backup_poll_alarm, driver,
337
+ grpc_schedule_on_exec_ctx);
338
+ grpc_timer_init(&driver->ares_backup_poll_alarm,
339
+ next_ares_backup_poll_alarm,
340
+ &driver->on_ares_backup_poll_alarm_locked);
341
+ }
342
+ grpc_ares_notify_on_event_locked(driver);
343
+ }
344
+ grpc_ares_ev_driver_unref(driver);
345
+ GRPC_ERROR_UNREF(error);
346
+ }
347
+
348
+ static void on_readable_locked(fd_node* fdn, grpc_error* error) {
349
+ GPR_ASSERT(fdn->readable_registered);
350
+ grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
351
+ const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
352
+ fdn->readable_registered = false;
353
+ GRPC_CARES_TRACE_LOG("request:%p readable on %s", fdn->ev_driver->request,
354
+ fdn->grpc_polled_fd->GetName());
355
+ if (error == GRPC_ERROR_NONE) {
356
+ do {
357
+ ares_process_fd(ev_driver->channel, as, ARES_SOCKET_BAD);
358
+ } while (fdn->grpc_polled_fd->IsFdStillReadableLocked());
359
+ } else {
360
+ // If error is not GRPC_ERROR_NONE, it means the fd has been shutdown or
361
+ // timed out. The pending lookups made on this ev_driver will be cancelled
362
+ // by the following ares_cancel() and the on_done callbacks will be invoked
363
+ // with a status of ARES_ECANCELLED. The remaining file descriptors in this
364
+ // ev_driver will be cleaned up in the follwing
365
+ // grpc_ares_notify_on_event_locked().
366
+ ares_cancel(ev_driver->channel);
367
+ }
368
+ grpc_ares_notify_on_event_locked(ev_driver);
369
+ grpc_ares_ev_driver_unref(ev_driver);
370
+ GRPC_ERROR_UNREF(error);
371
+ }
372
+
373
+ static void on_readable(void* arg, grpc_error* error) {
374
+ fd_node* fdn = static_cast<fd_node*>(arg);
375
+ GRPC_ERROR_REF(error); /* ref owned by lambda */
376
+ fdn->ev_driver->work_serializer->Run(
377
+ [fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
378
+ }
379
+
380
+ static void on_writable_locked(fd_node* fdn, grpc_error* error) {
381
+ GPR_ASSERT(fdn->writable_registered);
382
+ grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
383
+ const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
384
+ fdn->writable_registered = false;
385
+ GRPC_CARES_TRACE_LOG("request:%p writable on %s", ev_driver->request,
386
+ fdn->grpc_polled_fd->GetName());
387
+ if (error == GRPC_ERROR_NONE) {
388
+ ares_process_fd(ev_driver->channel, ARES_SOCKET_BAD, as);
389
+ } else {
390
+ // If error is not GRPC_ERROR_NONE, it means the fd has been shutdown or
391
+ // timed out. The pending lookups made on this ev_driver will be cancelled
392
+ // by the following ares_cancel() and the on_done callbacks will be invoked
393
+ // with a status of ARES_ECANCELLED. The remaining file descriptors in this
394
+ // ev_driver will be cleaned up in the follwing
395
+ // grpc_ares_notify_on_event_locked().
396
+ ares_cancel(ev_driver->channel);
397
+ }
398
+ grpc_ares_notify_on_event_locked(ev_driver);
399
+ grpc_ares_ev_driver_unref(ev_driver);
400
+ GRPC_ERROR_UNREF(error);
401
+ }
402
+
403
+ static void on_writable(void* arg, grpc_error* error) {
404
+ fd_node* fdn = static_cast<fd_node*>(arg);
405
+ GRPC_ERROR_REF(error); /* ref owned by lambda */
406
+ fdn->ev_driver->work_serializer->Run(
407
+ [fdn, error]() { on_writable_locked(fdn, error); }, DEBUG_LOCATION);
408
+ }
409
+
410
+ // Get the file descriptors used by the ev_driver's ares channel, register
411
+ // driver_closure with these filedescriptors.
412
+ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
413
+ fd_node* new_list = nullptr;
414
+ if (!ev_driver->shutting_down) {
415
+ ares_socket_t socks[ARES_GETSOCK_MAXNUM];
416
+ int socks_bitmask =
417
+ ares_getsock(ev_driver->channel, socks, ARES_GETSOCK_MAXNUM);
418
+ for (size_t i = 0; i < ARES_GETSOCK_MAXNUM; i++) {
419
+ if (ARES_GETSOCK_READABLE(socks_bitmask, i) ||
420
+ ARES_GETSOCK_WRITABLE(socks_bitmask, i)) {
421
+ fd_node* fdn = pop_fd_node_locked(&ev_driver->fds, socks[i]);
422
+ // Create a new fd_node if sock[i] is not in the fd_node list.
423
+ if (fdn == nullptr) {
424
+ fdn = static_cast<fd_node*>(gpr_malloc(sizeof(fd_node)));
425
+ fdn->grpc_polled_fd =
426
+ ev_driver->polled_fd_factory->NewGrpcPolledFdLocked(
427
+ socks[i], ev_driver->pollset_set, ev_driver->work_serializer);
428
+ GRPC_CARES_TRACE_LOG("request:%p new fd: %s", ev_driver->request,
429
+ fdn->grpc_polled_fd->GetName());
430
+ fdn->ev_driver = ev_driver;
431
+ fdn->readable_registered = false;
432
+ fdn->writable_registered = false;
433
+ fdn->already_shutdown = false;
434
+ }
435
+ fdn->next = new_list;
436
+ new_list = fdn;
437
+ // Register read_closure if the socket is readable and read_closure has
438
+ // not been registered with this socket.
439
+ if (ARES_GETSOCK_READABLE(socks_bitmask, i) &&
440
+ !fdn->readable_registered) {
441
+ grpc_ares_ev_driver_ref(ev_driver);
442
+ GRPC_CARES_TRACE_LOG("request:%p notify read on: %s",
443
+ ev_driver->request,
444
+ fdn->grpc_polled_fd->GetName());
445
+ GRPC_CLOSURE_INIT(&fdn->read_closure, on_readable, fdn,
446
+ grpc_schedule_on_exec_ctx);
447
+ fdn->grpc_polled_fd->RegisterForOnReadableLocked(&fdn->read_closure);
448
+ fdn->readable_registered = true;
449
+ }
450
+ // Register write_closure if the socket is writable and write_closure
451
+ // has not been registered with this socket.
452
+ if (ARES_GETSOCK_WRITABLE(socks_bitmask, i) &&
453
+ !fdn->writable_registered) {
454
+ GRPC_CARES_TRACE_LOG("request:%p notify write on: %s",
455
+ ev_driver->request,
456
+ fdn->grpc_polled_fd->GetName());
457
+ grpc_ares_ev_driver_ref(ev_driver);
458
+ GRPC_CLOSURE_INIT(&fdn->write_closure, on_writable, fdn,
459
+ grpc_schedule_on_exec_ctx);
460
+ GRPC_CLOSURE_INIT(&fdn->write_closure, on_writable, fdn,
461
+ grpc_schedule_on_exec_ctx);
462
+ fdn->grpc_polled_fd->RegisterForOnWriteableLocked(
463
+ &fdn->write_closure);
464
+ fdn->writable_registered = true;
465
+ }
466
+ }
467
+ }
468
+ }
469
+ // Any remaining fds in ev_driver->fds were not returned by ares_getsock() and
470
+ // are therefore no longer in use, so they can be shut down and removed from
471
+ // the list.
472
+ while (ev_driver->fds != nullptr) {
473
+ fd_node* cur = ev_driver->fds;
474
+ ev_driver->fds = ev_driver->fds->next;
475
+ fd_node_shutdown_locked(cur, "c-ares fd shutdown");
476
+ if (!cur->readable_registered && !cur->writable_registered) {
477
+ fd_node_destroy_locked(cur);
478
+ } else {
479
+ cur->next = new_list;
480
+ new_list = cur;
481
+ }
482
+ }
483
+ ev_driver->fds = new_list;
484
+ }
485
+
486
+ void grpc_ares_ev_driver_start_locked(grpc_ares_ev_driver* ev_driver) {
487
+ grpc_ares_notify_on_event_locked(ev_driver);
488
+ // Initialize overall DNS resolution timeout alarm
489
+ grpc_millis timeout =
490
+ ev_driver->query_timeout_ms == 0
491
+ ? GRPC_MILLIS_INF_FUTURE
492
+ : ev_driver->query_timeout_ms + grpc_core::ExecCtx::Get()->Now();
493
+ GRPC_CARES_TRACE_LOG(
494
+ "request:%p ev_driver=%p grpc_ares_ev_driver_start_locked. timeout in "
495
+ "%" PRId64 " ms",
496
+ ev_driver->request, ev_driver, timeout);
497
+ grpc_ares_ev_driver_ref(ev_driver);
498
+ GRPC_CLOSURE_INIT(&ev_driver->on_timeout_locked, on_timeout, ev_driver,
499
+ grpc_schedule_on_exec_ctx);
500
+ grpc_timer_init(&ev_driver->query_timeout, timeout,
501
+ &ev_driver->on_timeout_locked);
502
+ // Initialize the backup poll alarm
503
+ grpc_millis next_ares_backup_poll_alarm =
504
+ calculate_next_ares_backup_poll_alarm_ms(ev_driver);
505
+ grpc_ares_ev_driver_ref(ev_driver);
506
+ GRPC_CLOSURE_INIT(&ev_driver->on_ares_backup_poll_alarm_locked,
507
+ on_ares_backup_poll_alarm, ev_driver,
508
+ grpc_schedule_on_exec_ctx);
509
+ grpc_timer_init(&ev_driver->ares_backup_poll_alarm,
510
+ next_ares_backup_poll_alarm,
511
+ &ev_driver->on_ares_backup_poll_alarm_locked);
512
+ }
513
+
514
+ static void noop_inject_channel_config(ares_channel /*channel*/) {}
515
+
516
+ void (*grpc_ares_test_only_inject_config)(ares_channel channel) =
517
+ noop_inject_channel_config;
518
+
519
+ grpc_error* grpc_ares_ev_driver_create_locked(
520
+ grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
521
+ int query_timeout_ms,
522
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
523
+ grpc_ares_request* request) {
524
+ *ev_driver = new grpc_ares_ev_driver();
525
+ ares_options opts;
526
+ memset(&opts, 0, sizeof(opts));
527
+ opts.flags |= ARES_FLAG_STAYOPEN;
528
+ int status = ares_init_options(&(*ev_driver)->channel, &opts, ARES_OPT_FLAGS);
529
+ grpc_ares_test_only_inject_config((*ev_driver)->channel);
530
+ GRPC_CARES_TRACE_LOG("request:%p grpc_ares_ev_driver_create_locked", request);
531
+ if (status != ARES_SUCCESS) {
532
+ grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
533
+ absl::StrCat("Failed to init ares channel. C-ares error: ",
534
+ ares_strerror(status))
535
+ .c_str());
536
+ gpr_free(*ev_driver);
537
+ return err;
538
+ }
539
+ (*ev_driver)->work_serializer = std::move(work_serializer);
540
+ gpr_ref_init(&(*ev_driver)->refs, 1);
541
+ (*ev_driver)->pollset_set = pollset_set;
542
+ (*ev_driver)->fds = nullptr;
543
+ (*ev_driver)->shutting_down = false;
544
+ (*ev_driver)->request = request;
545
+ (*ev_driver)->polled_fd_factory =
546
+ grpc_core::NewGrpcPolledFdFactory((*ev_driver)->work_serializer);
547
+ (*ev_driver)
548
+ ->polled_fd_factory->ConfigureAresChannelLocked((*ev_driver)->channel);
549
+ (*ev_driver)->query_timeout_ms = query_timeout_ms;
550
+ return GRPC_ERROR_NONE;
551
+ }
552
+
124
553
  static void log_address_sorting_list(const grpc_ares_request* r,
125
554
  const ServerAddressList& addresses,
126
555
  const char* input_output_str) {
@@ -139,8 +568,8 @@ void grpc_cares_wrapper_address_sorting_sort(const grpc_ares_request* r,
139
568
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_cares_address_sorting)) {
140
569
  log_address_sorting_list(r, *addresses, "input");
141
570
  }
142
- address_sorting_sortable* sortables = (address_sorting_sortable*)gpr_zalloc(
143
- sizeof(address_sorting_sortable) * addresses->size());
571
+ address_sorting_sortable* sortables = static_cast<address_sorting_sortable*>(
572
+ gpr_zalloc(sizeof(address_sorting_sortable) * addresses->size()));
144
573
  for (size_t i = 0; i < addresses->size(); ++i) {
145
574
  sortables[i].user_data = &(*addresses)[i];
146
575
  memcpy(&sortables[i].dest_addr.addr, &(*addresses)[i].address().addr,
@@ -303,22 +732,20 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
303
732
  GRPC_CARES_TRACE_LOG("request:%p ares_parse_srv_reply: %d", r,
304
733
  parse_status);
305
734
  if (parse_status == ARES_SUCCESS) {
306
- ares_channel* channel =
307
- grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
308
735
  for (struct ares_srv_reply* srv_it = reply; srv_it != nullptr;
309
736
  srv_it = srv_it->next) {
310
737
  if (grpc_ares_query_ipv6()) {
311
738
  grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
312
739
  r, srv_it->host, htons(srv_it->port), true /* is_balancer */,
313
740
  "AAAA");
314
- ares_gethostbyname(*channel, hr->host, AF_INET6,
741
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET6,
315
742
  on_hostbyname_done_locked, hr);
316
743
  }
317
744
  grpc_ares_hostbyname_request* hr = create_hostbyname_request_locked(
318
745
  r, srv_it->host, htons(srv_it->port), true /* is_balancer */, "A");
319
- ares_gethostbyname(*channel, hr->host, AF_INET,
746
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET,
320
747
  on_hostbyname_done_locked, hr);
321
- grpc_ares_ev_driver_start_locked(r->ev_driver);
748
+ grpc_ares_notify_on_event_locked(r->ev_driver);
322
749
  }
323
750
  }
324
751
  if (reply != nullptr) {
@@ -400,7 +827,6 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
400
827
  std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
401
828
  grpc_error* error = GRPC_ERROR_NONE;
402
829
  grpc_ares_hostbyname_request* hr = nullptr;
403
- ares_channel* channel = nullptr;
404
830
  /* parse name, splitting it into host and port parts */
405
831
  std::string host;
406
832
  std::string port;
@@ -423,9 +849,8 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
423
849
  query_timeout_ms,
424
850
  std::move(work_serializer), r);
425
851
  if (error != GRPC_ERROR_NONE) goto error_cleanup;
426
- channel = grpc_ares_ev_driver_get_channel_locked(r->ev_driver);
427
852
  // If dns_server is specified, use it.
428
- if (dns_server != nullptr) {
853
+ if (dns_server != nullptr && dns_server[0] != '\0') {
429
854
  GRPC_CARES_TRACE_LOG("request:%p Using DNS server %s", r, dns_server);
430
855
  grpc_resolved_address addr;
431
856
  if (grpc_parse_ipv4_hostport(dns_server, &addr, false /* log_errors */)) {
@@ -450,7 +875,8 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
450
875
  GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name));
451
876
  goto error_cleanup;
452
877
  }
453
- int status = ares_set_servers_ports(*channel, &r->dns_server_addr);
878
+ int status =
879
+ ares_set_servers_ports(r->ev_driver->channel, &r->dns_server_addr);
454
880
  if (status != ARES_SUCCESS) {
455
881
  error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
456
882
  absl::StrCat("C-ares status is not ARES_SUCCESS: ",
@@ -464,25 +890,25 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
464
890
  hr = create_hostbyname_request_locked(r, host.c_str(),
465
891
  grpc_strhtons(port.c_str()),
466
892
  /*is_balancer=*/false, "AAAA");
467
- ares_gethostbyname(*channel, hr->host, AF_INET6, on_hostbyname_done_locked,
468
- hr);
893
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET6,
894
+ on_hostbyname_done_locked, hr);
469
895
  }
470
896
  hr = create_hostbyname_request_locked(r, host.c_str(),
471
897
  grpc_strhtons(port.c_str()),
472
898
  /*is_balancer=*/false, "A");
473
- ares_gethostbyname(*channel, hr->host, AF_INET, on_hostbyname_done_locked,
474
- hr);
899
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET,
900
+ on_hostbyname_done_locked, hr);
475
901
  if (r->balancer_addresses_out != nullptr) {
476
902
  /* Query the SRV record */
477
903
  std::string service_name = absl::StrCat("_grpclb._tcp.", host);
478
904
  GrpcAresQuery* srv_query = new GrpcAresQuery(r, service_name);
479
- ares_query(*channel, service_name.c_str(), ns_c_in, ns_t_srv,
905
+ ares_query(r->ev_driver->channel, service_name.c_str(), ns_c_in, ns_t_srv,
480
906
  on_srv_query_done_locked, srv_query);
481
907
  }
482
908
  if (r->service_config_json_out != nullptr) {
483
909
  std::string config_name = absl::StrCat("_grpc_config.", host);
484
910
  GrpcAresQuery* txt_query = new GrpcAresQuery(r, config_name);
485
- ares_search(*channel, config_name.c_str(), ns_c_in, ns_t_txt,
911
+ ares_search(r->ev_driver->channel, config_name.c_str(), ns_c_in, ns_t_txt,
486
912
  on_txt_done_locked, txt_query);
487
913
  }
488
914
  grpc_ares_ev_driver_start_locked(r->ev_driver);