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
@@ -48,14 +48,6 @@
48
48
  #endif
49
49
  #endif // GPR_ABSEIL_SYNC
50
50
 
51
- /*
52
- * Defines GRPC_ERROR_IS_NOT_ABSEIL_STATUS to not use absl::Status for
53
- * grpc_error_handle. This is a temporary knob for migration process.
54
- */
55
- #ifndef GRPC_ERROR_IS_NOT_ABSEIL_STATUS
56
- #define GRPC_ERROR_IS_ABSEIL_STATUS 1
57
- #endif
58
-
59
51
  /* Get windows.h included everywhere (we need it) */
60
52
  #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
61
53
  #ifndef WIN32_LEAN_AND_MEAN
@@ -96,7 +96,7 @@ struct MaxAgeFilter::Config {
96
96
  connection storms. Note that the MAX_CONNECTION_AGE option without jitter
97
97
  would not create connection storms by itself, but if there happened to be a
98
98
  connection storm it could cause it to repeat at a fixed period. */
99
- static Config FromChannelArgs(ChannelArgs args) {
99
+ static Config FromChannelArgs(const ChannelArgs& args) {
100
100
  const Duration args_max_age =
101
101
  args.GetDurationFromIntMillis(GRPC_ARG_MAX_CONNECTION_AGE_MS)
102
102
  .value_or(kDefaultMaxConnectionAge);
@@ -118,14 +118,14 @@ struct MaxAgeFilter::Config {
118
118
  };
119
119
 
120
120
  absl::StatusOr<ClientIdleFilter> ClientIdleFilter::Create(
121
- ChannelArgs args, ChannelFilter::Args filter_args) {
121
+ const ChannelArgs& args, ChannelFilter::Args filter_args) {
122
122
  ClientIdleFilter filter(filter_args.channel_stack(),
123
123
  GetClientIdleTimeout(args));
124
124
  return absl::StatusOr<ClientIdleFilter>(std::move(filter));
125
125
  }
126
126
 
127
127
  absl::StatusOr<MaxAgeFilter> MaxAgeFilter::Create(
128
- ChannelArgs args, ChannelFilter::Args filter_args) {
128
+ const ChannelArgs& args, ChannelFilter::Args filter_args) {
129
129
  MaxAgeFilter filter(filter_args.channel_stack(),
130
130
  Config::FromChannelArgs(args));
131
131
  return absl::StatusOr<MaxAgeFilter>(std::move(filter));
@@ -94,7 +94,7 @@ class ClientIdleFilter final : public ChannelIdleFilter {
94
94
  static const grpc_channel_filter kFilter;
95
95
 
96
96
  static absl::StatusOr<ClientIdleFilter> Create(
97
- ChannelArgs args, ChannelFilter::Args filter_args);
97
+ const ChannelArgs& args, ChannelFilter::Args filter_args);
98
98
 
99
99
  private:
100
100
  using ChannelIdleFilter::ChannelIdleFilter;
@@ -105,7 +105,7 @@ class MaxAgeFilter final : public ChannelIdleFilter {
105
105
  static const grpc_channel_filter kFilter;
106
106
  struct Config;
107
107
 
108
- static absl::StatusOr<MaxAgeFilter> Create(ChannelArgs args,
108
+ static absl::StatusOr<MaxAgeFilter> Create(const ChannelArgs& args,
109
109
  ChannelFilter::Args filter_args);
110
110
 
111
111
  void PostInit() override;
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <string.h>
24
23
 
25
24
  #include <algorithm>
26
25
  #include <functional>
@@ -28,7 +27,6 @@
28
27
  #include <set>
29
28
  #include <vector>
30
29
 
31
- #include "absl/container/inlined_vector.h"
32
30
  #include "absl/memory/memory.h"
33
31
  #include "absl/status/status.h"
34
32
  #include "absl/status/statusor.h"
@@ -43,7 +41,6 @@
43
41
  #include <grpc/impl/codegen/gpr_types.h>
44
42
  #include <grpc/slice.h>
45
43
  #include <grpc/status.h>
46
- #include <grpc/support/alloc.h>
47
44
  #include <grpc/support/log.h>
48
45
  #include <grpc/support/string_util.h>
49
46
 
@@ -54,13 +51,11 @@
54
51
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
55
52
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
56
53
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
57
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
58
54
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
59
55
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
60
56
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
61
57
  #include "src/core/ext/filters/client_channel/retry_filter.h"
62
58
  #include "src/core/ext/filters/client_channel/subchannel.h"
63
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
64
59
  #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
65
60
  #include "src/core/ext/filters/deadline/deadline_filter.h"
66
61
  #include "src/core/lib/channel/channel_args.h"
@@ -71,11 +66,13 @@
71
66
  #include "src/core/lib/gpr/useful.h"
72
67
  #include "src/core/lib/gprpp/debug_location.h"
73
68
  #include "src/core/lib/gprpp/sync.h"
69
+ #include "src/core/lib/gprpp/work_serializer.h"
74
70
  #include "src/core/lib/iomgr/exec_ctx.h"
75
71
  #include "src/core/lib/iomgr/polling_entity.h"
76
72
  #include "src/core/lib/iomgr/pollset_set.h"
77
- #include "src/core/lib/iomgr/work_serializer.h"
78
73
  #include "src/core/lib/json/json.h"
74
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
75
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
79
76
  #include "src/core/lib/profiling/timers.h"
80
77
  #include "src/core/lib/resolver/resolver_registry.h"
81
78
  #include "src/core/lib/resolver/server_address.h"
@@ -266,28 +263,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
266
263
 
267
264
  namespace {
268
265
 
269
- // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
270
- void* ClientChannelArgCopy(void* p) { return p; }
271
- void ClientChannelArgDestroy(void* /*p*/) {}
272
- int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
273
- const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
274
- ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
275
-
276
- // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
277
- void* ServiceConfigObjArgCopy(void* p) {
278
- auto* service_config = static_cast<ServiceConfig*>(p);
279
- service_config->Ref().release();
280
- return p;
281
- }
282
- void ServiceConfigObjArgDestroy(void* p) {
283
- auto* service_config = static_cast<ServiceConfig*>(p);
284
- service_config->Unref();
285
- }
286
- int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
287
- const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
288
- ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
289
- ServiceConfigObjArgCmp};
290
-
291
266
  class DynamicTerminationFilter {
292
267
  public:
293
268
  class CallData;
@@ -545,9 +520,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
545
520
  data_watchers_.push_back(std::move(internal_watcher));
546
521
  }
547
522
 
548
- const grpc_channel_args* channel_args() override {
549
- return subchannel_->channel_args();
550
- }
523
+ ChannelArgs channel_args() override { return subchannel_->channel_args(); }
551
524
 
552
525
  void ThrottleKeepaliveTime(int new_keepalive_time) {
553
526
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
@@ -879,67 +852,23 @@ class ClientChannel::ClientChannelControlHelper
879
852
  }
880
853
 
881
854
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
882
- ServerAddress address, const grpc_channel_args& args) override
855
+ ServerAddress address, const ChannelArgs& args) override
883
856
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
884
857
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
885
858
  // Determine health check service name.
886
859
  absl::optional<std::string> health_check_service_name;
887
- const char* health_check_service_name_arg = grpc_channel_args_find_string(
888
- &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
889
- if (health_check_service_name_arg != nullptr) {
890
- bool inhibit_health_checking = grpc_channel_args_find_bool(
891
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
892
- if (!inhibit_health_checking) {
893
- health_check_service_name = health_check_service_name_arg;
894
- }
860
+ if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
861
+ health_check_service_name =
862
+ args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
895
863
  }
896
864
  // Construct channel args for subchannel.
897
- // Remove channel args that should not affect subchannel uniqueness.
898
- absl::InlinedVector<const char*, 4> args_to_remove = {
899
- GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
900
- GRPC_ARG_INHIBIT_HEALTH_CHECKING,
901
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
902
- };
903
- // Add channel args needed for the subchannel.
904
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
905
- SubchannelPoolInterface::CreateChannelArg(
906
- chand_->subchannel_pool_.get()),
907
- };
908
- // Check if default authority arg is already set.
909
- const char* default_authority =
910
- grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
911
- // Add args from subchannel address.
912
- if (address.args() != nullptr) {
913
- for (size_t j = 0; j < address.args()->num_args; ++j) {
914
- grpc_arg& arg = address.args()->args[j];
915
- if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
916
- // Don't add default authority arg from subchannel address if
917
- // it's already set at the channel level -- the value from the
918
- // application should take precedence over what is set by the
919
- // resolver.
920
- if (default_authority != nullptr) continue;
921
- default_authority = arg.value.string;
922
- }
923
- args_to_add.emplace_back(arg);
924
- }
925
- }
926
- // If we haven't already set the default authority arg, add it from
927
- // the channel.
928
- if (default_authority == nullptr) {
929
- // Remove it, just in case it's actually present but is the wrong type.
930
- args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
931
- args_to_add.push_back(grpc_channel_arg_string_create(
932
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
933
- const_cast<char*>(chand_->default_authority_.c_str())));
934
- }
935
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
936
- &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
937
- args_to_add.size());
865
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
866
+ args, address.args(), chand_->subchannel_pool_,
867
+ chand_->default_authority_);
938
868
  // Create subchannel.
939
869
  RefCountedPtr<Subchannel> subchannel =
940
870
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
941
- new_args);
942
- grpc_channel_args_destroy(new_args);
871
+ subchannel_args);
943
872
  if (subchannel == nullptr) return nullptr;
