grpc 1.48.0 → 1.49.0.pre1

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 +117 -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 +100 -124
  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 +60 -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 +13 -14
  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 +98 -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 +38 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +40 -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 +90 -38
  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
@@ -21,6 +21,8 @@
21
21
  #include <algorithm>
22
22
  #include <vector>
23
23
 
24
+ #include "absl/strings/string_view.h"
25
+
24
26
  #include "src/core/lib/iomgr/sockaddr.h"
25
27
 
26
28
  // IWYU pragma: no_include <arpa/nameser.h>
@@ -41,7 +43,6 @@
41
43
  #include <address_sorting/address_sorting.h>
42
44
  #include <ares.h>
43
45
 
44
- #include "absl/container/inlined_vector.h"
45
46
  #include "absl/memory/memory.h"
46
47
  #include "absl/status/status.h"
47
48
  #include "absl/status/statusor.h"
@@ -598,12 +599,10 @@ static void grpc_ares_request_unref_locked(grpc_ares_request* r)
598
599
 
599
600
  void grpc_ares_complete_request_locked(grpc_ares_request* r)
600
601
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
601
- /* Invoke on_done callback and destroy the
602
- request */
602
+ // Invoke on_done callback and destroy the request
603
603
  r->ev_driver = nullptr;
604
- ServerAddressList* addresses = r->addresses_out->get();
605
- if (addresses != nullptr) {
606
- grpc_cares_wrapper_address_sorting_sort(r, addresses);
604
+ if (r->addresses_out != nullptr && *r->addresses_out != nullptr) {
605
+ grpc_cares_wrapper_address_sorting_sort(r, r->addresses_out->get());
607
606
  GRPC_ERROR_UNREF(r->error);
608
607
  r->error = GRPC_ERROR_NONE;
609
608
  // TODO(apolcyn): allow c-ares to return a service config
@@ -664,13 +663,10 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
664
663
  }
665
664
  ServerAddressList& addresses = **address_list_ptr;
666
665
  for (size_t i = 0; hostent->h_addr_list[i] != nullptr; ++i) {
667
- absl::InlinedVector<grpc_arg, 1> args_to_add;
666
+ grpc_core::ChannelArgs args;
668
667
  if (hr->is_balancer) {
669
- args_to_add.emplace_back(grpc_channel_arg_string_create(
670
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY), hr->host));
668
+ args = args.Set(GRPC_ARG_DEFAULT_AUTHORITY, hr->host);
671
669
  }
672
- grpc_channel_args* args = grpc_channel_args_copy_and_add(
673
- nullptr, args_to_add.data(), args_to_add.size());
674
670
  switch (hostent->h_addrtype) {
675
671
  case AF_INET6: {
676
672
  size_t addr_len = sizeof(struct sockaddr_in6);
@@ -816,6 +812,7 @@ static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
816
812
  }
817
813
  // Clean up.
818
814
  ares_free_data(reply);
815
+ grpc_ares_request_unref_locked(r);
819
816
  return;
820
817
  fail:
821
818
  std::string error_msg =
@@ -827,38 +824,14 @@ fail:
827
824
  r->error = grpc_error_add_child(error, r->error);
828
825
  }
829
826
 
830
- void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
831
- grpc_ares_request* r, const char* dns_server, const char* name,
832
- const char* default_port, grpc_pollset_set* interested_parties,
833
- int query_timeout_ms) ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
834
- grpc_error_handle error = GRPC_ERROR_NONE;
835
- grpc_ares_hostbyname_request* hr = nullptr;
836
- /* parse name, splitting it into host and port parts */
837
- std::string host;
838
- std::string port;
839
- grpc_core::SplitHostPort(name, &host, &port);
840
- if (host.empty()) {
841
- error = grpc_error_set_str(
842
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
843
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
844
- goto error_cleanup;
845
- } else if (port.empty()) {
846
- if (default_port == nullptr || strlen(default_port) == 0) {
847
- error = grpc_error_set_str(
848
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
849
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
850
- goto error_cleanup;
851
- }
852
- port = default_port;
853
- }
854
- error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
855
- query_timeout_ms, r);
856
- if (!GRPC_ERROR_IS_NONE(error)) goto error_cleanup;
857
- // If dns_server is specified, use it.
858
- if (dns_server != nullptr && dns_server[0] != '\0') {
859
- GRPC_CARES_TRACE_LOG("request:%p Using DNS server %s", r, dns_server);
827
+ grpc_error_handle set_request_dns_server(grpc_ares_request* r,
828
+ absl::string_view dns_server)
829
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
830
+ if (!dns_server.empty()) {
831
+ GRPC_CARES_TRACE_LOG("request:%p Using DNS server %s", r,
832
+ dns_server.data());
860
833
  grpc_resolved_address addr;
861
- if (grpc_parse_ipv4_hostport(dns_server, &addr, false /* log_errors */)) {
834
+ if (grpc_parse_ipv4_hostport(dns_server, &addr, /*log_errors=*/false)) {
862
835
  r->dns_server_addr.family = AF_INET;
863
836
  struct sockaddr_in* in = reinterpret_cast<struct sockaddr_in*>(addr.addr);
864
837
  memcpy(&r->dns_server_addr.addr.addr4, &in->sin_addr,
@@ -866,7 +839,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
866
839
  r->dns_server_addr.tcp_port = grpc_sockaddr_get_port(&addr);
867
840
  r->dns_server_addr.udp_port = grpc_sockaddr_get_port(&addr);
868
841
  } else if (grpc_parse_ipv6_hostport(dns_server, &addr,
869
- false /* log_errors */)) {
842
+ /*log_errors=*/false)) {
870
843
  r->dns_server_addr.family = AF_INET6;
871
844
  struct sockaddr_in6* in6 =
872
845
  reinterpret_cast<struct sockaddr_in6*>(addr.addr);
@@ -875,51 +848,49 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
875
848
  r->dns_server_addr.tcp_port = grpc_sockaddr_get_port(&addr);
876
849
  r->dns_server_addr.udp_port = grpc_sockaddr_get_port(&addr);
877
850
  } else {
878
- error = grpc_error_set_str(
879
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("cannot parse authority"),
880
- GRPC_ERROR_STR_TARGET_ADDRESS, name);
881
- goto error_cleanup;
851
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(
852
+ absl::StrCat("cannot parse authority ", dns_server));
882
853
  }
883
854
  int status =
884
855
  ares_set_servers_ports(r->ev_driver->channel, &r->dns_server_addr);
885
856
  if (status != ARES_SUCCESS) {
886
- error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
857
+ return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
887
858
  "C-ares status is not ARES_SUCCESS: ", ares_strerror(status)));
888
- goto error_cleanup;
889
859
  }
890
860
  }
891
- r->pending_queries = 1;
892
- if (grpc_ares_query_ipv6()) {
893
- hr = create_hostbyname_request_locked(r, host.c_str(),
894
- grpc_strhtons(port.c_str()),
895
- /*is_balancer=*/false, "AAAA");
896
- ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET6,
897
- on_hostbyname_done_locked, hr);
898
- }
899
- hr = create_hostbyname_request_locked(r, host.c_str(),
900
- grpc_strhtons(port.c_str()),
901
- /*is_balancer=*/false, "A");
902
- ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET,
903
- on_hostbyname_done_locked, hr);
904
- if (r->balancer_addresses_out != nullptr) {
905
- /* Query the SRV record */
906
- std::string service_name = absl::StrCat("_grpclb._tcp.", host);
907
- GrpcAresQuery* srv_query = new GrpcAresQuery(r, service_name);
908
- ares_query(r->ev_driver->channel, service_name.c_str(), ns_c_in, ns_t_srv,
909
- on_srv_query_done_locked, srv_query);
910
- }
911
- if (r->service_config_json_out != nullptr) {
912
- std::string config_name = absl::StrCat("_grpc_config.", host);
913
- GrpcAresQuery* txt_query = new GrpcAresQuery(r, config_name);
914
- ares_search(r->ev_driver->channel, config_name.c_str(), ns_c_in, ns_t_txt,
915
- on_txt_done_locked, txt_query);
916
- }
917
- grpc_ares_ev_driver_start_locked(r->ev_driver);
918
- grpc_ares_request_unref_locked(r);
919
- return;
861
+ return GRPC_ERROR_NONE;
862
+ }
920
863
 
