grpc 1.48.0-x86_64-linux → 1.49.1-x86_64-linux

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 (721) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +125 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -131
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +63 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -17
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +101 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +42 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +44 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  659. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  660. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  661. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  662. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  663. data/src/ruby/lib/grpc/version.rb +1 -1
  664. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  665. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  666. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  667. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  668. data/third_party/upb/upb/arena.c +277 -0
  669. data/third_party/upb/upb/arena.h +225 -0
  670. data/third_party/upb/upb/array.c +114 -0
  671. data/third_party/upb/upb/array.h +83 -0
  672. data/third_party/upb/upb/collections.h +36 -0
  673. data/third_party/upb/upb/decode.c +161 -65
  674. data/third_party/upb/upb/decode.h +1 -0
  675. data/third_party/upb/upb/decode_fast.c +1 -1
  676. data/third_party/upb/upb/def.c +10 -2
  677. data/third_party/upb/upb/def.h +8 -1
  678. data/third_party/upb/upb/def.hpp +7 -4
  679. data/third_party/upb/upb/encode.c +29 -20
  680. data/third_party/upb/upb/encode.h +16 -6
  681. data/third_party/upb/upb/extension_registry.c +93 -0
  682. data/third_party/upb/upb/extension_registry.h +84 -0
  683. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  684. data/third_party/upb/upb/internal/table.h +385 -0
  685. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  686. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  687. data/third_party/upb/upb/json_decode.c +1512 -0
  688. data/third_party/upb/upb/json_decode.h +47 -0
  689. data/third_party/upb/upb/json_encode.c +7 -3
  690. data/third_party/upb/upb/json_encode.h +6 -3
  691. data/third_party/upb/upb/map.c +108 -0
  692. data/third_party/upb/upb/map.h +117 -0
  693. data/third_party/upb/upb/message_value.h +66 -0
  694. data/third_party/upb/upb/mini_table.c +1147 -0
  695. data/third_party/upb/upb/mini_table.h +189 -0
  696. data/third_party/upb/upb/mini_table.hpp +112 -0
  697. data/third_party/upb/upb/msg.c +2 -62
  698. data/third_party/upb/upb/msg.h +2 -45
  699. data/third_party/upb/upb/msg_internal.h +28 -22
  700. data/third_party/upb/upb/port_def.inc +2 -1
  701. data/third_party/upb/upb/port_undef.inc +1 -0
  702. data/third_party/upb/upb/reflection.c +2 -159
  703. data/third_party/upb/upb/reflection.h +2 -112
  704. data/third_party/upb/upb/status.c +86 -0
  705. data/third_party/upb/upb/status.h +66 -0
  706. data/third_party/upb/upb/table.c +2 -2
  707. data/third_party/upb/upb/table_internal.h +3 -352
  708. data/third_party/upb/upb/text_encode.c +3 -2
  709. data/third_party/upb/upb/upb.c +4 -290
  710. data/third_party/upb/upb/upb.h +7 -196
  711. metadata +89 -38
  712. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  713. data/src/core/lib/iomgr/error_internal.h +0 -66
  714. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  715. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  716. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  717. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  718. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  719. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  720. data/src/core/lib/promise/detail/switch.h +0 -1455
  721. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
@@ -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);
@@ -764,10 +737,14 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
764
737
  // Hop back into the work_serializer to clean up.
765
738
  // Not needed in state SHUTDOWN, because the tracker will
766
739
  // automatically remove all watchers in that case.
740
+ // Note: The callback takes a ref in case the ref inside the state tracker
741
+ // gets removed before the callback runs via a SHUTDOWN notification.
767
742
  if (state != GRPC_CHANNEL_SHUTDOWN) {
743
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
768
744
  chand_->work_serializer_->Run(
769
745
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
770
746
  RemoveWatcherLocked();
747
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
771
748
  },
772
749
  DEBUG_LOCATION);
773
750
  }
@@ -781,9 +758,13 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
781
758
  }
782
759
  ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
783
760
  // Hop back into the work_serializer to clean up.