944
873
  // Make sure the subchannel has updated keepalive time.
945
874
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -1030,36 +959,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1030
959
  namespace {
1031
960
 
1032
961
  RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1033
- const grpc_channel_args* args) {
1034
- const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1035
- args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1036
- if (use_local_subchannel_pool) {
962
+ const ChannelArgs& args) {
963
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1037
964
  return MakeRefCounted<LocalSubchannelPool>();
1038
965
  }
1039
966
  return GlobalSubchannelPool::instance();
1040
967
  }
1041
968
 
1042
- channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1043
- return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1044
- args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1045
- }
1046
-
1047
969
  } // namespace
1048
970
 
1049
971
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1050
972
  grpc_error_handle* error)
1051
- : deadline_checking_enabled_(
1052
- grpc_deadline_checking_enabled(args->channel_args)),
973
+ : channel_args_(ChannelArgs::FromC(args->channel_args)),
974
+ deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
1053
975
  owning_stack_(args->channel_stack),
1054
- client_channel_factory_(
1055
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1056
- channelz_node_(GetChannelzNode(args->channel_args)),
976
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
977
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1057
978
  interested_parties_(grpc_pollset_set_create()),
1058
979
  service_config_parser_index_(
1059
980
  internal::ClientChannelServiceConfigParser::ParserIndex()),
1060
981
  work_serializer_(std::make_shared<WorkSerializer>()),
1061
982
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1062
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
983
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
1063
984
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1064
985
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1065
986
  this, owning_stack_);
