grpc 1.48.0 → 1.49.1

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 (715) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +125 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -131
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +63 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -17
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  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 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +101 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +42 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +44 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/version.rb +1 -1
  659. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  660. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  662. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  663. data/third_party/upb/upb/arena.c +277 -0
  664. data/third_party/upb/upb/arena.h +225 -0
  665. data/third_party/upb/upb/array.c +114 -0
  666. data/third_party/upb/upb/array.h +83 -0
  667. data/third_party/upb/upb/collections.h +36 -0
  668. data/third_party/upb/upb/decode.c +161 -65
  669. data/third_party/upb/upb/decode.h +1 -0
  670. data/third_party/upb/upb/decode_fast.c +1 -1
  671. data/third_party/upb/upb/def.c +10 -2
  672. data/third_party/upb/upb/def.h +8 -1
  673. data/third_party/upb/upb/def.hpp +7 -4
  674. data/third_party/upb/upb/encode.c +29 -20
  675. data/third_party/upb/upb/encode.h +16 -6
  676. data/third_party/upb/upb/extension_registry.c +93 -0
  677. data/third_party/upb/upb/extension_registry.h +84 -0
  678. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  679. data/third_party/upb/upb/internal/table.h +385 -0
  680. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  681. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  682. data/third_party/upb/upb/json_decode.c +1512 -0
  683. data/third_party/upb/upb/json_decode.h +47 -0
  684. data/third_party/upb/upb/json_encode.c +7 -3
  685. data/third_party/upb/upb/json_encode.h +6 -3
  686. data/third_party/upb/upb/map.c +108 -0
  687. data/third_party/upb/upb/map.h +117 -0
  688. data/third_party/upb/upb/message_value.h +66 -0
  689. data/third_party/upb/upb/mini_table.c +1147 -0
  690. data/third_party/upb/upb/mini_table.h +189 -0
  691. data/third_party/upb/upb/mini_table.hpp +112 -0
  692. data/third_party/upb/upb/msg.c +2 -62
  693. data/third_party/upb/upb/msg.h +2 -45
  694. data/third_party/upb/upb/msg_internal.h +28 -22
  695. data/third_party/upb/upb/port_def.inc +2 -1
  696. data/third_party/upb/upb/port_undef.inc +1 -0
  697. data/third_party/upb/upb/reflection.c +2 -159
  698. data/third_party/upb/upb/reflection.h +2 -112
  699. data/third_party/upb/upb/status.c +86 -0
  700. data/third_party/upb/upb/status.h +66 -0
  701. data/third_party/upb/upb/table.c +2 -2
  702. data/third_party/upb/upb/table_internal.h +3 -352
  703. data/third_party/upb/upb/text_encode.c +3 -2
  704. data/third_party/upb/upb/upb.c +4 -290
  705. data/third_party/upb/upb/upb.h +7 -196
  706. metadata +88 -36
  707. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  708. data/src/core/lib/iomgr/error_internal.h +0 -66
  709. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  710. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  711. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  712. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  713. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  714. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  715. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -24,7 +24,6 @@
24
24
  #include <map>
25
25
  #include <memory>
26
26
  #include <string>
27
- #include <type_traits>
28
27
  #include <utility>
29
28
  #include <vector>
30
29
 
@@ -34,6 +33,7 @@
34
33
  #include "absl/status/statusor.h"
35
34
  #include "absl/strings/string_view.h"
36
35
  #include "absl/strings/strip.h"
36
+ #include "absl/types/optional.h"
37
37
 
38
38
  #include <grpc/event_engine/event_engine.h>
39
39
  #include <grpc/impl/codegen/grpc_types.h>
@@ -61,14 +61,12 @@
61
61
 
62
62
  #if GRPC_ARES == 1
63
63
 
64
- #include <limits.h>
65
64
  #include <stdio.h>
66
65
  #include <string.h>
67
66
 
68
67
  #include <address_sorting/address_sorting.h>
69
68
 
70
69
  #include "absl/container/flat_hash_set.h"
71
- #include "absl/container/inlined_vector.h"
72
70
  #include "absl/strings/str_cat.h"
73
71
 