761
+ // Note: The callback takes a ref in case the ref inside the state tracker
762
+ // gets removed before the callback runs via a SHUTDOWN notification.
763
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
784
764
  chand_->work_serializer_->Run(
785
765
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
786
766
  RemoveWatcherLocked();
767
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
787
768
  },
788
769
  DEBUG_LOCATION);
789
770
  }
@@ -879,67 +860,23 @@ class ClientChannel::ClientChannelControlHelper
879
860
  }
880
861
 
881
862
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
882
- ServerAddress address, const grpc_channel_args& args) override
863
+ ServerAddress address, const ChannelArgs& args) override
883
864
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
884
865
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
885
866
  // Determine health check service name.
886
867
  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
- }
868
+ if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
869
+ health_check_service_name =
870
+ args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
895
871
  }
896
872
  // 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());
873
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
874
+ args, address.args(), chand_->subchannel_pool_,
875
+ chand_->default_authority_);
938
876
  // Create subchannel.
939
877
  RefCountedPtr<Subchannel> subchannel =
940
878
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
941
- new_args);
942
- grpc_channel_args_destroy(new_args);
879
+ subchannel_args);
943
880
  if (subchannel == nullptr) return nullptr;
944
881
  // Make sure the subchannel has updated keepalive time.
945
882
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -1030,36 +967,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1030
967
  namespace {
1031
968
 
1032
969
  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) {
970
+ const ChannelArgs& args) {
971
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1037
972
  return MakeRefCounted<LocalSubchannelPool>();
1038
973
  }
1039
974
  return GlobalSubchannelPool::instance();
1040
975
  }
1041
976
 
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
977
  } // namespace
1048
978
 
1049
979
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1050
980
  grpc_error_handle* error)
1051
- : deadline_checking_enabled_(
1052
- grpc_deadline_checking_enabled(args->channel_args)),
981
+ : channel_args_(ChannelArgs::FromC(args->channel_args)),
982
+ deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
1053
983
  owning_stack_(args->channel_stack),
1054
- client_channel_factory_(
1055
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1056
- channelz_node_(GetChannelzNode(args->channel_args)),
984
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
985
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1057
986
  interested_parties_(grpc_pollset_set_create()),
1058
987
  service_config_parser_index_(
1059
988
  internal::ClientChannelServiceConfigParser::ParserIndex()),
1060
989
  work_serializer_(std::make_shared<WorkSerializer>()),
1061
990
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1062
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
991
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
1063
992
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1064
993
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1065
994
  this, owning_stack_);
@@ -1074,34 +1003,28 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1074
1003
  }
1075
1004
  // Get default service config. If none is specified via the client API,
1076
1005
  // 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 = "{}";
1006
+ absl::optional<absl::string_view> service_config_json =
1007
+ channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
1008
+ if (!service_config_json.has_value()) service_config_json = "{}";
1080
1009
  *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();
1010
+ auto service_config =
1011
+ ServiceConfigImpl::Create(channel_args_, *service_config_json);
1012
+ if (!service_config.ok()) {
1013
+ *error = absl_status_to_grpc_error(service_config.status());
1085
1014
  return;
1086
1015
  }
1016
+ default_service_config_ = std::move(*service_config);
1087
1017
  // 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) {
1018
+ absl::optional<std::string> server_uri =
1019
+ channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
1020
+ if (!server_uri.has_value()) {
1091
1021
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1092
1022
  "target URI channel arg missing or wrong type in client channel "
1093
1023
  "filter");
1094
1024
  return;
1095
1025
  }
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
- }
1026
+ uri_to_resolve_ = ProxyMapperRegistry::MapName(*server_uri, &channel_args_)
1027
+ .value_or(*server_uri);
1105
1028
  // Make sure the URI to resolve is valid, so that we know that
1106
1029
  // resolver creation will succeed later.
1107
1030
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
@@ -1112,23 +1035,23 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1112
1035
  }
1113
1036
  // Strip out service config channel arg, so that it doesn't affect
1114
1037
  // 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);
1038
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1119
1039
  // 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});
1040
+ auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
1041
+ if (keepalive_arg.has_value()) {
1042
+ keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
1043
+ } else {
1044
+ keepalive_time_ = -1; // unset
1045
+ }
1123
1046
  // 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) {