@@ -1074,34 +995,28 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1074
995
  }
1075
996
  // Get default service config. If none is specified via the client API,
1076
997
  // we use an empty config.
1077
- const char* service_config_json = grpc_channel_args_find_string(
1078
- args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1079
- if (service_config_json == nullptr) service_config_json = "{}";
998
+ absl::optional<absl::string_view> service_config_json =
999
+ channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
1000
+ if (!service_config_json.has_value()) service_config_json = "{}";
1080
1001
  *error = GRPC_ERROR_NONE;
1081
- default_service_config_ =
1082
- ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1083
- if (!GRPC_ERROR_IS_NONE(*error)) {
1084
- default_service_config_.reset();
1002
+ auto service_config =
1003
+ ServiceConfigImpl::Create(channel_args_, *service_config_json);
1004
+ if (!service_config.ok()) {
1005
+ *error = absl_status_to_grpc_error(service_config.status());
1085
1006
  return;
1086
1007
  }
1008
+ default_service_config_ = std::move(*service_config);
1087
1009
  // Get URI to resolve, using proxy mapper if needed.
1088
- const char* server_uri =
1089
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1090
- if (server_uri == nullptr) {
1010
+ absl::optional<std::string> server_uri =
1011
+ channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
1012
+ if (!server_uri.has_value()) {
1091
1013
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1092
1014
  "target URI channel arg missing or wrong type in client channel "
1093
1015
  "filter");
1094
1016
  return;
1095
1017
  }
1096
- uri_to_resolve_ = server_uri;
1097
- char* proxy_name = nullptr;
1098
- grpc_channel_args* new_args = nullptr;
1099
- ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1100
- &new_args);
1101
- if (proxy_name != nullptr) {
1102
- uri_to_resolve_ = proxy_name;
1103
- gpr_free(proxy_name);
1104
- }
1018
+ uri_to_resolve_ = ProxyMapperRegistry::MapName(*server_uri, &channel_args_)
1019
+ .value_or(*server_uri);
1105
1020
  // Make sure the URI to resolve is valid, so that we know that
1106
1021
  // resolver creation will succeed later.
1107
1022
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
@@ -1112,23 +1027,23 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1112
1027
  }