74
72
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
@@ -99,7 +97,7 @@ namespace {
99
97
  class AresClientChannelDNSResolver : public PollingResolver {
100
98
  public:
101
99
  AresClientChannelDNSResolver(ResolverArgs args,
102
- const grpc_channel_args* channel_args);
100
+ const ChannelArgs& channel_args);
103
101
 
104
102
  OrphanablePtr<Orphanable> StartRequest() override;
105
103
 
@@ -109,17 +107,43 @@ class AresClientChannelDNSResolver : public PollingResolver {
109
107
  explicit AresRequestWrapper(
110
108
  RefCountedPtr<AresClientChannelDNSResolver> resolver)
111
109
  : resolver_(std::move(resolver)) {
112
- Ref(DEBUG_LOCATION, "OnResolved").release();
113
- GRPC_CLOSURE_INIT(&on_resolved_, OnResolved, this, nullptr);
114
- request_.reset(grpc_dns_lookup_ares(
110
+ // TODO(hork): replace this callback bookkeeping with promises.
111
+ // Locking to prevent completion before all records are queried
112
+ MutexLock lock(&on_resolved_mu_);
113
+ Ref(DEBUG_LOCATION, "OnHostnameResolved").release();
114
+ GRPC_CLOSURE_INIT(&on_hostname_resolved_, OnHostnameResolved, this,
115
+ nullptr);
116
+ hostname_request_.reset(grpc_dns_lookup_hostname_ares(
115
117
  resolver_->authority().c_str(), resolver_->name_to_resolve().c_str(),
116
- kDefaultSecurePort, resolver_->interested_parties(), &on_resolved_,
117
- &addresses_,
118
- resolver_->enable_srv_queries_ ? &balancer_addresses_ : nullptr,
119
- resolver_->request_service_config_ ? &service_config_json_ : nullptr,
120
- resolver_->query_timeout_ms_));
121
- GRPC_CARES_TRACE_LOG("resolver:%p Started resolving. request_:%p",
122
- resolver_.get(), request_.get());
118
+ kDefaultSecurePort, resolver_->interested_parties(),
119
+ &on_hostname_resolved_, &addresses_, resolver_->query_timeout_ms_));
120
+ GRPC_CARES_TRACE_LOG(
121
+ "resolver:%p Started resolving hostnames. hostname_request_:%p",
122
+ resolver_.get(), hostname_request_.get());
123
+ if (resolver_->enable_srv_queries_) {
124
+ Ref(DEBUG_LOCATION, "OnSRVResolved").release();
125
+ GRPC_CLOSURE_INIT(&on_srv_resolved_, OnSRVResolved, this, nullptr);
126
+ srv_request_.reset(grpc_dns_lookup_srv_ares(
127
+ resolver_->authority().c_str(),
128
+ resolver_->name_to_resolve().c_str(),
129
+ resolver_->interested_parties(), &on_srv_resolved_,
130
+ &balancer_addresses_, resolver_->query_timeout_ms_));
131
+ GRPC_CARES_TRACE_LOG(
132
+ "resolver:%p Started resolving SRV records. srv_request_:%p",
133
+ resolver_.get(), srv_request_.get());
134
+ }
135
+ if (resolver_->request_service_config_) {
136
+ Ref(DEBUG_LOCATION, "OnTXTResolved").release();
137
+ GRPC_CLOSURE_INIT(&on_txt_resolved_, OnTXTResolved, this, nullptr);
138
+ txt_request_.reset(grpc_dns_lookup_txt_ares(
139
+ resolver_->authority().c_str(),
140
+ resolver_->name_to_resolve().c_str(),
141
+ resolver_->interested_parties(), &on_txt_resolved_,
142
+ &service_config_json_, resolver_->query_timeout_ms_));
143
+ GRPC_CARES_TRACE_LOG(
144
+ "resolver:%p Started resolving TXT records. txt_request_:%p",
145
+ resolver_.get(), srv_request_.get());
146
+ }
123
147
  }
124
148
 
125
149
  ~AresRequestWrapper() override {
@@ -127,22 +151,49 @@ class AresClientChannelDNSResolver : public PollingResolver {
127
151
  resolver_.reset(DEBUG_LOCATION, "dns-resolving");
128
152
  }
129
153
 
130
- void Orphan() override {
131
- grpc_cancel_ares_request(request_.get());
154
+ // Note that thread safety cannot be analyzed due to this being invoked from
155
+ // OrphanablePtr<>, and there's no way to pass the lock annotation through
156
+ // there.
157
+ void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS {
158
+ {
159
+ MutexLock lock(&on_resolved_mu_);
160
+ if (hostname_request_ != nullptr) {
161
+ grpc_cancel_ares_request(hostname_request_.get());
162
+ }
163
+ if (srv_request_ != nullptr) {
164
+ grpc_cancel_ares_request(srv_request_.get());
165
+ }
166
+ if (txt_request_ != nullptr) {
167
+ grpc_cancel_ares_request(txt_request_.get());
168
+ }
169
+ }
132
170
  Unref(DEBUG_LOCATION, "Orphan");
133
171
  }
134
172
 
135
173
  private:
136
- static void OnResolved(void* arg, grpc_error_handle error);
137
- void OnResolved(grpc_error_handle error);
174
+ static void OnHostnameResolved(void* arg, grpc_error_handle error);
175
+ static void OnSRVResolved(void* arg, grpc_error_handle error);
176
+ static void OnTXTResolved(void* arg, grpc_error_handle error);
177
+ absl::optional<Result> OnResolvedLocked(grpc_error_handle error)
178
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(on_resolved_mu_);
138
179
 
180
+ Mutex on_resolved_mu_;
139
181
  RefCountedPtr<AresClientChannelDNSResolver> resolver_;
140
- std::unique_ptr<grpc_ares_request> request_;
141
- grpc_closure on_resolved_;
182
+ grpc_closure on_hostname_resolved_;
183
+ std::unique_ptr<grpc_ares_request> hostname_request_
184
+ ABSL_GUARDED_BY(on_resolved_mu_);
185
+ grpc_closure on_srv_resolved_;
186
+ std::unique_ptr<grpc_ares_request> srv_request_
187
+ ABSL_GUARDED_BY(on_resolved_mu_);
188
+ grpc_closure on_txt_resolved_;
189
+ std::unique_ptr<grpc_ares_request> txt_request_
190
+ ABSL_GUARDED_BY(on_resolved_mu_);
142
191
  // Output fields from ares request.
143
- std::unique_ptr<ServerAddressList> addresses_;
144
- std::unique_ptr<ServerAddressList> balancer_addresses_;
145
- char* service_config_json_ = nullptr;
192
+ std::unique_ptr<ServerAddressList> addresses_
193
+ ABSL_GUARDED_BY(on_resolved_mu_);
194
+ std::unique_ptr<ServerAddressList> balancer_addresses_
195
+ ABSL_GUARDED_BY(on_resolved_mu_);
196
+ char* service_config_json_ ABSL_GUARDED_BY(on_resolved_mu_) = nullptr;
146
197
  };
147
198
 
148
199
  ~AresClientChannelDNSResolver() override;
@@ -156,12 +207,14 @@ class AresClientChannelDNSResolver : public PollingResolver {
156
207
  };
157
208
 
158
209
  AresClientChannelDNSResolver::AresClientChannelDNSResolver(
159
- ResolverArgs args, const grpc_channel_args* channel_args)
210
+ ResolverArgs args, const ChannelArgs& channel_args)
160
211
  : PollingResolver(
161
212
  std::move(args), channel_args,
162
- Duration::Milliseconds(grpc_channel_args_find_integer(
163
- channel_args, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
164
- {1000 * 30, 0, INT_MAX})),
213
+ std::max(Duration::Zero(),
214
+ channel_args
215
+ .GetDurationFromIntMillis(
216
+ GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS)
217
+ .value_or(Duration::Seconds(30))),
165
218
  BackOff::Options()
166
219
  .set_initial_backoff(Duration::Milliseconds(
167
220
  GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS * 1000))
@@ -170,13 +223,14 @@ AresClientChannelDNSResolver::AresClientChannelDNSResolver(
170
223
  .set_max_backoff(Duration::Milliseconds(
171
224
  GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000)),
172
225
  &grpc_trace_cares_resolver),
173
- request_service_config_(!grpc_channel_args_find_bool(
174
- channel_args, GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION, true)),
175
- enable_srv_queries_(grpc_channel_args_find_bool(
176
- channel_args, GRPC_ARG_DNS_ENABLE_SRV_QUERIES, false)),
177
- query_timeout_ms_(grpc_channel_args_find_integer(
178
- channel_args, GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS,
179
- {GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS, 0, INT_MAX})) {}
226
+ request_service_config_(
227
+ !channel_args.GetBool(GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION)
228
+ .value_or(true)),
229
+ enable_srv_queries_(channel_args.GetBool(GRPC_ARG_DNS_ENABLE_SRV_QUERIES)
230
+ .value_or(false)),
231
+ query_timeout_ms_(
232
+ std::max(0, channel_args.GetInt(GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS)
233
+ .value_or(GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS))) {}
180
234
 
181
235
  AresClientChannelDNSResolver::~AresClientChannelDNSResolver() {
182
236
  GRPC_CARES_TRACE_LOG("resolver:%p destroying AresClientChannelDNSResolver",
@@ -199,16 +253,19 @@ bool ValueInJsonArray(const Json::Array& array, const char* value) {
199
253
 
200
254
  std::string ChooseServiceConfig(char* service_config_choice_json,
201
255
  grpc_error_handle* error) {
202
- Json json = Json::Parse(service_config_choice_json, error);
203
- if (!GRPC_ERROR_IS_NONE(*error)) return "";
204
- if (json.type() != Json::Type::ARRAY) {
256
+ auto json = Json::Parse(service_config_choice_json);
257
+ if (!json.ok()) {
258
+ *error = absl_status_to_grpc_error(json.status());
259
+ return "";
260
+ }
261
+ if (json->type() != Json::Type::ARRAY) {
205
262
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
206
263
  "Service Config Choices, error: should be of type array");
207
264
  return "";
208
265
  }
209
266
  const Json* service_config = nullptr;
210
267
  std::vector<grpc_error_handle> error_list;
211
- for (const Json& choice : json.array_value()) {
268
+ for (const Json& choice : json->array_value()) {
212
269
  if (choice.type() != Json::Type::OBJECT) {
213
270
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
214
271
  "Service Config Choice, error: should be of type object"));
@@ -276,17 +333,71 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
276
333
  return service_config->Dump();
277
334
  }
278
335
 
279
- void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
336
+ void AresClientChannelDNSResolver::AresRequestWrapper::OnHostnameResolved(
337
+ void* arg, grpc_error_handle error) {
338
+ auto* self = static_cast<AresRequestWrapper*>(arg);
339
+ absl::optional<Result> result;
340
+ {
341
+ MutexLock lock(&self->on_resolved_mu_);
342
+ self->hostname_request_.reset();
343
+ result = self->OnResolvedLocked(error);
344
+ }
345
+ if (result.has_value()) {
346
+ self->resolver_->OnRequestComplete(std::move(*result));
347
+ }
348
+ self->Unref(DEBUG_LOCATION, "OnHostnameResolved");
349
+ }
350
+
351
+ void AresClientChannelDNSResolver::AresRequestWrapper::OnSRVResolved(
352
+ void* arg, grpc_error_handle error) {
353
+ auto* self = static_cast<AresRequestWrapper*>(arg);
354
+ absl::optional<Result> result;
355
+ {
356
+ MutexLock lock(&self->on_resolved_mu_);
357
+ self->srv_request_.reset();
358
+ result = self->OnResolvedLocked(error);
359
+ }
360
+ if (result.has_value()) {
361
+ self->resolver_->OnRequestComplete(std::move(*result));
362
+ }
363
+ self->Unref(DEBUG_LOCATION, "OnSRVResolved");
364
+ }
365
+
366
+ void AresClientChannelDNSResolver::AresRequestWrapper::OnTXTResolved(
280
367
  void* arg, grpc_error_handle error) {
281
368
  auto* self = static_cast<AresRequestWrapper*>(arg);
282
- self->OnResolved(error);
369
+ absl::optional<Result> result;
370
+ {
371
+ MutexLock lock(&self->on_resolved_mu_);
372
+ self->txt_request_.reset();
373
+ result = self->OnResolvedLocked(error);
374
+ }
375
+ if (result.has_value()) {
376
+ self->resolver_->OnRequestComplete(std::move(*result));
377
+ }
378
+ self->Unref(DEBUG_LOCATION, "OnTXTResolved");
283
379
  }
284
380
 
285
- void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
286
- grpc_error_handle error) {
287
- GRPC_CARES_TRACE_LOG("resolver:%p OnResolved()", this);
381
+ // Returns a Result if resolution is complete.
382
+ // callers must release the lock and call OnRequestComplete if a Result is
383
+ // returned. This is because OnRequestComplete may Orphan the resolver, which
384
+ // requires taking the lock.
385
+ absl::optional<AresClientChannelDNSResolver::Result>
386
+ AresClientChannelDNSResolver::AresRequestWrapper::OnResolvedLocked(
387
+ grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(on_resolved_mu_) {
388
+ if (hostname_request_ != nullptr || srv_request_ != nullptr ||
389
+ txt_request_ != nullptr) {
390
+ GRPC_CARES_TRACE_LOG(
391
+ "resolver:%p OnResolved() waiting for results (hostname: %s, srv: %s, "
392
+ "txt: %s)",
393
+ this, hostname_request_ != nullptr ? "waiting" : "done",
394
+ srv_request_ != nullptr ? "waiting" : "done",
395
+ txt_request_ != nullptr ? "waiting" : "done");
396
+ return absl::nullopt;
397
+ }
398
+ GRPC_CARES_TRACE_LOG("resolver:%p OnResolved() proceeding", this);
288
399
  Result result;
289
- absl::InlinedVector<grpc_arg, 1> new_args;
400
+ result.args = resolver_->channel_args();
290
401
  // TODO(roth): Change logic to be able to report failures for addresses
291
402
  // and service config independently of each other.
292
403
  if (addresses_ != nullptr || balancer_addresses_ != nullptr) {
@@ -299,27 +410,26 @@ void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
299
410
  grpc_error_handle service_config_error = GRPC_ERROR_NONE;
300
411
  std::string service_config_string =
301
412
  ChooseServiceConfig(service_config_json_, &service_config_error);
302
- RefCountedPtr<ServiceConfig> service_config;
303
- if (GRPC_ERROR_IS_NONE(service_config_error) &&
304
- !service_config_string.empty()) {
305
- GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
306
- this, service_config_string.c_str());
307
- service_config = ServiceConfigImpl::Create(resolver_->channel_args(),
308
- service_config_string,
309
- &service_config_error);
310
- }
311
413
  if (!GRPC_ERROR_IS_NONE(service_config_error)) {
312
414
  result.service_config = absl::UnavailableError(
313
415
  absl::StrCat("failed to parse service config: ",
314
416
  grpc_error_std_string(service_config_error)));
315
417
  GRPC_ERROR_UNREF(service_config_error);
316
- } else {
317
- result.service_config = std::move(service_config);
418
+ } else if (!service_config_string.empty()) {
419
+ GRPC_CARES_TRACE_LOG("resolver:%p selected service config choice: %s",
420
+ this, service_config_string.c_str());
421
+ result.service_config = ServiceConfigImpl::Create(
422
+ resolver_->channel_args(), service_config_string);
423
+ if (!result.service_config.ok()) {
424
+ result.service_config = absl::UnavailableError(
425
+ absl::StrCat("failed to parse service config: ",
426
+ result.service_config.status().message()));
427
+ }
318
428
  }
319
429
  }
320
430
  if (balancer_addresses_ != nullptr) {
321
- new_args.push_back(
322
- CreateGrpclbBalancerAddressesArg(balancer_addresses_.get()));
431
+ result.args = SetGrpcLbBalancerAddresses(
432
+ result.args, ServerAddressList(*balancer_addresses_));
323
433
  }
324
434
  } else {
325
435
  GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
@@ -332,10 +442,8 @@ void AresClientChannelDNSResolver::AresRequestWrapper::OnResolved(
332
442
  result.addresses = status;
333
443
  result.service_config = status;
334
444
  }
335
- result.args = grpc_channel_args_copy_and_add(
336
- resolver_->channel_args(), new_args.data(), new_args.size());
337
- resolver_->OnRequestComplete(std::move(result));
338
- Unref(DEBUG_LOCATION, "OnResolved");
445
+
446
+ return std::move(result);
339
447
  }
340
448
 
341
449
  //
@@ -355,7 +463,7 @@ class AresClientChannelDNSResolverFactory : public ResolverFactory {
355
463
  }
356
464
 
357
465
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
358
- const grpc_channel_args* channel_args = args.args;
466
+ ChannelArgs channel_args = args.args;
359
467
  return MakeOrphanable<AresClientChannelDNSResolver>(std::move(args),
360
468
  channel_args);
361
469
  }
@@ -363,51 +471,45 @@ class AresClientChannelDNSResolverFactory : public ResolverFactory {
363
471
 
364
472
  class AresDNSResolver : public DNSResolver {
365
473
  public:
474
+ // Abstract class that centralizes common request handling logic via the
475
+ // template method pattern.
476
+ // This requires a two-phase initialization, where 1) a request is created via
477
+ // a subclass constructor, and 2) the request is initiated via Run()
366
478
  class AresRequest {
367
479
  public:
368
- AresRequest(
369
- absl::string_view name, absl::string_view default_port,
370
- grpc_pollset_set* interested_parties,
371
- std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
372
- on_resolve_address_done,
373
- AresDNSResolver* resolver, intptr_t aba_token)
374
- : name_(std::string(name)),
375
- default_port_(std::string(default_port)),
376
- interested_parties_(interested_parties),
377
- pollset_set_(grpc_pollset_set_create()),
378
- on_resolve_address_done_(std::move(on_resolve_address_done)),
379
- completed_(false),
380
- resolver_(resolver),
381
- aba_token_(aba_token) {
382
- GRPC_CARES_TRACE_LOG("AresRequest:%p ctor", this);
383
- GRPC_CLOSURE_INIT(&on_dns_lookup_done_, OnDnsLookupDone, this,
384
- grpc_schedule_on_exec_ctx);
385
- MutexLock lock(&mu_);
386
- grpc_pollset_set_add_pollset_set(pollset_set_, interested_parties);
387
- ares_request_ = std::unique_ptr<grpc_ares_request>(grpc_dns_lookup_ares(
388
- /*dns_server=*/"", name_.c_str(), default_port_.c_str(), pollset_set_,
389
- &on_dns_lookup_done_, &addresses_,
390
- /*balancer_addresses=*/nullptr, /*service_config_json=*/nullptr,
391
- GRPC_DNS_ARES_DEFAULT_QUERY_TIMEOUT_MS));
392
- GRPC_CARES_TRACE_LOG("AresRequest:%p Start ares_request_:%p", this,
393
- ares_request_.get());
394
- }
395
-
396
- ~AresRequest() {
480
+ virtual ~AresRequest() {
397
481
  GRPC_CARES_TRACE_LOG("AresRequest:%p dtor ares_request_:%p", this,
398
- ares_request_.get());
482
+ grpc_ares_request_.get());
399
483
  resolver_->UnregisterRequest(task_handle());
400
484
  grpc_pollset_set_destroy(pollset_set_);
401
485
  }
402
486
 
487
+ // Initiates the low-level c-ares request and returns its handle.
488
+ virtual std::unique_ptr<grpc_ares_request> MakeRequestLocked() = 0;
489
+ // Called on ares resolution, but not upon cancellation.
490
+ // After execution, the AresRequest will perform any final cleanup and
491
+ // delete itself.
492
+ virtual void OnComplete(grpc_error_handle error) = 0;
493
+
494
+ // Called to initiate the request.
495
+ void Run() {
496
+ MutexLock lock(&mu_);
497
+ grpc_ares_request_ = MakeRequestLocked();
498
+ }
499
+
403
500
  bool Cancel() {
404
501
  MutexLock lock(&mu_);
405
- GRPC_CARES_TRACE_LOG("AresRequest:%p Cancel ares_request_:%p", this,
406
- ares_request_.get());
407
- if (completed_) return false;
408
- // OnDnsLookupDone will still be run
409
- grpc_cancel_ares_request(ares_request_.get());
410
- completed_ = true;
502
+ if (grpc_ares_request_ != nullptr) {
503
+ GRPC_CARES_TRACE_LOG("AresRequest:%p Cancel ares_request_:%p", this,
504
+ grpc_ares_request_.get());
505
+ if (completed_) return false;
506
+ // OnDnsLookupDone will still be run
507
+ completed_ = true;
508
+ grpc_cancel_ares_request(grpc_ares_request_.get());
509
+ } else {
510
+ completed_ = true;
511
+ OnDnsLookupDone(this, GRPC_ERROR_CANCELLED);
512
+ }
411
513
  grpc_pollset_set_del_pollset_set(pollset_set_, interested_parties_);
412
514
  return true;
413
515
  }
@@ -416,65 +518,215 @@ class AresDNSResolver : public DNSResolver {
416
518
  return {reinterpret_cast<intptr_t>(this), aba_token_};
417
519
  }
418
520
 
521
+ protected:
522
+ AresRequest(absl::string_view name, absl::string_view name_server,
523
+ Duration timeout, grpc_pollset_set* interested_parties,
524
+ AresDNSResolver* resolver, intptr_t aba_token)
525
+ : name_(name),
526
+ name_server_(name_server),
527
+ timeout_(timeout),
528
+ interested_parties_(interested_parties),
529
+ completed_(false),
530
+ resolver_(resolver),
531
+ aba_token_(aba_token),
532
+ pollset_set_(grpc_pollset_set_create()) {
533
+ GRPC_CLOSURE_INIT(&on_dns_lookup_done_, OnDnsLookupDone, this,
534
+ grpc_schedule_on_exec_ctx);
535
+ grpc_pollset_set_add_pollset_set(pollset_set_, interested_parties_);
536
+ }
537
+
538
+ grpc_pollset_set* pollset_set() { return pollset_set_; };
539
+ grpc_closure* on_dns_lookup_done() { return &on_dns_lookup_done_; };
540
+ const std::string& name() { return name_; }
541
+ const std::string& name_server() { return name_server_; }
542
+ const Duration& timeout() { return timeout_; }
543
+
419
544
  private:
420
545
  // Called by ares when lookup has completed or when cancelled. It is always
421
- // called exactly once.
546
+ // called exactly once, and it triggers self-deletion.
422
547
  static void OnDnsLookupDone(void* arg, grpc_error_handle error) {
423
- AresRequest* request = static_cast<AresRequest*>(arg);
424
- GRPC_CARES_TRACE_LOG("AresRequest:%p OnDnsLookupDone", request);
425
- // This request is deleted and unregistered upon any exit.
426
- std::unique_ptr<AresRequest> deleter(request);
427
- std::vector<grpc_resolved_address> resolved_addresses;
548
+ AresRequest* r = static_cast<AresRequest*>(arg);
549
+ auto deleter = std::unique_ptr<AresRequest>(r);
428
550
  {
429
- MutexLock lock(&request->mu_);
430
- if (request->completed_) return;
431
- request->completed_ = true;
432
- if (request->addresses_ != nullptr) {
433
- resolved_addresses.reserve(request->addresses_->size());
434
- for (const auto& server_address : *request->addresses_) {
435
- resolved_addresses.push_back(server_address.address());
436
- }
551
+ MutexLock lock(&r->mu_);
552
+ grpc_pollset_set_del_pollset_set(r->pollset_set_,
553
+ r->interested_parties_);
554
+ if (r->completed_) {
555
+ return;
437
556
  }
557
+ r->completed_ = true;
438
558
  }
439
- grpc_pollset_set_del_pollset_set(request->pollset_set_,
440
- request->interested_parties_);
441
- if (!GRPC_ERROR_IS_NONE(error)) {
442
- request->on_resolve_address_done_(grpc_error_to_absl_status(error));
443
- return;
444
- }
445
- request->on_resolve_address_done_(std::move(resolved_addresses));
559
+ r->OnComplete(error);
446
560
  }
447
561
 
562
+ // the name to resolve
563
+ const std::string name_;
564
+ // the name server to query
565
+ const std::string name_server_;
566
+ // request-specific timeout
567
+ Duration timeout_;
448
568
  // mutex to synchronize access to this object (but not to the ares_request
449
569
  // object itself).
450
570
  Mutex mu_;
451
- // the name to resolve
452
- const std::string name_;
453
- // the default port to use if name doesn't have one
454
- const std::string default_port_;
455
571
  // parties interested in our I/O
456
572
  grpc_pollset_set* const interested_parties_;
573
+ // underlying cares_request that the query is performed on
574
+ std::unique_ptr<grpc_ares_request> grpc_ares_request_ ABSL_GUARDED_BY(mu_);
575
+ // Set when the callback is either cancelled or executed.
576
+ // It is not the subclasses' responsibility to set this flag.
577
+ bool completed_ ABSL_GUARDED_BY(mu_);
578
+ // Parent resolver that created this request
579
+ AresDNSResolver* resolver_;
580
+ // Unique token to help distinguish this request from others that may later
581
+ // be created in the same memory location.
582
+ intptr_t aba_token_;
583
+ // closure to call when the ares resolution request completes. Subclasses
584
+ // should use this as the ares callback in MakeRequestLocked()
585
+ grpc_closure on_dns_lookup_done_ ABSL_GUARDED_BY(mu_);
457
586
  // locally owned pollset_set, required to support cancellation of requests
458
- // while ares still needs a valid pollset_set.
587
+ // while ares still needs a valid pollset_set. Subclasses should give this
588
+ // pollset to ares in MakeRequestLocked();
459
589
  grpc_pollset_set* pollset_set_;
590
+ };
591
+
592
+ class AresHostnameRequest : public AresRequest {
593
+ public:
594
+ AresHostnameRequest(
595
+ absl::string_view name, absl::string_view default_port,
596
+ absl::string_view name_server, Duration timeout,
597
+ grpc_pollset_set* interested_parties,
598
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
599
+ on_resolve_address_done,
600
+ AresDNSResolver* resolver, intptr_t aba_token)
601
+ : AresRequest(name, name_server, timeout, interested_parties, resolver,
602
+ aba_token),
603
+ default_port_(default_port),
604
+ on_resolve_address_done_(std::move(on_resolve_address_done)) {
605
+ GRPC_CARES_TRACE_LOG("AresHostnameRequest:%p ctor", this);
606
+ }
607
+
608
+ std::unique_ptr<grpc_ares_request> MakeRequestLocked() override {
609
+ auto ares_request =
610
+ std::unique_ptr<grpc_ares_request>(grpc_dns_lookup_hostname_ares(
611
+ name_server().c_str(), name().c_str(), default_port_.c_str(),
612
+ pollset_set(), on_dns_lookup_done(), &addresses_,
613
+ timeout().millis()));
614
+ GRPC_CARES_TRACE_LOG("AresHostnameRequest:%p Start ares_request_:%p",
615
+ this, ares_request.get());
616
+ return ares_request;
617
+ }
618
+
619
+ void OnComplete(grpc_error_handle error) override {
620
+ GRPC_CARES_TRACE_LOG("AresHostnameRequest:%p OnComplete", this);
621
+ if (!GRPC_ERROR_IS_NONE(error)) {
622
+ on_resolve_address_done_(grpc_error_to_absl_status(error));
623
+ return;
624
+ }
625
+ std::vector<grpc_resolved_address> resolved_addresses;
626
+ if (addresses_ != nullptr) {
627
+ resolved_addresses.reserve(addresses_->size());
628
+ for (const auto& server_address : *addresses_) {
629
+ resolved_addresses.push_back(server_address.address());
630
+ }
631
+ }
632
+ on_resolve_address_done_(std::move(resolved_addresses));
633
+ }
634
+
635
+ // the default port to use if name doesn't have one
636
+ const std::string default_port_;
460
637
  // user-provided completion callback
461
638
  const std::function<void(
462
639
  absl::StatusOr<std::vector<grpc_resolved_address>>)>
463
640
  on_resolve_address_done_;
464
641
  // currently resolving addresses
465
- std::unique_ptr<ServerAddressList> addresses_ ABSL_GUARDED_BY(mu_);
466
- // closure to call when the resolve_address_ares request completes
467
- // a closure wrapping on_resolve_address_done, which should be invoked
468
- // when the grpc_dns_lookup_ares operation is done.
469
- grpc_closure on_dns_lookup_done_ ABSL_GUARDED_BY(mu_);
470
- // underlying ares_request that the query is performed on
471
- std::unique_ptr<grpc_ares_request> ares_request_ ABSL_GUARDED_BY(mu_);
472
- bool completed_ ABSL_GUARDED_BY(mu_);
473
- // Parent resolver that created this request
474
- AresDNSResolver* resolver_;
475
- // Unique token to help distinguish this request from others that may later
476
- // be created in the same memory location.
477
- intptr_t aba_token_;
642
+ std::unique_ptr<ServerAddressList> addresses_;
643
+ };
644
+
645
+ class AresSRVRequest : public AresRequest {
646
+ public:
647
+ AresSRVRequest(
648
+ absl::string_view name, absl::string_view name_server, Duration timeout,
649
+ grpc_pollset_set* interested_parties,
650
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
651
+ on_resolve_address_done,
652
+ AresDNSResolver* resolver, intptr_t aba_token)
653
+ : AresRequest(name, name_server, timeout, interested_parties, resolver,
654
+ aba_token),
655
+ on_resolve_address_done_(std::move(on_resolve_address_done)) {
656
+ GRPC_CARES_TRACE_LOG("AresSRVRequest:%p ctor", this);
657
+ }
658
+
659
+ std::unique_ptr<grpc_ares_request> MakeRequestLocked() override {
660
+ auto ares_request =
661
+ std::unique_ptr<grpc_ares_request>(grpc_dns_lookup_srv_ares(
662
+ name_server().c_str(), name().c_str(), pollset_set(),
663
+ on_dns_lookup_done(), &balancer_addresses_, timeout().millis()));
664
+ GRPC_CARES_TRACE_LOG("AresSRVRequest:%p Start ares_request_:%p", this,
665
+ ares_request.get());
666
+ return ares_request;
667
+ }
668
+
669
+ void OnComplete(grpc_error_handle error) override {
670
+ GRPC_CARES_TRACE_LOG("AresSRVRequest:%p OnComplete", this);
671
+ if (!GRPC_ERROR_IS_NONE(error)) {
672
+ on_resolve_address_done_(grpc_error_to_absl_status(error));
673
+ return;
674
+ }
675
+ std::vector<grpc_resolved_address> resolved_addresses;
676
+ if (balancer_addresses_ != nullptr) {
677
+ resolved_addresses.reserve(balancer_addresses_->size());
678
+ for (const auto& server_address : *balancer_addresses_) {
679
+ resolved_addresses.push_back(server_address.address());
680
+ }
681
+ }
682
+ on_resolve_address_done_(std::move(resolved_addresses));
683
+ }
684
+
685
+ // user-provided completion callback
686
+ const std::function<void(
687
+ absl::StatusOr<std::vector<grpc_resolved_address>>)>
688
+ on_resolve_address_done_;
689
+ // currently resolving addresses
690
+ std::unique_ptr<ServerAddressList> balancer_addresses_;
691
+ };
692
+
693
+ class AresTXTRequest : public AresRequest {
694
+ public:
695
+ AresTXTRequest(absl::string_view name, absl::string_view name_server,
696
+ Duration timeout, grpc_pollset_set* interested_parties,
697
+ std::function<void(absl::StatusOr<std::string>)> on_resolved,
698
+ AresDNSResolver* resolver, intptr_t aba_token)
699
+ : AresRequest(name, name_server, timeout, interested_parties, resolver,
700
+ aba_token),
701
+ on_resolved_(std::move(on_resolved)) {
702
+ GRPC_CARES_TRACE_LOG("AresTXTRequest:%p ctor", this);
703
+ }
704
+
705
+ ~AresTXTRequest() override { gpr_free(service_config_json_); }
706
+
707
+ std::unique_ptr<grpc_ares_request> MakeRequestLocked() override {
708
+ auto ares_request =
709
+ std::unique_ptr<grpc_ares_request>(grpc_dns_lookup_txt_ares(
710
+ name_server().c_str(), name().c_str(), pollset_set(),
711
+ on_dns_lookup_done(), &service_config_json_, timeout().millis()));
712
+ GRPC_CARES_TRACE_LOG("AresSRVRequest:%p Start ares_request_:%p", this,
713
+ ares_request.get());
714
+ return ares_request;
715
+ }
716
+
717
+ void OnComplete(grpc_error_handle error) override {
718
+ GRPC_CARES_TRACE_LOG("AresSRVRequest:%p OnComplete", this);
719
+ if (!GRPC_ERROR_IS_NONE(error)) {
720
+ on_resolved_(grpc_error_to_absl_status(error));
721
+ return;
722
+ }
723
+ on_resolved_(service_config_json_);
724
+ }
725
+
726
+ // service config from the TXT record
727
+ char* service_config_json_ = nullptr;
728
+ // user-provided completion callback
729
+ const std::function<void(absl::StatusOr<std::string>)> on_resolved_;
478
730
  };
479
731
 
480
732
  // gets the singleton instance, possibly creating it first
@@ -483,26 +735,60 @@ class AresDNSResolver : public DNSResolver {
483
735
  return instance;
484
736
  }
485
737
 
486
- TaskHandle ResolveName(
487
- absl::string_view name, absl::string_view default_port,
488
- grpc_pollset_set* interested_parties,
738
+ TaskHandle LookupHostname(
489
739
  std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
490
- on_done) override {
740
+ on_resolved,
741
+ absl::string_view name, absl::string_view default_port, Duration timeout,
742
+ grpc_pollset_set* interested_parties,
743
+ absl::string_view name_server) override {
491
744
  MutexLock lock(&mu_);
492
- auto* request = new AresRequest(name, default_port, interested_parties,
493
- std::move(on_done), this, aba_token_++);
745
+ auto* request = new AresHostnameRequest(
746
+ name, default_port, name_server, timeout, interested_parties,
747
+ std::move(on_resolved), this, aba_token_++);
748
+ request->Run();
494
749
  auto handle = request->task_handle();
495
750
  open_requests_.insert(handle);
496
751
  return handle;
497
752
  }
498
753
 
499
- absl::StatusOr<std::vector<grpc_resolved_address>> ResolveNameBlocking(
754
+ absl::StatusOr<std::vector<grpc_resolved_address>> LookupHostnameBlocking(
500
755
  absl::string_view name, absl::string_view default_port) override {
501
756
  // TODO(apolcyn): change this to wrap the async version of the c-ares
502
757
  // API with a promise, and remove the reference to the previous resolver.
503
- return default_resolver_->ResolveNameBlocking(name, default_port);
758
+ return default_resolver_->LookupHostnameBlocking(name, default_port);
504
759
  }
505
760
 
761
+ TaskHandle LookupSRV(
762
+ std::function<void(absl::StatusOr<std::vector<grpc_resolved_address>>)>
763
+ on_resolved,
764
+ absl::string_view name, Duration timeout,
765
+ grpc_pollset_set* interested_parties,
766
+ absl::string_view name_server) override {
767
+ MutexLock lock(&mu_);
768
+ auto* request =
769
+ new AresSRVRequest(name, name_server, timeout, interested_parties,
770
+ std::move(on_resolved), this, aba_token_++);
771
+ request->Run();
772
+ auto handle = request->task_handle();
773
+ open_requests_.insert(handle);
774
+ return handle;
775
+ };
776
+
777
+ TaskHandle LookupTXT(
778
+ std::function<void(absl::StatusOr<std::string>)> on_resolved,
779
+ absl::string_view name, Duration timeout,
780
+ grpc_pollset_set* interested_parties,
781
+ absl::string_view name_server) override {
782
+ MutexLock lock(&mu_);
783
+ auto* request =
784
+ new AresTXTRequest(name, name_server, timeout, interested_parties,
785
+ std::move(on_resolved), this, aba_token_++);
786
+ request->Run();
787
+ auto handle = request->task_handle();
788
+ open_requests_.insert(handle);
789
+ return handle;
790
+ };
791
+
506
792
  bool Cancel(TaskHandle handle) override {
507
793
  MutexLock lock(&mu_);
508
794
  if (!open_requests_.contains(handle)) {