921
- error_cleanup:
922
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
864
+ // Common logic for all lookup methods.
865
+ // If an error occurs, callers must run the client callback.
866
+ grpc_error_handle grpc_dns_lookup_ares_continued(
867
+ grpc_ares_request* r, const char* dns_server, const char* name,
868
+ const char* default_port, grpc_pollset_set* interested_parties,
869
+ int query_timeout_ms, std::string* host, std::string* port, bool check_port)
870
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(r->mu) {
871
+ grpc_error_handle error = GRPC_ERROR_NONE;
872
+ /* parse name, splitting it into host and port parts */
873
+ grpc_core::SplitHostPort(name, host, port);
874
+ if (host->empty()) {
875
+ error = grpc_error_set_str(
876
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"),
877
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
878
+ return error;
879
+ } else if (check_port && port->empty()) {
880
+ if (default_port == nullptr || strlen(default_port) == 0) {
881
+ error = grpc_error_set_str(
882
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"),
883
+ GRPC_ERROR_STR_TARGET_ADDRESS, name);
884
+ return error;
885
+ }
886
+ *port = default_port;
887
+ }
888
+ error = grpc_ares_ev_driver_create_locked(&r->ev_driver, interested_parties,
889
+ query_timeout_ms, r);
890
+ if (!GRPC_ERROR_IS_NONE(error)) return error;
891
+ // If dns_server is specified, use it.
892
+ error = set_request_dns_server(r, dns_server);
893
+ return error;
923
894
  }
924
895
 
925
896
  static bool inner_resolve_as_ip_literal_locked(
@@ -951,7 +922,7 @@ static bool inner_resolve_as_ip_literal_locked(
951
922
  false /* log errors */)) {
952
923
  GPR_ASSERT(*addrs == nullptr);
953
924
  *addrs = absl::make_unique<ServerAddressList>();
954
- (*addrs)->emplace_back(addr.addr, addr.len, nullptr /* args */);
925
+ (*addrs)->emplace_back(addr.addr, addr.len, grpc_core::ChannelArgs());
955
926
  return true;
956
927
  }
957
928
  return false;
@@ -1017,7 +988,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
1017
988
  ipv6_loopback_addr.sin6_family = AF_INET6;
1018
989
  ipv6_loopback_addr.sin6_port = numeric_port;
1019
990
  (*addrs)->emplace_back(&ipv6_loopback_addr, sizeof(ipv6_loopback_addr),
1020
- nullptr /* args */);
991
+ grpc_core::ChannelArgs() /* args */);
1021
992
  // Append the ipv4 loopback address.