1113
1028
  // Strip out service config channel arg, so that it doesn't affect
1114
1029
  // subchannel uniqueness when the args flow down to that layer.
1115
- const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1116
- channel_args_ = grpc_channel_args_copy_and_remove(
1117
- new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1118
- grpc_channel_args_destroy(new_args);
1030
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1119
1031
  // Set initial keepalive time.
1120
- keepalive_time_ = grpc_channel_args_find_integer(
1121
- channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1122
- {-1 /* default value, unset */, 1, INT_MAX});
1032
+ auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
1033
+ if (keepalive_arg.has_value()) {
1034
+ keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
1035
+ } else {
1036
+ keepalive_time_ = -1; // unset
1037
+ }
1123
1038
  // Set default authority.
1124
- const char* default_authority =
1125
- grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1126
- if (default_authority == nullptr) {
1039
+ absl::optional<std::string> default_authority =
1040
+ channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
1041
+ if (!default_authority.has_value()) {
1127
1042
  default_authority_ =
1128
1043
  CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1129
- server_uri);
1044
+ *server_uri);
1130
1045
  } else {
1131
- default_authority_ = default_authority;
1046
+ default_authority_ = std::move(*default_authority);
1132
1047
  }
1133
1048
  // Success.
1134
1049
  *error = GRPC_ERROR_NONE;
@@ -1139,7 +1054,6 @@ ClientChannel::~ClientChannel() {
1139
1054
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1140
1055
  }
1141
1056
  DestroyResolverAndLbPolicyLocked();
1142
- grpc_channel_args_destroy(channel_args_);
1143
1057
  // Stop backup polling.
1144
1058
  grpc_client_channel_stop_backup_polling(interested_parties_);
1145
1059
  grpc_pollset_set_destroy(interested_parties_);
@@ -1157,6 +1071,29 @@ ClientChannel::CreateLoadBalancedCall(
1157
1071
  call_dispatch_controller, is_transparent_retry));
1158
1072
  }
1159
1073
 
1074
+ ChannelArgs ClientChannel::MakeSubchannelArgs(
1075
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
1076
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1077
+ const std::string& channel_default_authority) {
1078
+ // Note that we start with the channel-level args and then apply the
1079
+ // per-address args, so that if a value is present in both, the one
1080
+ // in the channel-level args is used. This is particularly important
1081
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1082
+ // resolvers to set on a per-address basis only if the application
1083
+ // did not explicitly set it at the channel level.
1084
+ return channel_args.UnionWith(address_args)
1085
+ .SetObject(subchannel_pool)
1086
+ // If we haven't already set the default authority arg (i.e., it
1087
+ // was not explicitly set by the application nor overridden by
1088
+ // the resolver), add it from the channel's default.
1089
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1090
+ // Remove channel args that should not affect subchannel
1091
+ // uniqueness.
1092
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1093
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1094
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1095
+ }
1096
+
1160
1097
  namespace {
1161
1098
 
1162
1099
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1168,41 +1105,39 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1168
1105
  }