1047
+ absl::optional<std::string> default_authority =
1048
+ channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
1049
+ if (!default_authority.has_value()) {
1127
1050
  default_authority_ =
1128
1051
  CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1129
- server_uri);
1052
+ *server_uri);
1130
1053
  } else {
1131
- default_authority_ = default_authority;
1054
+ default_authority_ = std::move(*default_authority);
1132
1055
  }
1133
1056
  // Success.
1134
1057
  *error = GRPC_ERROR_NONE;
@@ -1139,7 +1062,6 @@ ClientChannel::~ClientChannel() {
1139
1062
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1140
1063
  }
1141
1064
  DestroyResolverAndLbPolicyLocked();
1142
- grpc_channel_args_destroy(channel_args_);
1143
1065
  // Stop backup polling.
1144
1066
  grpc_client_channel_stop_backup_polling(interested_parties_);
1145
1067
  grpc_pollset_set_destroy(interested_parties_);
@@ -1157,6 +1079,29 @@ ClientChannel::CreateLoadBalancedCall(
1157
1079
  call_dispatch_controller, is_transparent_retry));
1158
1080
  }
1159
1081
 
1082
+ ChannelArgs ClientChannel::MakeSubchannelArgs(
1083
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
1084
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1085
+ const std::string& channel_default_authority) {
1086
+ // Note that we start with the channel-level args and then apply the
1087
+ // per-address args, so that if a value is present in both, the one
1088
+ // in the channel-level args is used. This is particularly important
1089
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1090
+ // resolvers to set on a per-address basis only if the application
1091
+ // did not explicitly set it at the channel level.
1092
+ return channel_args.UnionWith(address_args)
1093
+ .SetObject(subchannel_pool)
1094
+ // If we haven't already set the default authority arg (i.e., it
1095
+ // was not explicitly set by the application nor overridden by
1096
+ // the resolver), add it from the channel's default.
1097
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1098
+ // Remove channel args that should not affect subchannel
1099
+ // uniqueness.
1100
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1101
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1102
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1103
+ }
1104
+
1160
1105
  namespace {
1161
1106
 
1162
1107
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1168,41 +1113,39 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1168
1113
  }
1169
1114
  // Try the deprecated LB policy name from the service config.
1170
1115
  // If not, try the setting from channel args.
1171
- const char* policy_name = nullptr;
1116
+ absl::optional<absl::string_view> policy_name;
1172
1117
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1173
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1118
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1174
1119
  } else {
1175
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1176
- GRPC_ARG_LB_POLICY_NAME);
1120
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1177
1121
  bool requires_config = false;
1178
- if (policy_name != nullptr &&
1122
+ if (policy_name.has_value() &&
1179
1123
  (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1180
- policy_name, &requires_config) ||
1124
+ *policy_name, &requires_config) ||
1181
1125
  requires_config)) {
1182
1126
  if (requires_config) {
1183
1127
  gpr_log(GPR_ERROR,
1184
1128
  "LB policy: %s passed through channel_args must not "
1185
1129
  "require a config. Using pick_first instead.",
1186
- policy_name);
1130
+ std::string(*policy_name).c_str());
1187
1131
  } else {
1188
1132
  gpr_log(GPR_ERROR,
1189
1133
  "LB policy: %s passed through channel_args does not exist. "
1190
1134
  "Using pick_first instead.",
1191
- policy_name);
1135
+ std::string(*policy_name).c_str());
1192
1136
  }
1193
1137
  policy_name = "pick_first";
1194
1138
  }
1195
1139
  }
1196
1140
  // Use pick_first if nothing was specified and we didn't select grpclb
1197
1141
  // above.
1198
- if (policy_name == nullptr) policy_name = "pick_first";
1142
+ if (!policy_name.has_value()) policy_name = "pick_first";
1199
1143
  // Now that we have the policy name, construct an empty config for it.
1200
1144
  Json config_json = Json::Array{Json::Object{
1201
- {policy_name, Json::Object{}},
1145
+ {std::string(*policy_name), Json::Object{}},
1202
1146
  }};