1022
993
  struct sockaddr_in ipv4_loopback_addr;
1023
994
  memset(&ipv4_loopback_addr, 0, sizeof(ipv4_loopback_addr));
@@ -1026,7 +997,7 @@ static bool inner_maybe_resolve_localhost_manually_locked(
1026
997
  ipv4_loopback_addr.sin_family = AF_INET;
1027
998
  ipv4_loopback_addr.sin_port = numeric_port;
1028
999
  (*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
1029
- nullptr /* args */);
1000
+ grpc_core::ChannelArgs() /* args */);
1030
1001
  // Let the address sorter figure out which one should be tried first.
1031
1002
  grpc_cares_wrapper_address_sorting_sort(r, addrs->get());
1032
1003
  return true;
@@ -1051,21 +1022,18 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
1051
1022
  }
1052
1023
  #endif /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
1053
1024
 
1054
- static grpc_ares_request* grpc_dns_lookup_ares_impl(
1025
+ static grpc_ares_request* grpc_dns_lookup_hostname_ares_impl(
1055
1026
  const char* dns_server, const char* name, const char* default_port,
1056
1027
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
1057
1028
  std::unique_ptr<grpc_core::ServerAddressList>* addrs,
1058
- std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
1059
- char** service_config_json, int query_timeout_ms) {
1029
+ int query_timeout_ms) {
1060
1030
  grpc_ares_request* r = new grpc_ares_request();
1061
1031
  grpc_core::MutexLock lock(&r->mu);
1062
1032
  r->ev_driver = nullptr;
1063
1033
  r->on_done = on_done;
1064
1034
  r->addresses_out = addrs;
1065
- r->balancer_addresses_out = balancer_addrs;
1066
- r->service_config_json_out = service_config_json;
1067
1035
  GRPC_CARES_TRACE_LOG(
1068
- "request:%p c-ares grpc_dns_lookup_ares_impl name=%s, "
1036
+ "request:%p c-ares grpc_dns_lookup_hostname_ares_impl name=%s, "
1069
1037
  "default_port=%s",
1070
1038
  r, name, default_port);
1071
1039
  // Early out if the target is an ipv4 or ipv6 literal.
@@ -1079,26 +1047,129 @@ static grpc_ares_request* grpc_dns_lookup_ares_impl(
1079
1047
  grpc_ares_complete_request_locked(r);
1080
1048
  return r;
1081
1049
  }
1082
- // Don't query for SRV and TXT records if the target is "localhost", so
1083
- // as to cut down on lookups over the network, especially in tests:
1084
- // https://github.com/grpc/proposal/pull/79
1050
+ // Look up name using c-ares lib.
1051
+ std::string host;
1052
+ std::string port;
1053
+ grpc_error_handle error = grpc_dns_lookup_ares_continued(
1054
+ r, dns_server, name, default_port, interested_parties, query_timeout_ms,
1055
+ &host, &port, true);
1056
+ if (!GRPC_ERROR_IS_NONE(error)) {
1057
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
1058
+ return r;
1059
+ }
1060
+ r->pending_queries = 1;
1061
+ grpc_ares_hostbyname_request* hr = nullptr;
1062
+ if (grpc_ares_query_ipv6()) {
1063
+ hr = create_hostbyname_request_locked(r, host.c_str(),
1064
+ grpc_strhtons(port.c_str()),
1065
+ /*is_balancer=*/false, "AAAA");
1066
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET6,
1067
+ on_hostbyname_done_locked, hr);
1068
+ }
1069
+ hr = create_hostbyname_request_locked(r, host.c_str(),
1070
+ grpc_strhtons(port.c_str()),
1071
+ /*is_balancer=*/false, "A");
1072
+ ares_gethostbyname(r->ev_driver->channel, hr->host, AF_INET,
1073
+ on_hostbyname_done_locked, hr);
1074
+ grpc_ares_ev_driver_start_locked(r->ev_driver);
1075
+ grpc_ares_request_unref_locked(r);
1076
+ return r;
1077
+ }
1078
+
1079
+ grpc_ares_request* grpc_dns_lookup_srv_ares_impl(
1080
+ const char* dns_server, const char* name,
1081
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
1082
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses,
1083
+ int query_timeout_ms) {
1084
+ grpc_ares_request* r = new grpc_ares_request();
1085
+ grpc_core::MutexLock lock(&r->mu);
1086
+ r->ev_driver = nullptr;
1087
+ r->on_done = on_done;
1088
+ r->balancer_addresses_out = balancer_addresses;
1089
+ GRPC_CARES_TRACE_LOG(
1090
+ "request:%p c-ares grpc_dns_lookup_srv_ares_impl name=%s", r, name);
1091
+ grpc_error_handle error = GRPC_ERROR_NONE;
1092
+ // Don't query for SRV records if the target is "localhost"
1093
+ if (target_matches_localhost(name)) {
1094
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
1095
+ return r;
1096
+ }
1097
+ // Look up name using c-ares lib.
1098
+ std::string host;
1099
+ std::string port;
1100
+ error = grpc_dns_lookup_ares_continued(r, dns_server, name, nullptr,
1101
+ interested_parties, query_timeout_ms,
1102
+ &host, &port, false);
1103
+ if (!GRPC_ERROR_IS_NONE(error)) {
1104
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
1105
+ return r;
1106
+ }
1107
+ r->pending_queries = 1;
1108
+ /* Query the SRV record */
1109
+ std::string service_name = absl::StrCat("_grpclb._tcp.", host);
1110
+ GrpcAresQuery* srv_query = new GrpcAresQuery(r, service_name);
1111
+ ares_query(r->ev_driver->channel, service_name.c_str(), ns_c_in, ns_t_srv,
1112
+ on_srv_query_done_locked, srv_query);
1113
+ grpc_ares_ev_driver_start_locked(r->ev_driver);
1114
+ grpc_ares_request_unref_locked(r);
1115
+ return r;
1116
+ }
1117
+
1118
+ grpc_ares_request* grpc_dns_lookup_txt_ares_impl(
1119
+ const char* dns_server, const char* name,
1120
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
1121
+ char** service_config_json, int query_timeout_ms) {
1122
+ grpc_ares_request* r = new grpc_ares_request();
1123
+ grpc_core::MutexLock lock(&r->mu);
1124
+ r->ev_driver = nullptr;
1125
+ r->on_done = on_done;
1126
+ r->service_config_json_out = service_config_json;
1127
+ GRPC_CARES_TRACE_LOG(
1128
+ "request:%p c-ares grpc_dns_lookup_txt_ares_impl name=%s", r, name);
1129
+ grpc_error_handle error = GRPC_ERROR_NONE;
1130
+ // Don't query for TXT records if the target is "localhost"
1085
1131
  if (target_matches_localhost(name)) {
1086
- r->balancer_addresses_out = nullptr;
1087
- r->service_config_json_out = nullptr;
1132
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
1133
+ return r;
1088
1134
  }
1089
1135
  // Look up name using c-ares lib.
1090
- grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
1091
- r, dns_server, name, default_port, interested_parties, query_timeout_ms);
1136
+ std::string host;
1137
+ std::string port;
1138
+ error = grpc_dns_lookup_ares_continued(r, dns_server, name, nullptr,
1139
+ interested_parties, query_timeout_ms,
1140
+ &host, &port, false);
1141
+ if (!GRPC_ERROR_IS_NONE(error)) {
1142
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, r->on_done, error);
1143
+ return r;
1144
+ }
1145
+ r->pending_queries = 1;
1146
+ /* Query the TXT record */
1147
+ std::string config_name = absl::StrCat("_grpc_config.", host);
1148
+ GrpcAresQuery* txt_query = new GrpcAresQuery(r, config_name);
1149
+ ares_search(r->ev_driver->channel, config_name.c_str(), ns_c_in, ns_t_txt,
1150
+ on_txt_done_locked, txt_query);
1151
+ grpc_ares_ev_driver_start_locked(r->ev_driver);
1152
+ grpc_ares_request_unref_locked(r);
1092
1153
  return r;