1169
1106
  // Try the deprecated LB policy name from the service config.
1170
1107
  // If not, try the setting from channel args.
1171
- const char* policy_name = nullptr;
1108
+ absl::optional<absl::string_view> policy_name;
1172
1109
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1173
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1110
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1174
1111
  } else {
1175
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1176
- GRPC_ARG_LB_POLICY_NAME);
1112
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1177
1113
  bool requires_config = false;
1178
- if (policy_name != nullptr &&
1114
+ if (policy_name.has_value() &&
1179
1115
  (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1180
- policy_name, &requires_config) ||
1116
+ *policy_name, &requires_config) ||
1181
1117
  requires_config)) {
1182
1118
  if (requires_config) {
1183
1119
  gpr_log(GPR_ERROR,
1184
1120
  "LB policy: %s passed through channel_args must not "
1185
1121
  "require a config. Using pick_first instead.",
1186
- policy_name);
1122
+ std::string(*policy_name).c_str());
1187
1123
  } else {
1188
1124
  gpr_log(GPR_ERROR,
1189
1125
  "LB policy: %s passed through channel_args does not exist. "
1190
1126
  "Using pick_first instead.",
1191
- policy_name);
1127
+ std::string(*policy_name).c_str());
1192
1128
  }
1193
1129
  policy_name = "pick_first";
1194
1130
  }
1195
1131
  }
1196
1132
  // Use pick_first if nothing was specified and we didn't select grpclb
1197
1133
  // above.
1198
- if (policy_name == nullptr) policy_name = "pick_first";
1134
+ if (!policy_name.has_value()) policy_name = "pick_first";
1199
1135
  // Now that we have the policy name, construct an empty config for it.
1200
1136
  Json config_json = Json::Array{Json::Object{
1201
- {policy_name, Json::Object{}},
1137
+ {std::string(*policy_name), Json::Object{}},
1202
1138
  }};
1203
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1204
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1205
- config_json, &parse_error);
1139
+ auto lb_policy_config =
1140
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json);
1206
1141
  // The policy name came from one of three places:
1207
1142
  // - The deprecated loadBalancingPolicy field in the service config,
1208
1143
  // in which case the code in ClientChannelServiceConfigParser
@@ -1212,9 +1147,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1212
1147
  // - A channel arg, in which case we check that the specified policy exists
1213
1148
  // and accepts an empty config. If not, we revert to using pick_first
1214
1149
  // lb_policy
1215
- GPR_ASSERT(lb_policy_config != nullptr);
1216
- GPR_ASSERT(GRPC_ERROR_IS_NONE(parse_error));
1217
- return lb_policy_config;
1150
+ GPR_ASSERT(lb_policy_config.ok());
1151
+ return std::move(*lb_policy_config);
1218
1152
  }
1219
1153
 
1220
1154
  } // namespace
@@ -1289,7 +1223,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1289
1223
  } else {
1290
1224
  // Use ServiceConfig and ConfigSelector returned by resolver.
1291
1225
  service_config = std::move(*result.service_config);
1292
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1226
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1293
1227
  }
1294
1228
  // Note: The only case in which service_config is null here is if the resolver
1295
1229
  // returned a service config error and we don't have a previous service
@@ -1313,9 +1247,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1313
1247
  // If either has changed, apply the global parameters now.
1314
1248
  if (service_config_changed || config_selector_changed) {
1315
1249
  // Update service config in control plane.
1316
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1317
- std::move(config_selector),
1318
- lb_policy_config->name());
1250
+ UpdateServiceConfigInControlPlaneLocked(
1251
+ std::move(service_config), std::move(config_selector),
1252
+ std::string(lb_policy_config->name()));
1319
1253
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1320
1254
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1321
1255
  }
@@ -1388,22 +1322,18 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1388
1322
  update_args.addresses = std::move(result.addresses);