1203
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1204
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1205
- config_json, &parse_error);
1147
+ auto lb_policy_config =
1148
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json);
1206
1149
  // The policy name came from one of three places:
1207
1150
  // - The deprecated loadBalancingPolicy field in the service config,
1208
1151
  // in which case the code in ClientChannelServiceConfigParser
@@ -1212,9 +1155,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1212
1155
  // - A channel arg, in which case we check that the specified policy exists
1213
1156
  // and accepts an empty config. If not, we revert to using pick_first
1214
1157
  // lb_policy
1215
- GPR_ASSERT(lb_policy_config != nullptr);
1216
- GPR_ASSERT(GRPC_ERROR_IS_NONE(parse_error));
1217
- return lb_policy_config;
1158
+ GPR_ASSERT(lb_policy_config.ok());
1159
+ return std::move(*lb_policy_config);
1218
1160
  }
1219
1161
 
1220
1162
  } // namespace
@@ -1289,7 +1231,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1289
1231
  } else {
1290
1232
  // Use ServiceConfig and ConfigSelector returned by resolver.
1291
1233
  service_config = std::move(*result.service_config);
1292
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1234
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1293
1235
  }
1294
1236
  // Note: The only case in which service_config is null here is if the resolver
1295
1237
  // returned a service config error and we don't have a previous service
@@ -1313,9 +1255,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1313
1255
  // If either has changed, apply the global parameters now.
1314
1256
  if (service_config_changed || config_selector_changed) {
1315
1257
  // Update service config in control plane.
1316
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1317
- std::move(config_selector),
1318
- lb_policy_config->name());
1258
+ UpdateServiceConfigInControlPlaneLocked(
1259
+ std::move(service_config), std::move(config_selector),
1260
+ std::string(lb_policy_config->name()));
1319
1261
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1320
1262
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1321
1263
  }
@@ -1388,22 +1330,18 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1388
1330
  update_args.addresses = std::move(result.addresses);
1389
1331
  update_args.config = std::move(lb_policy_config);
1390
1332
  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
1333
  // Remove the config selector from channel args so that we're not holding
1399
1334
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1400
1335
  // 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());
1336
+ update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
1337
+ // Add health check service name to channel args.
1338
+ if (health_check_service_name.has_value()) {
1339
+ update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
1340
+ *health_check_service_name);
1341
+ }
1404
1342
  // Create policy if needed.
1405
1343
  if (lb_policy_ == nullptr) {
1406
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1344
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1407
1345
  }
1408
1346
  // Update the policy.
1409
1347
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
@@ -1415,12 +1353,12 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1415
1353
 
1416
1354
  // Creates a new LB policy.
1417
1355
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1418
- const grpc_channel_args& args) {
1356
+ const ChannelArgs& args) {
1419
1357
  LoadBalancingPolicy::Args lb_policy_args;
1420
1358
  lb_policy_args.work_serializer = work_serializer_;
1421
1359
  lb_policy_args.channel_control_helper =
1422
1360
  absl::make_unique<ClientChannelControlHelper>(this);
1423
- lb_policy_args.args = &args;
1361
+ lb_policy_args.args = args;
1424
1362
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1425
1363
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1426
1364
  &grpc_client_channel_trace);
@@ -1495,20 +1433,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1495
1433
  config_selector =
1496
1434
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1497
1435
  }
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);
1436
+ ChannelArgs new_args = config_selector->ModifyChannelArgs(
1437
+ channel_args_.SetObject(this).SetObject(service_config));
1509
1438
  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);
1439
+ !new_args.WantMinimalStack() &&
1440
+ new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1512
1441
  // Construct dynamic filter stack.
1513
1442
  std::vector<const grpc_channel_filter*> filters =
1514
1443
  config_selector->GetFilters();
@@ -1518,9 +1447,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1518
1447
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1519
1448
  }
1520
1449
  RefCountedPtr<DynamicFilters> dynamic_filters =
1521
- DynamicFilters::Create(new_args, std::move(filters));
1450
+ DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1522
1451
  GPR_ASSERT(dynamic_filters != nullptr);
1523
- grpc_channel_args_destroy(new_args);
1524
1452
  // Grab data plane lock to update service config.
1525
1453
  //