1093
1154
  }
1094
1155
 
1095
- grpc_ares_request* (*grpc_dns_lookup_ares)(
1156
+ grpc_ares_request* (*grpc_dns_lookup_hostname_ares)(
1096
1157
  const char* dns_server, const char* name, const char* default_port,
1097
1158
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
1098
1159
  std::unique_ptr<grpc_core::ServerAddressList>* addrs,
1099
- std::unique_ptr<grpc_core::ServerAddressList>* balancer_addrs,
1160
+ int query_timeout_ms) = grpc_dns_lookup_hostname_ares_impl;
1161
+
1162
+ grpc_ares_request* (*grpc_dns_lookup_srv_ares)(
1163
+ const char* dns_server, const char* name,
1164
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
1165
+ std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses,
1166
+ int query_timeout_ms) = grpc_dns_lookup_srv_ares_impl;
1167
+
1168
+ grpc_ares_request* (*grpc_dns_lookup_txt_ares)(
1169
+ const char* dns_server, const char* name,
1170
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
1100
1171
  char** service_config_json,
1101
- int query_timeout_ms) = grpc_dns_lookup_ares_impl;
1172
+ int query_timeout_ms) = grpc_dns_lookup_txt_ares_impl;
1102
1173
 
1103
1174
  static void grpc_cancel_ares_request_impl(grpc_ares_request* r) {
1104
1175
  GPR_ASSERT(r != nullptr);
@@ -78,23 +78,36 @@ struct grpc_ares_request {
78
78
  grpc_error_handle error ABSL_GUARDED_BY(mu) = GRPC_ERROR_NONE;
79
79
  };
80
80
 
81
- /* Asynchronously resolve \a name. It will try to resolve grpclb SRV records in
82
- addition to the normal address records. For normal address records, it uses
83
- \a default_port if a port isn't designated in \a name, otherwise it uses the
84
- port in \a name. grpc_ares_init() must be called at least once before this
85
- function. The returned grpc_ares_request object is owned by the caller and it
86
- is safe to free after on_done is called back.
81
+ /* Asynchronously resolve \a name (A/AAAA records only).
82
+ It uses \a default_port if a port isn't designated in \a name, otherwise it
83
+ uses the port in \a name. grpc_ares_init() must be called at least once before
84
+ this function. The returned grpc_ares_request object is owned by the caller
85
+ and it is safe to free after on_done is called back.
87
86
 
88
87
  Note on synchronization: \a as on_done might be called from another thread
89
88
  ~immediately, access to the grpc_ares_request* return value must be
90
89
  synchronized by the caller. TODO(apolcyn): we should remove this requirement
91
90
  by changing this API to use two phase initialization - one API to create
92
91
  the grpc_ares_request* and another to start the async work. */
93
- extern grpc_ares_request* (*grpc_dns_lookup_ares)(
92
+ extern grpc_ares_request* (*grpc_dns_lookup_hostname_ares)(
94
93
  const char* dns_server, const char* name, const char* default_port,
95
94
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
96
95
  std::unique_ptr<grpc_core::ServerAddressList>* addresses,
96
+ int query_timeout_ms);
97
+
98
+ // Asynchronously resolve a SRV record.
99
+ // See \a grpc_dns_lookup_hostname_ares for usage details and caveats.
100
+ extern grpc_ares_request* (*grpc_dns_lookup_srv_ares)(
101
+ const char* dns_server, const char* name,
102
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
97
103
  std::unique_ptr<grpc_core::ServerAddressList>* balancer_addresses,
104
+ int query_timeout_ms);
105
+
106
+ // Asynchronously resolve a TXT record.
107
+ // See \a grpc_dns_lookup_hostname_ares for usage details and caveats.
108
+ extern grpc_ares_request* (*grpc_dns_lookup_txt_ares)(
109
+ const char* dns_server, const char* name,
110
+ grpc_pollset_set* interested_parties, grpc_closure* on_done,
98
111
  char** service_config_json, int query_timeout_ms);
99
112
 
100
113
  /* Cancel the pending grpc_ares_request \a request */
@@ -16,8 +16,6 @@
16
16
 
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
- #include <limits.h>
20
-
21
19
  #include <algorithm>
22
20
  #include <memory>
23
21
  #include <string>
@@ -31,6 +29,7 @@
31
29
  #include "absl/strings/str_cat.h"
32
30
  #include "absl/strings/string_view.h"
33
31
  #include "absl/strings/strip.h"
32
+ #include "absl/types/optional.h"
34
33
 
35
34
  #include <grpc/impl/codegen/grpc_types.h>
36
35
  #include <grpc/support/log.h>
@@ -70,7 +69,7 @@ TraceFlag grpc_trace_dns_resolver(false, "dns_resolver");
70
69
  class NativeClientChannelDNSResolver : public PollingResolver {
71
70
  public:
72
71
  NativeClientChannelDNSResolver(ResolverArgs args,
73
- const grpc_channel_args* channel_args);
72
+ const ChannelArgs& channel_args);
74
73
  ~NativeClientChannelDNSResolver() override;
75
74
 
76
75
  OrphanablePtr<Orphanable> StartRequest() override;
@@ -91,12 +90,14 @@ class NativeClientChannelDNSResolver : public PollingResolver {
91
90
  };
92
91
 
93
92
  NativeClientChannelDNSResolver::NativeClientChannelDNSResolver(
94
- ResolverArgs args, const grpc_channel_args* channel_args)
93
+ ResolverArgs args, const ChannelArgs& channel_args)
95
94
  : PollingResolver(
96
95
  std::move(args), channel_args,
97
- Duration::Milliseconds(grpc_channel_args_find_integer(
98
- channel_args, GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS,
99
- {1000 * 30, 0, INT_MAX})),
96
+ std::max(Duration::Zero(),
97
+ channel_args
98
+ .GetDurationFromIntMillis(
99
+ GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS)
100
+ .value_or(Duration::Seconds(30))),
100
101
  BackOff::Options()
101
102
  .set_initial_backoff(Duration::Milliseconds(
102
103
  GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS * 1000))
@@ -118,9 +119,10 @@ NativeClientChannelDNSResolver::~NativeClientChannelDNSResolver() {
118
119
 
119
120
  OrphanablePtr<Orphanable> NativeClientChannelDNSResolver::StartRequest() {
120
121
  Ref(DEBUG_LOCATION, "dns_request").release();
121
- auto dns_request_handle = GetDNSResolver()->ResolveName(
122
- name_to_resolve(), kDefaultSecurePort, interested_parties(),
123
- absl::bind_front(&NativeClientChannelDNSResolver::OnResolved, this));
122
+ auto dns_request_handle = GetDNSResolver()->LookupHostname(
123
+ absl::bind_front(&NativeClientChannelDNSResolver::OnResolved, this),
124
+ name_to_resolve(), kDefaultSecurePort, kDefaultDNSRequestTimeout,
125
+ interested_parties(), /*name_server=*/"");
124
126
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_dns_resolver)) {
125
127
  gpr_log(GPR_DEBUG, "[dns_resolver=%p] starting request=%p", this,
126
128
  DNSResolver::HandleToString(dns_request_handle).c_str());
@@ -139,7 +141,7 @@ void NativeClientChannelDNSResolver::OnResolved(
139
141
  if (addresses_or.ok()) {
140
142
  ServerAddressList addresses;
141
143
  for (auto& addr : *addresses_or) {
142
- addresses.emplace_back(addr, nullptr /* args */);
144
+ addresses.emplace_back(addr, ChannelArgs());
143
145
  }
144
146
  result.addresses = std::move(addresses);
145
147
  } else {
@@ -147,7 +149,7 @@ void NativeClientChannelDNSResolver::OnResolved(
147
149
  absl::StrCat("DNS resolution failed for ", name_to_resolve(), ": ",
148
150
  addresses_or.status().ToString()));
149
151
  }
150
- result.args = grpc_channel_args_copy(channel_args());
152
+ result.args = channel_args();
151
153
  OnRequestComplete(std::move(result));
152
154
  Unref(DEBUG_LOCATION, "dns_request");
153
155
  }
@@ -174,9 +176,9 @@ class NativeClientChannelDNSResolverFactory : public ResolverFactory {
174
176
 
175
177
  OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override {
176
178
  if (!IsValidUri(args.uri)) return nullptr;
177
- const grpc_channel_args* channel_args = args.args;
178
- return MakeOrphanable<NativeClientChannelDNSResolver>(std::move(args),
179
- channel_args);
179
+ auto channel_args = args.args;
180
+ return MakeOrphanable<NativeClientChannelDNSResolver>(
181
+ std::move(args), std::move(channel_args));
180
182
  }
181
183
  };
182
184
 
@@ -36,7 +36,7 @@
36
36
  #include "src/core/lib/gpr/useful.h"
37
37
  #include "src/core/lib/gprpp/debug_location.h"
38
38
  #include "src/core/lib/gprpp/orphanable.h"
39
- #include "src/core/lib/iomgr/work_serializer.h"
39
+ #include "src/core/lib/gprpp/work_serializer.h"
40
40
  #include "src/core/lib/resolver/resolver_factory.h"
41
41
  #include "src/core/lib/resolver/resolver_registry.h"
42
42
  #include "src/core/lib/resolver/server_address.h"
@@ -59,8 +59,6 @@ class FakeResolver : public Resolver {
59
59
  friend class FakeResolverResponseGenerator;
60
60
  friend class FakeResolverResponseSetter;
61
61
 
62
- ~FakeResolver() override;
63
-
64
62
  void ShutdownLocked() override;
65
63
 
66
64
  void MaybeSendResultLocked();
@@ -68,7 +66,7 @@ class FakeResolver : public Resolver {
68
66
  void ReturnReresolutionResult();
69
67
 
70
68
  // passed-in parameters
71
- grpc_channel_args* channel_args_ = nullptr;
69
+ ChannelArgs channel_args_;
72
70
  std::shared_ptr<WorkSerializer> work_serializer_;
73
71
  std::unique_ptr<ResultHandler> result_handler_;
74
72
  RefCountedPtr<FakeResolverResponseGenerator> response_generator_;
@@ -94,21 +92,17 @@ FakeResolver::FakeResolver(ResolverArgs args)
94
92
  : work_serializer_(std::move(args.work_serializer)),
95
93
  result_handler_(std::move(args.result_handler)),
96
94
  response_generator_(
97
- FakeResolverResponseGenerator::GetFromArgs(args.args)) {
95
+ args.args.GetObjectRef<FakeResolverResponseGenerator>()) {
98
96
  // Channels sharing the same subchannels may have different resolver response
99
97
  // generators. If we don't remove this arg, subchannel pool will create new
100
98
  // subchannels for the same address instead of reusing existing ones because
101
99
  // of different values of this channel arg.
102
- const char* args_to_remove[] = {GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR};
103
- channel_args_ = grpc_channel_args_copy_and_remove(
104
- args.args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove));
100
+ channel_args_ = args.args.Remove(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR);
105
101
  if (response_generator_ != nullptr) {
106
102
  response_generator_->SetFakeResolver(Ref());
107
103
  }
108
104
  }
109
105
 
110
- FakeResolver::~FakeResolver() { grpc_channel_args_destroy(channel_args_); }
111
-
112
106
  void FakeResolver::StartLocked() {
113
107
  started_ = true;
114
108
  MaybeSendResultLocked();
@@ -147,17 +141,13 @@ void FakeResolver::MaybeSendResultLocked() {
147
141
  Result result;
148
142
  result.addresses = absl::UnavailableError("Resolver transient failure");
149
143
  result.service_config = result.addresses.status();
150
- result.args = grpc_channel_args_copy(channel_args_);
144
+ result.args = channel_args_;
151
145
  result_handler_->ReportResult(std::move(result));
152
146
  return_failure_ = false;
153
147
  } else if (has_next_result_) {
154
148
  // When both next_results_ and channel_args_ contain an arg with the same
155
- // name, only the one in next_results_ will be kept since next_results_ is
156
- // before channel_args_.
157
- grpc_channel_args* new_args =
158
- grpc_channel_args_union(next_result_.args, channel_args_);
159
- grpc_channel_args_destroy(next_result_.args);
160
- next_result_.args = new_args;
149
+ // name, only the one in next_results_.
150
+ next_result_.args = next_result_.args.UnionWith(channel_args_);
161
151
  result_handler_->ReportResult(std::move(next_result_));
162
152
  has_next_result_ = false;
163
153
  }
@@ -20,9 +20,11 @@
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
22
  #include "absl/base/thread_annotations.h"
23
+ #include "absl/strings/string_view.h"
23
24
 
24
25
  #include <grpc/impl/codegen/grpc_types.h>
25
26
 
27
+ #include "src/core/lib/gpr/useful.h"
26
28
  #include "src/core/lib/gprpp/ref_counted.h"
27
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
28
30
  #include "src/core/lib/gprpp/sync.h"
@@ -82,6 +84,15 @@ class FakeResolverResponseGenerator
82
84
  static RefCountedPtr<FakeResolverResponseGenerator> GetFromArgs(
83
85
  const grpc_channel_args* args);
84
86
 
87
+ static absl::string_view ChannelArgName() {
88
+ return GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR;
89
+ }
90
+
91
+ static int ChannelArgsCompare(const FakeResolverResponseGenerator* a,
92
+ const FakeResolverResponseGenerator* b) {
93
+ return QsortCompare(a, b);
94
+ }
95
+
85
96
  private:
86
97
  friend class FakeResolver;
87
98
  // Set the corresponding FakeResolver to this generator.