1389
1323
  update_args.config = std::move(lb_policy_config);
1390
1324
  update_args.resolution_note = std::move(result.resolution_note);
1391
- // Add health check service name to channel args.
1392
- absl::InlinedVector<grpc_arg, 1> args_to_add;
1393
- if (health_check_service_name.has_value()) {
1394
- args_to_add.push_back(grpc_channel_arg_string_create(
1395
- const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1396
- const_cast<char*>(health_check_service_name->c_str())));
1397
- }
1398
1325
  // Remove the config selector from channel args so that we're not holding
1399
1326
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1400
1327
  // WorkSerializer.
1401
- const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1402
- update_args.args = grpc_channel_args_copy_and_add_and_remove(
1403
- result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1328
+ update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
1329
+ // Add health check service name to channel args.
1330
+ if (health_check_service_name.has_value()) {
1331
+ update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
1332
+ *health_check_service_name);
1333
+ }
1404
1334
  // Create policy if needed.
1405
1335
  if (lb_policy_ == nullptr) {
1406
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1336
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1407
1337
  }
1408
1338
  // Update the policy.
1409
1339
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
@@ -1415,12 +1345,12 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1415
1345
 
1416
1346
  // Creates a new LB policy.
1417
1347
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1418
- const grpc_channel_args& args) {
1348
+ const ChannelArgs& args) {
1419
1349
  LoadBalancingPolicy::Args lb_policy_args;
1420
1350
  lb_policy_args.work_serializer = work_serializer_;
1421
1351
  lb_policy_args.channel_control_helper =
1422
1352
  absl::make_unique<ClientChannelControlHelper>(this);
1423
- lb_policy_args.args = &args;
1353
+ lb_policy_args.args = args;
1424
1354
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1425
1355
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1426
1356
  &grpc_client_channel_trace);
@@ -1495,20 +1425,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1495
1425
  config_selector =
1496
1426
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1497
1427
  }
1498
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1499
- grpc_channel_arg_pointer_create(
1500
- const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1501
- &kClientChannelArgPointerVtable),
1502
- grpc_channel_arg_pointer_create(
1503
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1504
- &kServiceConfigObjArgPointerVtable),
1505
- };
1506
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1507
- channel_args_, args_to_add.data(), args_to_add.size());
1508
- new_args = config_selector->ModifyChannelArgs(new_args);
1428
+ ChannelArgs new_args = config_selector->ModifyChannelArgs(
1429
+ channel_args_.SetObject(this).SetObject(service_config));
1509
1430
  bool enable_retries =
1510
- !grpc_channel_args_want_minimal_stack(new_args) &&
1511
- grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1431
+ !new_args.WantMinimalStack() &&
1432
+ new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1512
1433
  // Construct dynamic filter stack.
1513
1434
  std::vector<const grpc_channel_filter*> filters =
1514
1435
  config_selector->GetFilters();
@@ -1518,9 +1439,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1518
1439
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1519
1440
  }
1520
1441
  RefCountedPtr<DynamicFilters> dynamic_filters =
1521
- DynamicFilters::Create(new_args, std::move(filters));
1442
+ DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1522
1443
  GPR_ASSERT(dynamic_filters != nullptr);
1523
- grpc_channel_args_destroy(new_args);
1524
1444
  // Grab data plane lock to update service config.
1525
1445
  //
1526
1446
  // We defer unreffing the old values (and deallocating memory) until
@@ -1706,6 +1626,10 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1706
1626
  complete_pick->subchannel.get());
1707
1627
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1708
1628
  subchannel->connected_subchannel();
1629
+ if (connected_subchannel == nullptr) {
1630
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1631
+ "LB pick for ping not connected");
1632
+ }
1709
1633
  connected_subchannel->Ping(op->send_ping.on_initiate,
1710
1634
  op->send_ping.on_ack);
1711
1635
  return GRPC_ERROR_NONE;
@@ -2240,7 +2164,9 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2240
2164
  // Use the ConfigSelector to determine the config for the call.