1526
1454
  // We defer unreffing the old values (and deallocating memory) until
@@ -1706,6 +1634,10 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1706
1634
  complete_pick->subchannel.get());
1707
1635
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1708
1636
  subchannel->connected_subchannel();
1637
+ if (connected_subchannel == nullptr) {
1638
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1639
+ "LB pick for ping not connected");
1640
+ }
1709
1641
  connected_subchannel->Ping(op->send_ping.on_initiate,
1710
1642
  op->send_ping.on_ack);
1711
1643
  return GRPC_ERROR_NONE;
@@ -2240,7 +2172,9 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2240
2172
  // Use the ConfigSelector to determine the config for the call.
2241
2173
  ConfigSelector::CallConfig call_config =
2242
2174
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2243
- if (!GRPC_ERROR_IS_NONE(call_config.error)) return call_config.error;
2175
+ if (!call_config.status.ok()) {
2176
+ return absl_status_to_grpc_error(call_config.status);
2177
+ }
2244
2178
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2245
2179
  // a ref to the ServiceConfig and caches the right set of parsed configs
2246
2180
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2270,17 +2204,13 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2270
2204
  }
2271
2205
  // If the service config set wait_for_ready and the application
2272
2206
  // 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;
2207
+ auto* wait_for_ready =
2208
+ pending_batches_[0]
2209
+ ->payload->send_initial_metadata.send_initial_metadata
2210
+ ->GetOrCreatePointer(WaitForReady());
2276
2211
  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
- }
2212
+ !wait_for_ready->explicitly_set) {
2213
+ wait_for_ready->value = method_params->wait_for_ready().value();
2284
2214
  }
2285
2215
  }
2286
2216
  // Set the dynamic filter stack.
@@ -2388,16 +2318,14 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2388
2318
  pending_batches_[0]->payload->send_initial_metadata;
2389
2319
  grpc_metadata_batch* initial_metadata_batch =
2390
2320
  send_initial_metadata.send_initial_metadata;
2391
- const uint32_t send_initial_metadata_flags =
2392
- send_initial_metadata.send_initial_metadata_flags;
2393
2321
  // If we don't yet have a resolver result, we need to queue the call
2394
2322
  // until we get one.
2395
2323
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2396
2324
  // If the resolver returned transient failure before returning the
2397
2325
  // first service config, fail any non-wait_for_ready calls.
2398
2326
  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) {
2327
+ if (!resolver_error.ok() &&
2328
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2401
2329
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2402
2330
  gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2403
2331
  chand, this);
@@ -2795,8 +2723,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2795
2723
  }
2796
2724
  if (batch->send_initial_metadata) {
2797
2725
  call_attempt_tracer_->RecordSendInitialMetadata(
2798
- batch->payload->send_initial_metadata.send_initial_metadata,
2799
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2726
+ batch->payload->send_initial_metadata.send_initial_metadata);
2800
2727
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2801
2728
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2802
2729
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -3171,8 +3098,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3171
3098
  pending_batches_[0]->payload->send_initial_metadata;
3172
3099
  grpc_metadata_batch* initial_metadata_batch =
3173
3100
  send_initial_metadata.send_initial_metadata;
3174
- const uint32_t send_initial_metadata_flags =
3175
- send_initial_metadata.send_initial_metadata_flags;
3176
3101
  // Perform LB pick.
3177
3102
  LoadBalancingPolicy::PickArgs pick_args;
3178
3103
  pick_args.path = path_.as_string_view();
@@ -3230,7 +3155,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3230
3155
  return false;
3231
3156
  },
3232
3157
  // FailPick
3233
- [this, send_initial_metadata_flags,
3158
+ [this, initial_metadata_batch,
3234
3159
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3235
3160
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3236
3161
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -3239,8 +3164,8 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3239
3164
  }
3240
3165
  // If wait_for_ready is false, then the error indicates the RPC
3241
3166
  // attempt's final status.
3242
- if ((send_initial_metadata_flags &
3243
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3167
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3168
+ ->value) {
3244
3169
  grpc_error_handle lb_error =
3245
3170
  absl_status_to_grpc_error(fail_pick->status);
3246
3171
  *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(