2241
2165
  ConfigSelector::CallConfig call_config =
2242
2166
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2243
- if (!GRPC_ERROR_IS_NONE(call_config.error)) return call_config.error;
2167
+ if (!call_config.status.ok()) {
2168
+ return absl_status_to_grpc_error(call_config.status);
2169
+ }
2244
2170
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2245
2171
  // a ref to the ServiceConfig and caches the right set of parsed configs
2246
2172
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2270,17 +2196,13 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2270
2196
  }
2271
2197
  // If the service config set wait_for_ready and the application
2272
2198
  // did not explicitly set it, use the value from the service config.
2273
- uint32_t* send_initial_metadata_flags =
2274
- &pending_batches_[0]
2275
- ->payload->send_initial_metadata.send_initial_metadata_flags;
2199
+ auto* wait_for_ready =
2200
+ pending_batches_[0]
2201
+ ->payload->send_initial_metadata.send_initial_metadata
2202
+ ->GetOrCreatePointer(WaitForReady());
2276
2203
  if (method_params->wait_for_ready().has_value() &&
2277
- !(*send_initial_metadata_flags &
2278
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2279
- if (method_params->wait_for_ready().value()) {
2280
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2281
- } else {
2282
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2283
- }
2204
+ !wait_for_ready->explicitly_set) {
2205
+ wait_for_ready->value = method_params->wait_for_ready().value();
2284
2206
  }
2285
2207
  }
2286
2208
  // Set the dynamic filter stack.
@@ -2388,16 +2310,14 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2388
2310
  pending_batches_[0]->payload->send_initial_metadata;
2389
2311
  grpc_metadata_batch* initial_metadata_batch =
2390
2312
  send_initial_metadata.send_initial_metadata;
2391
- const uint32_t send_initial_metadata_flags =
2392
- send_initial_metadata.send_initial_metadata_flags;
2393
2313
  // If we don't yet have a resolver result, we need to queue the call
2394
2314
  // until we get one.
2395
2315
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2396
2316
  // If the resolver returned transient failure before returning the
2397
2317
  // first service config, fail any non-wait_for_ready calls.
2398
2318
  absl::Status resolver_error = chand->resolver_transient_failure_error_;
2399
- if (!resolver_error.ok() && (send_initial_metadata_flags &
2400
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2319
+ if (!resolver_error.ok() &&
2320
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2401
2321
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2402
2322
  gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2403
2323
  chand, this);
@@ -2795,8 +2715,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2795
2715
  }
2796
2716
  if (batch->send_initial_metadata) {
2797
2717
  call_attempt_tracer_->RecordSendInitialMetadata(
2798
- batch->payload->send_initial_metadata.send_initial_metadata,
2799
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2718
+ batch->payload->send_initial_metadata.send_initial_metadata);
2800
2719
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2801
2720
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2802
2721
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -3171,8 +3090,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3171
3090
  pending_batches_[0]->payload->send_initial_metadata;
3172
3091
  grpc_metadata_batch* initial_metadata_batch =
3173
3092
  send_initial_metadata.send_initial_metadata;
3174
- const uint32_t send_initial_metadata_flags =
3175
- send_initial_metadata.send_initial_metadata_flags;
3176
3093
  // Perform LB pick.
3177
3094
  LoadBalancingPolicy::PickArgs pick_args;
3178
3095
  pick_args.path = path_.as_string_view();
@@ -3230,7 +3147,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3230
3147
  return false;
3231
3148
  },
3232
3149
  // FailPick
3233
- [this, send_initial_metadata_flags,
3150
+ [this, initial_metadata_batch,
3234
3151
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3235
3152
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3236
3153
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -3239,8 +3156,8 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3239
3156
  }
3240
3157
  // If wait_for_ready is false, then the error indicates the RPC
3241
3158
  // attempt's final status.
3242
- if ((send_initial_metadata_flags &
3243
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3159
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3160
+ ->value) {
3244
3161
  grpc_error_handle lb_error =
3245
3162
  absl_status_to_grpc_error(fail_pick->status);
3246
3163
  *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(