grpc 1.47.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 (1053) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +183 -62
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +37 -25
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +5 -9
  11. data/include/grpc/impl/codegen/port_platform.h +2 -7
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +20 -8
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -2
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +164 -261
  19. data/src/core/ext/filters/client_channel/client_channel.h +34 -12
  20. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  21. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +13 -5
  24. data/src/core/ext/filters/client_channel/connector.h +5 -6
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  28. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +170 -164
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +13 -4
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +200 -96
  42. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +121 -131
  44. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +153 -116
  45. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +220 -181
  46. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  47. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +110 -119
  48. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +133 -117
  49. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +97 -87
  50. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +114 -131
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +84 -102
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +64 -76
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +172 -103
  55. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  56. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +18 -16
  57. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  58. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +7 -9
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +434 -148
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +179 -103
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -18
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +16 -18
  67. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +4 -5
  68. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +181 -175
  71. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +39 -32
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  74. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -43
  75. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  77. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +7 -7
  79. data/src/core/ext/filters/client_channel/subchannel.cc +101 -138
  80. data/src/core/ext/filters/client_channel/subchannel.h +14 -30
  81. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  82. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  83. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  84. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +15 -101
  85. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  86. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -13
  87. data/src/core/ext/filters/deadline/deadline_filter.h +8 -2
  88. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -3
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -4
  90. data/src/core/ext/filters/fault_injection/service_config_parser.cc +19 -11
  91. data/src/core/ext/filters/fault_injection/service_config_parser.h +19 -6
  92. data/src/core/ext/filters/http/client/http_client_filter.cc +17 -7
  93. data/src/core/ext/filters/http/client/http_client_filter.h +9 -2
  94. data/src/core/ext/filters/http/client_authority_filter.cc +11 -11
  95. data/src/core/ext/filters/http/client_authority_filter.h +6 -3
  96. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  97. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  98. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  99. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  100. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  101. data/src/core/ext/filters/http/server/http_server_filter.cc +17 -11
  102. data/src/core/ext/filters/http/server/http_server_filter.h +7 -2
  103. data/src/core/ext/filters/message_size/message_size_filter.cc +37 -21
  104. data/src/core/ext/filters/message_size/message_size_filter.h +13 -3
  105. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  106. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  107. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +25 -10
  108. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +15 -5
  109. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  110. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -0
  111. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +23 -5
  112. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  113. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +39 -66
  114. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +77 -104
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  116. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +320 -635
  117. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.cc +207 -262
  119. data/src/core/ext/transport/chttp2/transport/flow_control.h +177 -289
  120. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  121. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  124. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  126. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -16
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +11 -112
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  135. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  136. data/src/core/ext/transport/inproc/inproc_transport.cc +124 -154
  137. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  138. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  139. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  141. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  144. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  145. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  146. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  147. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  148. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  149. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  150. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  151. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  152. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  153. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  154. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  156. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  157. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  158. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  159. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  160. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  161. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  162. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  163. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  164. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  165. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  166. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  167. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  168. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  170. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  171. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  172. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  173. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  221. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  224. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  228. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  234. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  235. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  236. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  249. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  250. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  251. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  252. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  253. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  254. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  255. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  271. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  280. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  281. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  282. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  286. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  287. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  288. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  289. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  294. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  313. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  314. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  315. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  316. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  317. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  318. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  319. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  322. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  324. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  327. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  328. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  329. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  332. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  333. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  334. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  335. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  336. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  337. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  338. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  340. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  341. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  342. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  343. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  344. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  346. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  347. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  348. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  350. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  351. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  352. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  353. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  354. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  355. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  359. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  360. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  361. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  362. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  363. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  364. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  365. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  366. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  367. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  368. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  369. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  370. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  371. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  372. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  373. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  375. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  376. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  377. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  379. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  381. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  382. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  384. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  386. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  388. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  389. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  390. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  391. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  392. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  393. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  394. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  395. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  396. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  397. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  398. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  400. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  401. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  402. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  403. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  404. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  405. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  406. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  409. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  410. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  411. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  412. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  413. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  414. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  415. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  416. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  417. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  418. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  422. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  423. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  425. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  426. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  428. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  429. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  430. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  432. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  439. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  440. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  441. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  442. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  443. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  445. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  446. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  447. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  448. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  449. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  450. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  451. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  452. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  453. data/src/core/ext/xds/upb_utils.h +0 -22
  454. data/src/core/ext/xds/xds_api.cc +68 -103
  455. data/src/core/ext/xds/xds_api.h +30 -32
  456. data/src/core/ext/xds/xds_bootstrap.cc +69 -69
  457. data/src/core/ext/xds/xds_bootstrap.h +37 -19
  458. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  459. data/src/core/ext/xds/xds_certificate_provider.h +25 -1
  460. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -4
  461. data/src/core/ext/xds/xds_channel_stack_modifier.h +13 -1
  462. data/src/core/ext/xds/xds_client.cc +583 -1193
  463. data/src/core/ext/xds/xds_client.h +28 -42
  464. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  465. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  466. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  467. data/src/core/ext/xds/xds_client_stats.h +4 -3
  468. data/src/core/ext/xds/xds_cluster.cc +107 -107
  469. data/src/core/ext/xds/xds_cluster.h +14 -5
  470. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +23 -18
  471. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -8
  472. data/src/core/ext/xds/xds_common_types.cc +161 -123
  473. data/src/core/ext/xds/xds_common_types.h +16 -9
  474. data/src/core/ext/xds/xds_endpoint.cc +95 -85
  475. data/src/core/ext/xds/xds_endpoint.h +16 -8
  476. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -16
  477. data/src/core/ext/xds/xds_http_fault_filter.h +5 -3
  478. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  479. data/src/core/ext/xds/xds_http_filters.h +5 -5
  480. data/src/core/ext/xds/xds_http_rbac_filter.cc +52 -55
  481. data/src/core/ext/xds/xds_http_rbac_filter.h +8 -1
  482. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  483. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  484. data/src/core/ext/xds/xds_listener.cc +355 -307
  485. data/src/core/ext/xds/xds_listener.h +13 -4
  486. data/src/core/ext/xds/xds_resource_type.h +16 -5
  487. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  488. data/src/core/ext/xds/xds_route_config.cc +215 -184
  489. data/src/core/ext/xds/xds_route_config.h +39 -16
  490. data/src/core/ext/xds/xds_routing.cc +19 -6
  491. data/src/core/ext/xds/xds_routing.h +12 -9
  492. data/src/core/ext/xds/xds_server_config_fetcher.cc +124 -81
  493. data/src/core/ext/xds/xds_transport.h +86 -0
  494. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  495. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  496. data/src/core/lib/address_utils/parse_address.cc +24 -25
  497. data/src/core/lib/address_utils/parse_address.h +11 -7
  498. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  499. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  500. data/src/core/lib/avl/avl.h +47 -25
  501. data/src/core/lib/backoff/backoff.cc +1 -1
  502. data/src/core/lib/backoff/backoff.h +1 -1
  503. data/src/core/lib/channel/call_tracer.h +4 -4
  504. data/src/core/lib/channel/channel_args.cc +88 -19
  505. data/src/core/lib/channel/channel_args.h +114 -62
  506. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  507. data/src/core/lib/channel/channel_fwd.h +26 -0
  508. data/src/core/lib/channel/channel_stack.cc +4 -5
  509. data/src/core/lib/channel/channel_stack.h +1 -11
  510. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  511. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  512. data/src/core/lib/channel/channel_stack_builder_impl.cc +3 -5
  513. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  514. data/src/core/lib/channel/channelz.cc +28 -37
  515. data/src/core/lib/channel/channelz.h +11 -3
  516. data/src/core/lib/channel/channelz_registry.cc +4 -5
  517. data/src/core/lib/channel/connected_channel.cc +1 -0
  518. data/src/core/lib/channel/connected_channel.h +1 -0
  519. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  520. data/src/core/lib/channel/promise_based_filter.h +2 -1
  521. data/src/core/lib/compression/compression.cc +6 -1
  522. data/src/core/lib/compression/compression_internal.cc +3 -6
  523. data/src/core/lib/compression/compression_internal.h +3 -2
  524. data/src/core/lib/compression/message_compress.cc +3 -1
  525. data/src/core/lib/compression/message_compress.h +2 -3
  526. data/src/core/lib/config/core_configuration.h +48 -35
  527. data/src/core/lib/debug/stats.cc +15 -18
  528. data/src/core/lib/debug/stats.h +13 -4
  529. data/src/core/lib/debug/stats_data.cc +2 -1
  530. data/src/core/lib/debug/stats_data.h +0 -4
  531. data/src/core/lib/debug/trace.h +13 -12
  532. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  533. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +6 -10
  534. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  535. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  536. data/src/core/lib/event_engine/executor/executor.h +38 -0
  537. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  538. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  539. data/src/core/lib/event_engine/forkable.cc +98 -0
  540. data/src/core/lib/event_engine/forkable.h +61 -0
  541. data/src/core/lib/event_engine/poller.h +54 -0
  542. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  543. data/src/core/lib/event_engine/{iomgr_engine.h → posix_engine/posix_engine.h} +35 -32
  544. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  545. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  546. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  547. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  548. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  549. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  550. data/src/core/lib/event_engine/promise.h +78 -0
  551. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  552. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  553. data/src/core/lib/event_engine/thread_pool.h +81 -0
  554. data/src/core/lib/event_engine/utils.cc +49 -0
  555. data/src/core/lib/event_engine/utils.h +40 -0
  556. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  557. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  558. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  559. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  560. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  561. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  562. data/src/core/lib/gpr/time.cc +11 -9
  563. data/src/core/lib/gpr/time_posix.cc +6 -9
  564. data/src/core/lib/gpr/time_windows.cc +10 -7
  565. data/src/core/lib/gpr/useful.h +29 -0
  566. data/src/core/lib/gprpp/bitset.h +3 -13
  567. data/src/core/lib/gprpp/debug_location.h +39 -7
  568. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  569. data/src/core/lib/gprpp/no_destruct.h +94 -0
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  571. data/src/core/lib/gprpp/status_helper.cc +45 -30
  572. data/src/core/lib/gprpp/table.h +0 -1
  573. data/src/core/lib/gprpp/time.cc +8 -0
  574. data/src/core/lib/gprpp/time.h +4 -0
  575. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  576. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  577. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  578. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  579. data/src/core/lib/http/format_request.cc +5 -4
  580. data/src/core/lib/http/format_request.h +1 -1
  581. data/src/core/lib/http/httpcli.cc +29 -35
  582. data/src/core/lib/http/httpcli.h +19 -3
  583. data/src/core/lib/http/httpcli_security_connector.cc +26 -14
  584. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  585. data/src/core/lib/http/parser.cc +6 -7
  586. data/src/core/lib/http/parser.h +3 -0
  587. data/src/core/lib/iomgr/call_combiner.cc +2 -28
  588. data/src/core/lib/iomgr/closure.h +0 -9
  589. data/src/core/lib/iomgr/combiner.cc +0 -20
  590. data/src/core/lib/iomgr/endpoint.h +1 -1
  591. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  592. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  593. data/src/core/lib/iomgr/error.cc +6 -777
  594. data/src/core/lib/iomgr/error.h +6 -147
  595. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  596. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  597. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  598. data/src/core/lib/iomgr/ev_poll_posix.cc +94 -61
  599. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  600. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  601. data/src/core/lib/iomgr/ev_posix.h +5 -3
  602. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  603. data/src/core/lib/iomgr/executor.cc +0 -10
  604. data/src/core/lib/iomgr/executor.h +0 -3
  605. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  606. data/src/core/lib/iomgr/iomgr.cc +7 -0
  607. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  608. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  609. data/src/core/lib/iomgr/load_file.cc +1 -1
  610. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  611. data/src/core/lib/iomgr/port.h +3 -0
  612. data/src/core/lib/iomgr/resolve_address.h +29 -6
  613. data/src/core/lib/iomgr/resolve_address_posix.cc +39 -9
  614. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  615. data/src/core/lib/iomgr/resolve_address_windows.cc +41 -11
  616. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  617. data/src/core/lib/iomgr/socket_windows.h +0 -2
  618. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  619. data/src/core/lib/iomgr/tcp_client.h +24 -13
  620. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  621. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  622. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  623. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  624. data/src/core/lib/iomgr/tcp_posix.cc +207 -33
  625. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  626. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  627. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  628. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  629. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  630. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  631. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  632. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  633. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  634. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  635. data/src/core/lib/json/json.h +19 -22
  636. data/src/core/lib/json/json_args.h +34 -0
  637. data/src/core/lib/json/json_object_loader.cc +233 -0
  638. data/src/core/lib/json/json_object_loader.h +618 -0
  639. data/src/core/lib/json/json_reader.cc +86 -62
  640. data/src/core/lib/json/json_util.cc +8 -36
  641. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  642. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -31
  643. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  644. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +48 -73
  645. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  646. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +16 -24
  647. data/src/core/lib/matchers/matchers.cc +6 -3
  648. data/src/core/lib/matchers/matchers.h +2 -0
  649. data/src/core/lib/promise/activity.cc +0 -1
  650. data/src/core/lib/promise/activity.h +56 -14
  651. data/src/core/lib/promise/arena_promise.h +84 -81
  652. data/src/core/lib/promise/context.h +0 -1
  653. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  654. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  655. data/src/core/lib/promise/loop.h +1 -0
  656. data/src/core/lib/promise/map.h +0 -1
  657. data/src/core/lib/promise/promise.h +1 -0
  658. data/src/core/lib/promise/seq.h +25 -4
  659. data/src/core/lib/promise/sleep.cc +43 -42
  660. data/src/core/lib/promise/sleep.h +31 -28
  661. data/src/core/lib/promise/try_seq.h +26 -6
  662. data/src/core/lib/resolver/resolver.cc +0 -42
  663. data/src/core/lib/resolver/resolver.h +5 -12
  664. data/src/core/lib/resolver/resolver_factory.h +6 -4
  665. data/src/core/lib/resolver/resolver_registry.cc +3 -10
  666. data/src/core/lib/resolver/resolver_registry.h +12 -2
  667. data/src/core/lib/resolver/server_address.cc +19 -15
  668. data/src/core/lib/resolver/server_address.h +11 -8
  669. data/src/core/lib/resource_quota/api.cc +1 -1
  670. data/src/core/lib/resource_quota/arena.cc +21 -1
  671. data/src/core/lib/resource_quota/arena.h +24 -2
  672. data/src/core/lib/resource_quota/memory_quota.cc +171 -73
  673. data/src/core/lib/resource_quota/memory_quota.h +109 -42
  674. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  675. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  676. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  677. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  678. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  679. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  680. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  681. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  682. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -1
  683. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +13 -2
  684. data/src/core/lib/security/authorization/matchers.cc +20 -9
  685. data/src/core/lib/security/authorization/matchers.h +7 -0
  686. data/src/core/lib/security/authorization/rbac_policy.cc +4 -0
  687. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  688. data/src/core/lib/security/context/security_context.cc +5 -2
  689. data/src/core/lib/security/context/security_context.h +14 -2
  690. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  691. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -4
  692. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  693. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  694. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  695. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  696. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  697. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  698. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -9
  699. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -5
  700. data/src/core/lib/security/credentials/credentials.cc +4 -8
  701. data/src/core/lib/security/credentials/credentials.h +26 -20
  702. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +45 -20
  703. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  704. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  705. data/src/core/lib/security/credentials/external/external_account_credentials.cc +53 -29
  706. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  707. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -8
  708. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  709. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +23 -9
  710. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  711. data/src/core/lib/security/credentials/fake/fake_credentials.cc +10 -17
  712. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  713. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  714. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -35
  715. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -3
  716. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -3
  717. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  718. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  719. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +7 -3
  720. data/src/core/lib/security/credentials/jwt/json_token.cc +17 -5
  721. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  722. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +12 -10
  723. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  724. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +37 -14
  725. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  726. data/src/core/lib/security/credentials/local/local_credentials.cc +7 -7
  727. data/src/core/lib/security/credentials/local/local_credentials.h +9 -3
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +41 -29
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +7 -7
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +18 -21
  733. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -3
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  737. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -4
  738. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  739. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  740. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  741. data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -26
  742. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -4
  743. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  744. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  745. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -31
  746. data/src/core/lib/security/credentials/xds/xds_credentials.h +16 -2
  747. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +30 -18
  748. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  749. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +42 -38
  750. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  751. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +13 -4
  752. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -5
  753. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  754. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  755. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  756. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -13
  757. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  758. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  759. data/src/core/lib/security/security_connector/security_connector.h +23 -9
  760. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +21 -8
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  762. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  763. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  764. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  765. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +25 -17
  766. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -7
  767. data/src/core/lib/security/transport/auth_filters.h +8 -1
  768. data/src/core/lib/security/transport/client_auth_filter.cc +19 -11
  769. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  770. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  771. data/src/core/lib/security/transport/security_handshaker.cc +70 -49
  772. data/src/core/lib/security/transport/security_handshaker.h +6 -1
  773. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  774. data/src/core/lib/security/util/json_util.cc +3 -2
  775. data/src/core/lib/security/util/json_util.h +0 -2
  776. data/src/core/lib/service_config/service_config.h +11 -0
  777. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  778. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  779. data/src/core/lib/service_config/service_config_impl.h +12 -16
  780. data/src/core/lib/service_config/service_config_parser.cc +26 -29
  781. data/src/core/lib/service_config/service_config_parser.h +10 -22
  782. data/src/core/lib/slice/percent_encoding.cc +4 -13
  783. data/src/core/lib/slice/slice.cc +10 -4
  784. data/src/core/lib/slice/slice_buffer.cc +30 -1
  785. data/src/core/lib/slice/slice_buffer.h +37 -6
  786. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  787. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  788. data/src/core/lib/surface/call.cc +61 -117
  789. data/src/core/lib/surface/call.h +5 -1
  790. data/src/core/lib/surface/channel.cc +6 -6
  791. data/src/core/lib/surface/channel.h +3 -1
  792. data/src/core/lib/surface/channel_ping.cc +1 -1
  793. data/src/core/lib/surface/completion_queue.cc +15 -16
  794. data/src/core/lib/surface/completion_queue.h +2 -4
  795. data/src/core/lib/surface/init.cc +2 -7
  796. data/src/core/lib/surface/lame_client.cc +3 -4
  797. data/src/core/lib/surface/lame_client.h +2 -2
  798. data/src/core/lib/surface/server.cc +21 -20
  799. data/src/core/lib/surface/server.h +11 -8
  800. data/src/core/lib/surface/validate_metadata.cc +5 -15
  801. data/src/core/lib/surface/version.cc +2 -2
  802. data/src/core/lib/transport/connectivity_state.cc +0 -1
  803. data/src/core/lib/transport/connectivity_state.h +1 -1
  804. data/src/core/lib/transport/error_utils.cc +9 -39
  805. data/src/core/lib/transport/handshaker.cc +10 -12
  806. data/src/core/lib/transport/handshaker.h +4 -5
  807. data/src/core/lib/transport/handshaker_factory.h +2 -3
  808. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  809. data/src/core/lib/transport/handshaker_registry.h +2 -4
  810. data/src/core/lib/transport/http_connect_handshaker.cc +20 -20
  811. data/src/core/lib/transport/metadata_batch.cc +5 -0
  812. data/src/core/lib/transport/metadata_batch.h +52 -7
  813. data/src/core/lib/transport/parsed_metadata.h +0 -1
  814. data/src/core/lib/transport/tcp_connect_handshaker.cc +14 -20
  815. data/src/core/lib/transport/transport.cc +0 -3
  816. data/src/core/lib/transport/transport.h +20 -21
  817. data/src/core/lib/transport/transport_fwd.h +20 -0
  818. data/src/core/lib/transport/transport_impl.h +1 -0
  819. data/src/core/lib/transport/transport_op_string.cc +9 -9
  820. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  821. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  822. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +15 -8
  823. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  825. data/src/core/tsi/fake_transport_security.cc +66 -31
  826. data/src/core/tsi/fake_transport_security.h +6 -0
  827. data/src/core/tsi/local_transport_security.cc +9 -5
  828. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  829. data/src/core/tsi/ssl_transport_security.cc +48 -24
  830. data/src/core/tsi/transport_security.cc +18 -6
  831. data/src/core/tsi/transport_security.h +2 -1
  832. data/src/core/tsi/transport_security_grpc.cc +3 -2
  833. data/src/core/tsi/transport_security_grpc.h +5 -2
  834. data/src/core/tsi/transport_security_interface.h +17 -5
  835. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  836. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  837. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  838. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  839. data/src/ruby/ext/grpc/extconf.rb +51 -18
  840. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  841. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  842. data/src/ruby/lib/grpc/errors.rb +1 -1
  843. data/src/ruby/lib/grpc/version.rb +1 -1
  844. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  845. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  846. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  847. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  848. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  849. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  850. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  851. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  852. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  853. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  854. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  855. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  856. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  857. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  858. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  859. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  860. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  861. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  862. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  863. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  864. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  865. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  866. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  867. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  868. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  869. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  870. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  871. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  872. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  873. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  874. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  875. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  876. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  877. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  878. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  879. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  880. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  881. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  882. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  883. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  884. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  885. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  886. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  887. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  888. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  889. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  890. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  891. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  892. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  893. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  894. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  895. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  896. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  897. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  898. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  899. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  900. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  901. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  902. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  903. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  904. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  905. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  906. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  907. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  908. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  909. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  910. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  911. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  912. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  913. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  914. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  915. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  916. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  917. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  918. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  919. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  920. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  921. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  922. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  923. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  924. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  925. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  926. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  927. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  928. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  929. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  930. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  931. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  932. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  933. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  934. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  935. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  936. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  937. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  938. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  939. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  940. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  951. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  952. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  953. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  954. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  955. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  956. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  957. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  958. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  959. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  960. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  961. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  962. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  963. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  964. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  965. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  966. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  967. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  968. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  969. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  970. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  971. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  972. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  973. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  974. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  975. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  976. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  977. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  978. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  979. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  980. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  981. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  982. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  983. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  984. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  985. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  987. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  988. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  989. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  990. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  991. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  992. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  993. data/third_party/upb/upb/arena.c +277 -0
  994. data/third_party/upb/upb/arena.h +225 -0
  995. data/third_party/upb/upb/array.c +114 -0
  996. data/third_party/upb/upb/array.h +83 -0
  997. data/third_party/upb/upb/collections.h +36 -0
  998. data/third_party/upb/upb/decode.c +161 -65
  999. data/third_party/upb/upb/decode.h +1 -0
  1000. data/third_party/upb/upb/decode_fast.c +1 -1
  1001. data/third_party/upb/upb/def.c +10 -2
  1002. data/third_party/upb/upb/def.h +8 -1
  1003. data/third_party/upb/upb/def.hpp +7 -4
  1004. data/third_party/upb/upb/encode.c +29 -20
  1005. data/third_party/upb/upb/encode.h +16 -6
  1006. data/third_party/upb/upb/extension_registry.c +93 -0
  1007. data/third_party/upb/upb/extension_registry.h +84 -0
  1008. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1009. data/third_party/upb/upb/internal/table.h +385 -0
  1010. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1011. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1012. data/third_party/upb/upb/json_decode.c +1512 -0
  1013. data/third_party/upb/upb/json_decode.h +47 -0
  1014. data/third_party/upb/upb/json_encode.c +7 -3
  1015. data/third_party/upb/upb/json_encode.h +6 -3
  1016. data/third_party/upb/upb/map.c +108 -0
  1017. data/third_party/upb/upb/map.h +117 -0
  1018. data/third_party/upb/upb/message_value.h +66 -0
  1019. data/third_party/upb/upb/mini_table.c +1147 -0
  1020. data/third_party/upb/upb/mini_table.h +189 -0
  1021. data/third_party/upb/upb/mini_table.hpp +112 -0
  1022. data/third_party/upb/upb/msg.c +2 -62
  1023. data/third_party/upb/upb/msg.h +2 -45
  1024. data/third_party/upb/upb/msg_internal.h +28 -22
  1025. data/third_party/upb/upb/port_def.inc +2 -1
  1026. data/third_party/upb/upb/port_undef.inc +1 -0
  1027. data/third_party/upb/upb/reflection.c +2 -159
  1028. data/third_party/upb/upb/reflection.h +2 -112
  1029. data/third_party/upb/upb/status.c +86 -0
  1030. data/third_party/upb/upb/status.h +66 -0
  1031. data/third_party/upb/upb/table.c +2 -2
  1032. data/third_party/upb/upb/table_internal.h +3 -352
  1033. data/third_party/upb/upb/text_encode.c +3 -2
  1034. data/third_party/upb/upb/upb.c +4 -290
  1035. data/third_party/upb/upb/upb.h +7 -196
  1036. metadata +113 -37
  1037. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1038. data/src/core/lib/event_engine/event_engine.cc +0 -62
  1039. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1040. data/src/core/lib/iomgr/error_internal.h +0 -66
  1041. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1042. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1043. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1044. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1045. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1046. data/src/core/lib/promise/detail/switch.h +0 -1455
  1047. data/src/core/lib/slice/slice_split.cc +0 -103
  1048. data/src/core/lib/slice/slice_split.h +0 -36
  1049. data/src/core/lib/transport/byte_stream.cc +0 -165
  1050. data/src/core/lib/transport/byte_stream.h +0 -170
  1051. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  1052. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  1053. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -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,8 +27,8 @@
28
27
  #include <set>
29
28
  #include <vector>
30
29
 
31
- #include "absl/container/inlined_vector.h"
32
30
  #include "absl/memory/memory.h"
31
+ #include "absl/status/status.h"
33
32
  #include "absl/status/statusor.h"
34
33
  #include "absl/strings/cord.h"
35
34
  #include "absl/strings/numbers.h"
@@ -42,7 +41,6 @@
42
41
  #include <grpc/impl/codegen/gpr_types.h>
43
42
  #include <grpc/slice.h>
44
43
  #include <grpc/status.h>
45
- #include <grpc/support/alloc.h>
46
44
  #include <grpc/support/log.h>
47
45
  #include <grpc/support/string_util.h>
48
46
 
@@ -53,13 +51,11 @@
53
51
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
54
52
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
55
53
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
56
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
57
54
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
58
55
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
59
56
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
60
57
  #include "src/core/ext/filters/client_channel/retry_filter.h"
61
58
  #include "src/core/ext/filters/client_channel/subchannel.h"
62
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
63
59
  #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
64
60
  #include "src/core/ext/filters/deadline/deadline_filter.h"
65
61
  #include "src/core/lib/channel/channel_args.h"
@@ -70,11 +66,13 @@
70
66
  #include "src/core/lib/gpr/useful.h"
71
67
  #include "src/core/lib/gprpp/debug_location.h"
72
68
  #include "src/core/lib/gprpp/sync.h"
69
+ #include "src/core/lib/gprpp/work_serializer.h"
73
70
  #include "src/core/lib/iomgr/exec_ctx.h"
74
71
  #include "src/core/lib/iomgr/polling_entity.h"
75
72
  #include "src/core/lib/iomgr/pollset_set.h"
76
- #include "src/core/lib/iomgr/work_serializer.h"
77
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"
78
76
  #include "src/core/lib/profiling/timers.h"
79
77
  #include "src/core/lib/resolver/resolver_registry.h"
80
78
  #include "src/core/lib/resolver/server_address.h"
@@ -96,9 +94,7 @@
96
94
 
97
95
  namespace grpc_core {
98
96
 
99
- using internal::ClientChannelGlobalParsedConfig;
100
97
  using internal::ClientChannelMethodParsedConfig;
101
- using internal::ClientChannelServiceConfigParser;
102
98
 
103
99
  TraceFlag grpc_client_channel_trace(false, "client_channel");
104
100
  TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
@@ -267,28 +263,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
267
263
 
268
264
  namespace {
269
265
 
270
- // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
271
- void* ClientChannelArgCopy(void* p) { return p; }
272
- void ClientChannelArgDestroy(void* /*p*/) {}
273
- int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
274
- const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
275
- ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
276
-
277
- // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
278
- void* ServiceConfigObjArgCopy(void* p) {
279
- auto* service_config = static_cast<ServiceConfig*>(p);
280
- service_config->Ref().release();
281
- return p;
282
- }
283
- void ServiceConfigObjArgDestroy(void* p) {
284
- auto* service_config = static_cast<ServiceConfig*>(p);
285
- service_config->Unref();
286
- }
287
- int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
288
- const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
289
- ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
290
- ServiceConfigObjArgCmp};
291
-
292
266
  class DynamicTerminationFilter {
293
267
  public:
294
268
  class CallData;
@@ -507,21 +481,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
507
481
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
508
482
  }
509
483
 
510
- grpc_connectivity_state CheckConnectivityState() override {
511
- return subchannel_->CheckConnectivityState(health_check_service_name_);
512
- }
513
-
514
484
  void WatchConnectivityState(
515
- grpc_connectivity_state initial_state,
516
485
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
517
486
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
518
487
  auto& watcher_wrapper = watcher_map_[watcher.get()];
519
488
  GPR_ASSERT(watcher_wrapper == nullptr);
520
489
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
521
- Ref(DEBUG_LOCATION, "WatcherWrapper"),
522
- initial_state);
490
+ Ref(DEBUG_LOCATION, "WatcherWrapper"));
523
491
  subchannel_->WatchConnectivityState(
524
- initial_state, health_check_service_name_,
492
+ health_check_service_name_,
525
493
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
526
494
  watcher_wrapper));
527
495
  }
@@ -552,9 +520,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
552
520
  data_watchers_.push_back(std::move(internal_watcher));
553
521
  }
554
522
 
555
- const grpc_channel_args* channel_args() override {
556
- return subchannel_->channel_args();
557
- }
523
+ ChannelArgs channel_args() override { return subchannel_->channel_args(); }
558
524
 
559
525
  void ThrottleKeepaliveTime(int new_keepalive_time) {
560
526
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
@@ -580,11 +546,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
580
546
  WatcherWrapper(
581
547
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
582
548
  watcher,
583
- RefCountedPtr<SubchannelWrapper> parent,
584
- grpc_connectivity_state initial_state)
585
- : watcher_(std::move(watcher)),
586
- parent_(std::move(parent)),
587
- last_seen_state_(initial_state) {}
549
+ RefCountedPtr<SubchannelWrapper> parent)
550
+ : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
588
551
 
589
552
  ~WatcherWrapper() override {
590
553
  auto* parent = parent_.release(); // ref owned by lambda
@@ -621,14 +584,11 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
621
584
  }
622
585
 
623
586
  WatcherWrapper* MakeReplacement() {
624
- auto* replacement =
625
- new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
587
+ auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
626
588
  replacement_ = replacement;
627
589
  return replacement;
628
590
  }
629
591
 
630
- grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
631
-
632
592
  private:
633
593
  void ApplyUpdateInControlPlaneWorkSerializer()
634
594
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
@@ -670,15 +630,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
670
630
  // Ignore update if the parent WatcherWrapper has been replaced
671
631
  // since this callback was scheduled.
672
632
  if (watcher_ != nullptr) {
673
- last_seen_state_ = state_change.state;
674
- watcher_->OnConnectivityStateChange(state_change.state);
633
+ // Propagate status only in state TF.
634
+ // We specifically want to avoid propagating the status for
635
+ // state IDLE that the real subchannel gave us only for the
636
+ // purpose of keepalive propagation.
637
+ if (state_change.state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
638
+ state_change.status = absl::OkStatus();
639
+ }
640
+ watcher_->OnConnectivityStateChange(state_change.state,
641
+ state_change.status);
675
642
  }
676
643
  }
677
644
 
678
645
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
679
646
  watcher_;
680
647
  RefCountedPtr<SubchannelWrapper> parent_;
681
- grpc_connectivity_state last_seen_state_;
682
648
  WatcherWrapper* replacement_ = nullptr;
683
649
  };
684
650
 
@@ -886,67 +852,23 @@ class ClientChannel::ClientChannelControlHelper
886
852
  }
887
853
 
888
854
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
889
- ServerAddress address, const grpc_channel_args& args) override
855
+ ServerAddress address, const ChannelArgs& args) override
890
856
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
891
857
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
892
858
  // Determine health check service name.
893
859
  absl::optional<std::string> health_check_service_name;
894
- const char* health_check_service_name_arg = grpc_channel_args_find_string(
895
- &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
896
- if (health_check_service_name_arg != nullptr) {
897
- bool inhibit_health_checking = grpc_channel_args_find_bool(
898
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
899
- if (!inhibit_health_checking) {
900
- health_check_service_name = health_check_service_name_arg;
901
- }
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);
902
863
  }
903
864
  // Construct channel args for subchannel.
904
- // Remove channel args that should not affect subchannel uniqueness.
905
- absl::InlinedVector<const char*, 4> args_to_remove = {
906
- GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
907
- GRPC_ARG_INHIBIT_HEALTH_CHECKING,
908
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
909
- };
910
- // Add channel args needed for the subchannel.
911
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
912
- SubchannelPoolInterface::CreateChannelArg(
913
- chand_->subchannel_pool_.get()),
914
- };
915
- // Check if default authority arg is already set.
916
- const char* default_authority =
917
- grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
918
- // Add args from subchannel address.
919
- if (address.args() != nullptr) {
920
- for (size_t j = 0; j < address.args()->num_args; ++j) {
921
- grpc_arg& arg = address.args()->args[j];
922
- if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
923
- // Don't add default authority arg from subchannel address if
924
- // it's already set at the channel level -- the value from the
925
- // application should take precedence over what is set by the
926
- // resolver.
927
- if (default_authority != nullptr) continue;
928
- default_authority = arg.value.string;
929
- }
930
- args_to_add.emplace_back(arg);
931
- }
932
- }
933
- // If we haven't already set the default authority arg, add it from
934
- // the channel.
935
- if (default_authority == nullptr) {
936
- // Remove it, just in case it's actually present but is the wrong type.
937
- args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
938
- args_to_add.push_back(grpc_channel_arg_string_create(
939
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
940
- const_cast<char*>(chand_->default_authority_.c_str())));
941
- }
942
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
943
- &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
944
- args_to_add.size());
865
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
866
+ args, address.args(), chand_->subchannel_pool_,
867
+ chand_->default_authority_);
945
868
  // Create subchannel.
946
869
  RefCountedPtr<Subchannel> subchannel =
947
870
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
948
- new_args);
949
- grpc_channel_args_destroy(new_args);
871
+ subchannel_args);
950
872
  if (subchannel == nullptr) return nullptr;
951
873
  // Make sure the subchannel has updated keepalive time.
952
874
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -961,7 +883,7 @@ class ClientChannel::ClientChannelControlHelper
961
883
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
962
884
  if (chand_->resolver_ == nullptr) return; // Shutting down.
963
885
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
964
- const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
886
+ const char* extra = GRPC_ERROR_IS_NONE(chand_->disconnect_error_)
965
887
  ? ""
966
888
  : " (ignoring -- channel shutting down)";
967
889
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -969,7 +891,7 @@ class ClientChannel::ClientChannelControlHelper
969
891
  picker.get(), extra);
970
892
  }
971
893
  // Do update only if not shutting down.
972
- if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
894
+ if (GRPC_ERROR_IS_NONE(chand_->disconnect_error_)) {
973
895
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
974
896
  std::move(picker));
975
897
  }
@@ -1037,36 +959,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1037
959
  namespace {
1038
960
 
1039
961
  RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1040
- const grpc_channel_args* args) {
1041
- const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1042
- args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1043
- if (use_local_subchannel_pool) {
962
+ const ChannelArgs& args) {
963
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1044
964
  return MakeRefCounted<LocalSubchannelPool>();
1045
965
  }
1046
966
  return GlobalSubchannelPool::instance();
1047
967
  }
1048
968
 
1049
- channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1050
- return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1051
- args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1052
- }
1053
-
1054
969
  } // namespace
1055
970
 
1056
971
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1057
972
  grpc_error_handle* error)
1058
- : deadline_checking_enabled_(
1059
- 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_)),
1060
975
  owning_stack_(args->channel_stack),
1061
- client_channel_factory_(
1062
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1063
- channelz_node_(GetChannelzNode(args->channel_args)),
976
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
977
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1064
978
  interested_parties_(grpc_pollset_set_create()),
1065
979
  service_config_parser_index_(
1066
980
  internal::ClientChannelServiceConfigParser::ParserIndex()),
1067
981
  work_serializer_(std::make_shared<WorkSerializer>()),
1068
982
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1069
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
983
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
1070
984
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1071
985
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1072
986
  this, owning_stack_);
@@ -1081,34 +995,28 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1081
995
  }
1082
996
  // Get default service config. If none is specified via the client API,
1083
997
  // we use an empty config.
1084
- const char* service_config_json = grpc_channel_args_find_string(
1085
- args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1086
- 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 = "{}";
1087
1001
  *error = GRPC_ERROR_NONE;
1088
- default_service_config_ =
1089
- ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1090
- if (*error != GRPC_ERROR_NONE) {
1091
- 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());
1092
1006
  return;
1093
1007
  }
1008
+ default_service_config_ = std::move(*service_config);
1094
1009
  // Get URI to resolve, using proxy mapper if needed.
1095
- const char* server_uri =
1096
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1097
- 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()) {
1098
1013
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1099
1014
  "target URI channel arg missing or wrong type in client channel "
1100
1015
  "filter");
1101
1016
  return;
1102
1017
  }
1103
- uri_to_resolve_ = server_uri;
1104
- char* proxy_name = nullptr;
1105
- grpc_channel_args* new_args = nullptr;
1106
- ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1107
- &new_args);
1108
- if (proxy_name != nullptr) {
1109
- uri_to_resolve_ = proxy_name;
1110
- gpr_free(proxy_name);
1111
- }
1018
+ uri_to_resolve_ = ProxyMapperRegistry::MapName(*server_uri, &channel_args_)
1019
+ .value_or(*server_uri);
1112
1020
  // Make sure the URI to resolve is valid, so that we know that
1113
1021
  // resolver creation will succeed later.
1114
1022
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
@@ -1119,23 +1027,23 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1119
1027
  }
1120
1028
  // Strip out service config channel arg, so that it doesn't affect
1121
1029
  // subchannel uniqueness when the args flow down to that layer.
1122
- const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1123
- channel_args_ = grpc_channel_args_copy_and_remove(
1124
- new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1125
- grpc_channel_args_destroy(new_args);
1030
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1126
1031
  // Set initial keepalive time.
1127
- keepalive_time_ = grpc_channel_args_find_integer(
1128
- channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1129
- {-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
+ }
1130
1038
  // Set default authority.
1131
- const char* default_authority =
1132
- grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1133
- 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()) {
1134
1042
  default_authority_ =
1135
1043
  CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1136
- server_uri);
1044
+ *server_uri);
1137
1045
  } else {
1138
- default_authority_ = default_authority;
1046
+ default_authority_ = std::move(*default_authority);
1139
1047
  }
1140
1048
  // Success.
1141
1049
  *error = GRPC_ERROR_NONE;
@@ -1146,7 +1054,6 @@ ClientChannel::~ClientChannel() {
1146
1054
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1147
1055
  }
1148
1056
  DestroyResolverAndLbPolicyLocked();
1149
- grpc_channel_args_destroy(channel_args_);
1150
1057
  // Stop backup polling.
1151
1058
  grpc_client_channel_stop_backup_polling(interested_parties_);
1152
1059
  grpc_pollset_set_destroy(interested_parties_);
@@ -1164,6 +1071,29 @@ ClientChannel::CreateLoadBalancedCall(
1164
1071
  call_dispatch_controller, is_transparent_retry));
1165
1072
  }
1166
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
+
1167
1097
  namespace {
1168
1098
 
1169
1099
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1175,41 +1105,39 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1175
1105
  }
1176
1106
  // Try the deprecated LB policy name from the service config.
1177
1107
  // If not, try the setting from channel args.
1178
- const char* policy_name = nullptr;
1108
+ absl::optional<absl::string_view> policy_name;
1179
1109
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1180
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1110
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1181
1111
  } else {
1182
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1183
- GRPC_ARG_LB_POLICY_NAME);
1112
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1184
1113
  bool requires_config = false;
1185
- if (policy_name != nullptr &&
1114
+ if (policy_name.has_value() &&
1186
1115
  (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1187
- policy_name, &requires_config) ||
1116
+ *policy_name, &requires_config) ||
1188
1117
  requires_config)) {
1189
1118
  if (requires_config) {
1190
1119
  gpr_log(GPR_ERROR,
1191
1120
  "LB policy: %s passed through channel_args must not "
1192
1121
  "require a config. Using pick_first instead.",
1193
- policy_name);
1122
+ std::string(*policy_name).c_str());
1194
1123
  } else {
1195
1124
  gpr_log(GPR_ERROR,
1196
1125
  "LB policy: %s passed through channel_args does not exist. "
1197
1126
  "Using pick_first instead.",
1198
- policy_name);
1127
+ std::string(*policy_name).c_str());
1199
1128
  }
1200
1129
  policy_name = "pick_first";
1201
1130
  }
1202
1131
  }
1203
1132
  // Use pick_first if nothing was specified and we didn't select grpclb
1204
1133
  // above.
1205
- if (policy_name == nullptr) policy_name = "pick_first";
1134
+ if (!policy_name.has_value()) policy_name = "pick_first";
1206
1135
  // Now that we have the policy name, construct an empty config for it.
1207
1136
  Json config_json = Json::Array{Json::Object{
1208
- {policy_name, Json::Object{}},
1137
+ {std::string(*policy_name), Json::Object{}},
1209
1138
  }};
1210
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1211
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1212
- config_json, &parse_error);
1139
+ auto lb_policy_config =
1140
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json);
1213
1141
  // The policy name came from one of three places:
1214
1142
  // - The deprecated loadBalancingPolicy field in the service config,
1215
1143
  // in which case the code in ClientChannelServiceConfigParser
@@ -1219,9 +1147,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1219
1147
  // - A channel arg, in which case we check that the specified policy exists
1220
1148
  // and accepts an empty config. If not, we revert to using pick_first
1221
1149
  // lb_policy
1222
- GPR_ASSERT(lb_policy_config != nullptr);
1223
- GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1224
- return lb_policy_config;
1150
+ GPR_ASSERT(lb_policy_config.ok());
1151
+ return std::move(*lb_policy_config);
1225
1152
  }
1226
1153
 
1227
1154
  } // namespace
@@ -1241,7 +1168,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1241
1168
  // (d) Address resolution that causes a new LB policy to be created.
1242
1169
  //
1243
1170
  // We track a list of strings to eventually be concatenated and traced.
1244
- absl::InlinedVector<const char*, 3> trace_strings;
1171
+ std::vector<const char*> trace_strings;
1245
1172
  const bool resolution_contains_addresses =
1246
1173
  result.addresses.ok() && !result.addresses->empty();
1247
1174
  if (!resolution_contains_addresses &&
@@ -1296,7 +1223,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1296
1223
  } else {
1297
1224
  // Use ServiceConfig and ConfigSelector returned by resolver.
1298
1225
  service_config = std::move(*result.service_config);
1299
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1226
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1300
1227
  }
1301
1228
  // Note: The only case in which service_config is null here is if the resolver
1302
1229
  // returned a service config error and we don't have a previous service
@@ -1320,9 +1247,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1320
1247
  // If either has changed, apply the global parameters now.
1321
1248
  if (service_config_changed || config_selector_changed) {
1322
1249
  // Update service config in control plane.
1323
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1324
- std::move(config_selector),
1325
- lb_policy_config->name());
1250
+ UpdateServiceConfigInControlPlaneLocked(
1251
+ std::move(service_config), std::move(config_selector),
1252
+ std::string(lb_policy_config->name()));
1326
1253
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1327
1254
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1328
1255
  }
@@ -1395,22 +1322,18 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1395
1322
  update_args.addresses = std::move(result.addresses);
1396
1323
  update_args.config = std::move(lb_policy_config);
1397
1324
  update_args.resolution_note = std::move(result.resolution_note);
1398
- // Add health check service name to channel args.
1399
- absl::InlinedVector<grpc_arg, 1> args_to_add;
1400
- if (health_check_service_name.has_value()) {
1401
- args_to_add.push_back(grpc_channel_arg_string_create(
1402
- const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1403
- const_cast<char*>(health_check_service_name->c_str())));
1404
- }
1405
1325
  // Remove the config selector from channel args so that we're not holding
1406
1326
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1407
1327
  // WorkSerializer.
1408
- const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1409
- update_args.args = grpc_channel_args_copy_and_add_and_remove(
1410
- 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
+ }
1411
1334
  // Create policy if needed.
1412
1335
  if (lb_policy_ == nullptr) {
1413
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1336
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1414
1337
  }
1415
1338
  // Update the policy.
1416
1339
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
@@ -1422,12 +1345,12 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1422
1345
 
1423
1346
  // Creates a new LB policy.
1424
1347
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1425
- const grpc_channel_args& args) {
1348
+ const ChannelArgs& args) {
1426
1349
  LoadBalancingPolicy::Args lb_policy_args;
1427
1350
  lb_policy_args.work_serializer = work_serializer_;
1428
1351
  lb_policy_args.channel_control_helper =
1429
1352
  absl::make_unique<ClientChannelControlHelper>(this);
1430
- lb_policy_args.args = &args;
1353
+ lb_policy_args.args = args;
1431
1354
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1432
1355
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1433
1356
  &grpc_client_channel_trace);
@@ -1502,19 +1425,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1502
1425
  config_selector =
1503
1426
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1504
1427
  }
1505
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1506
- grpc_channel_arg_pointer_create(
1507
- const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1508
- &kClientChannelArgPointerVtable),
1509
- grpc_channel_arg_pointer_create(
1510
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1511
- &kServiceConfigObjArgPointerVtable),
1512
- };
1513
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1514
- channel_args_, args_to_add.data(), args_to_add.size());
1515
- new_args = config_selector->ModifyChannelArgs(new_args);
1428
+ ChannelArgs new_args = config_selector->ModifyChannelArgs(
1429
+ channel_args_.SetObject(this).SetObject(service_config));
1516
1430
  bool enable_retries =
1517
- 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);
1518
1433
  // Construct dynamic filter stack.
1519
1434
  std::vector<const grpc_channel_filter*> filters =
1520
1435
  config_selector->GetFilters();
@@ -1524,9 +1439,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1524
1439
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1525
1440
  }
1526
1441
  RefCountedPtr<DynamicFilters> dynamic_filters =
1527
- DynamicFilters::Create(new_args, std::move(filters));
1442
+ DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1528
1443
  GPR_ASSERT(dynamic_filters != nullptr);
1529
- grpc_channel_args_destroy(new_args);
1530
1444
  // Grab data plane lock to update service config.
1531
1445
  //
1532
1446
  // We defer unreffing the old values (and deallocating memory) until
@@ -1712,6 +1626,10 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1712
1626
  complete_pick->subchannel.get());
1713
1627
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1714
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
+ }
1715
1633
  connected_subchannel->Ping(op->send_ping.on_initiate,
1716
1634
  op->send_ping.on_ack);
1717
1635
  return GRPC_ERROR_NONE;
@@ -1742,7 +1660,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1742
1660
  // Ping.
1743
1661
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1744
1662
  grpc_error_handle error = DoPingLocked(op);
1745
- if (error != GRPC_ERROR_NONE) {
1663
+ if (!GRPC_ERROR_IS_NONE(error)) {
1746
1664
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1747
1665
  GRPC_ERROR_REF(error));
1748
1666
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
@@ -1758,7 +1676,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1758
1676
  }
1759
1677
  }
1760
1678
  // Disconnect or enter IDLE.
1761
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1679
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1762
1680
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1763
1681
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1764
1682
  grpc_error_std_string(op->disconnect_with_error).c_str());
@@ -1768,7 +1686,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1768
1686
  if (grpc_error_get_int(op->disconnect_with_error,
1769
1687
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1770
1688
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1771
- if (disconnect_error_ == GRPC_ERROR_NONE) {
1689
+ if (GRPC_ERROR_IS_NONE(disconnect_error_)) {
1772
1690
  // Enter IDLE state.
1773
1691
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1774
1692
  "channel entering IDLE", nullptr);
@@ -1776,7 +1694,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1776
1694
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1777
1695
  } else {
1778
1696
  // Disconnect.
1779
- GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1697
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(disconnect_error_));
1780
1698
  disconnect_error_ = op->disconnect_with_error;
1781
1699
  UpdateStateAndPickerLocked(
1782
1700
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
@@ -1971,7 +1889,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1971
1889
  // We do not yet have a dynamic call.
1972
1890
  //
1973
1891
  // If we've previously been cancelled, immediately fail any new batches.
1974
- if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1892
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(calld->cancel_error_))) {
1975
1893
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1976
1894
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1977
1895
  chand, calld,
@@ -2083,7 +2001,7 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2083
2001
  void ClientChannel::CallData::PendingBatchesFail(
2084
2002
  grpc_call_element* elem, grpc_error_handle error,
2085
2003
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2086
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2004
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2087
2005
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2088
2006
  size_t num_batches = 0;
2089
2007
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2187,7 +2105,8 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2187
2105
  chand, calld, grpc_error_std_string(error).c_str(), self,
2188
2106
  calld->resolver_call_canceller_);
2189
2107
  }
2190
- if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2108
+ if (calld->resolver_call_canceller_ == self &&
2109
+ !GRPC_ERROR_IS_NONE(error)) {
2191
2110
  // Remove pick from list of queued picks.
2192
2111
  calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2193
2112
  // Fail pending batches on the call.
@@ -2245,7 +2164,9 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2245
2164
  // Use the ConfigSelector to determine the config for the call.
2246
2165
  ConfigSelector::CallConfig call_config =
2247
2166
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2248
- if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2167
+ if (!call_config.status.ok()) {
2168
+ return absl_status_to_grpc_error(call_config.status);
2169
+ }
2249
2170
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2250
2171
  // a ref to the ServiceConfig and caches the right set of parsed configs
2251
2172
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2275,17 +2196,13 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2275
2196
  }
2276
2197
  // If the service config set wait_for_ready and the application
2277
2198
  // did not explicitly set it, use the value from the service config.
2278
- uint32_t* send_initial_metadata_flags =
2279
- &pending_batches_[0]
2280
- ->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());
2281
2203
  if (method_params->wait_for_ready().has_value() &&
2282
- !(*send_initial_metadata_flags &
2283
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2284
- if (method_params->wait_for_ready().value()) {
2285
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2286
- } else {
2287
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2288
- }
2204
+ !wait_for_ready->explicitly_set) {
2205
+ wait_for_ready->value = method_params->wait_for_ready().value();
2289
2206
  }
2290
2207
  }
2291
2208
  // Set the dynamic filter stack.
@@ -2330,7 +2247,7 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
2330
2247
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2331
2248
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2332
2249
  CallData* calld = static_cast<CallData*>(elem->call_data);
2333
- if (error != GRPC_ERROR_NONE) {
2250
+ if (!GRPC_ERROR_IS_NONE(error)) {
2334
2251
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2335
2252
  gpr_log(GPR_INFO,
2336
2253
  "chand=%p calld=%p: error applying config to call: error=%s",
@@ -2393,16 +2310,14 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2393
2310
  pending_batches_[0]->payload->send_initial_metadata;
2394
2311
  grpc_metadata_batch* initial_metadata_batch =
2395
2312
  send_initial_metadata.send_initial_metadata;
2396
- const uint32_t send_initial_metadata_flags =
2397
- send_initial_metadata.send_initial_metadata_flags;
2398
2313
  // If we don't yet have a resolver result, we need to queue the call
2399
2314
  // until we get one.
2400
2315
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2401
2316
  // If the resolver returned transient failure before returning the
2402
2317
  // first service config, fail any non-wait_for_ready calls.
2403
2318
  absl::Status resolver_error = chand->resolver_transient_failure_error_;
2404
- if (!resolver_error.ok() && (send_initial_metadata_flags &
2405
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2319
+ if (!resolver_error.ok() &&
2320
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2406
2321
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2407
2322
  gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2408
2323
  chand, this);
@@ -2449,7 +2364,7 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2449
2364
  chand, this, channel_stack);
2450
2365
  }
2451
2366
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2452
- if (error != GRPC_ERROR_NONE) {
2367
+ if (!GRPC_ERROR_IS_NONE(error)) {
2453
2368
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2454
2369
  gpr_log(GPR_INFO,
2455
2370
  "chand=%p calld=%p: failed to create dynamic call: error=%s",
@@ -2540,25 +2455,16 @@ class ClientChannel::LoadBalancedCall::Metadata
2540
2455
  // ClientChannel::LoadBalancedCall::LbCallState
2541
2456
  //
2542
2457
 
2543
- class ClientChannel::LoadBalancedCall::LbCallState
2544
- : public LoadBalancingPolicy::CallState {
2545
- public:
2546
- explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2547
-
2548
- void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2549
-
2550
- absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2551
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2552
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2553
- auto& call_attributes = service_config_call_data->call_attributes();
2554
- auto it = call_attributes.find(key);
2555
- if (it == call_attributes.end()) return absl::string_view();
2556
- return it->second;
2557
- }
2558
-
2559
- private:
2560
- LoadBalancedCall* lb_call_;
2561
- };
2458
+ absl::string_view
2459
+ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2460
+ UniqueTypeName type) {
2461
+ auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2462
+ lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2463
+ auto& call_attributes = service_config_call_data->call_attributes();
2464
+ auto it = call_attributes.find(type);
2465
+ if (it == call_attributes.end()) return absl::string_view();
2466
+ return it->second;
2467
+ }
2562
2468
 
2563
2469
  //
2564
2470
  // ClientChannel::LoadBalancedCall::BackendMetricAccessor
@@ -2718,7 +2624,7 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2718
2624
  void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2719
2625
  grpc_error_handle error,
2720
2626
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2721
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2627
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2722
2628
  GRPC_ERROR_UNREF(failure_error_);
2723
2629
  failure_error_ = error;
2724
2630
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -2809,8 +2715,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2809
2715
  }
2810
2716
  if (batch->send_initial_metadata) {
2811
2717
  call_attempt_tracer_->RecordSendInitialMetadata(
2812
- batch->payload->send_initial_metadata.send_initial_metadata,
2813
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2718
+ batch->payload->send_initial_metadata.send_initial_metadata);
2814
2719
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2815
2720
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2816
2721
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -2874,7 +2779,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2874
2779
  // We do not yet have a subchannel call.
2875
2780
  //
2876
2781
  // If we've previously been cancelled, immediately fail any new batches.
2877
- if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2782
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(cancel_error_))) {
2878
2783
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2879
2784
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2880
2785
  chand_, this, grpc_error_std_string(cancel_error_).c_str());
@@ -2951,7 +2856,7 @@ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2951
2856
  "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2952
2857
  self->chand_, self, grpc_error_std_string(error).c_str());
2953
2858
  }
2954
- if (error == GRPC_ERROR_NONE) {
2859
+ if (GRPC_ERROR_IS_NONE(error)) {
2955
2860
  // recv_initial_metadata_flags is not populated for clients
2956
2861
  self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2957
2862
  self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
@@ -2967,7 +2872,7 @@ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2967
2872
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2968
2873
  self->chand_, self, grpc_error_std_string(error).c_str());
2969
2874
  }
2970
- if (*self->recv_message_ != nullptr) {
2875
+ if (self->recv_message_->has_value()) {
2971
2876
  self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2972
2877
  }
2973
2878
  Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
@@ -2991,7 +2896,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2991
2896
  self->lb_subchannel_call_tracker_ != nullptr) {
2992
2897
  // Get the call's status.
2993
2898
  absl::Status status;
2994
- if (error != GRPC_ERROR_NONE) {
2899
+ if (!GRPC_ERROR_IS_NONE(error)) {
2995
2900
  // Get status from error.
2996
2901
  grpc_status_code code;
2997
2902
  std::string message;
@@ -3014,7 +2919,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
3014
2919
  self->RecordCallCompletion(status);
3015
2920
  }
3016
2921
  // Chain to original callback.
3017
- if (self->failure_error_ != GRPC_ERROR_NONE) {
2922
+ if (!GRPC_ERROR_IS_NONE(self->failure_error_)) {
3018
2923
  error = self->failure_error_;
3019
2924
  self->failure_error_ = GRPC_ERROR_NONE;
3020
2925
  } else {
@@ -3061,7 +2966,7 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3061
2966
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3062
2967
  on_call_destruction_complete_ = nullptr;
3063
2968
  }
3064
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
2969
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
3065
2970
  PendingBatchesFail(error, YieldCallCombiner);
3066
2971
  } else {
3067
2972
  PendingBatchesResume();
@@ -3098,7 +3003,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3098
3003
  chand, lb_call, grpc_error_std_string(error).c_str(), self,
3099
3004
  lb_call->lb_call_canceller_);
3100
3005
  }
3101
- if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3006
+ if (lb_call->lb_call_canceller_ == self && !GRPC_ERROR_IS_NONE(error)) {
3102
3007
  lb_call->call_dispatch_controller_->Commit();
3103
3008
  // Remove pick from list of queued picks.
3104
3009
  lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
@@ -3149,7 +3054,7 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3149
3054
  void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3150
3055
  grpc_error_handle error) {
3151
3056
  auto* self = static_cast<LoadBalancedCall*>(arg);
3152
- if (error != GRPC_ERROR_NONE) {
3057
+ if (!GRPC_ERROR_IS_NONE(error)) {
3153
3058
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3154
3059
  gpr_log(GPR_INFO,
3155
3060
  "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
@@ -3185,8 +3090,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3185
3090
  pending_batches_[0]->payload->send_initial_metadata;
3186
3091
  grpc_metadata_batch* initial_metadata_batch =
3187
3092
  send_initial_metadata.send_initial_metadata;
3188
- const uint32_t send_initial_metadata_flags =
3189
- send_initial_metadata.send_initial_metadata_flags;
3190
3093
  // Perform LB pick.
3191
3094
  LoadBalancingPolicy::PickArgs pick_args;
3192
3095
  pick_args.path = path_.as_string_view();
@@ -3244,7 +3147,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3244
3147
  return false;
3245
3148
  },
3246
3149
  // FailPick
3247
- [this, send_initial_metadata_flags,
3150
+ [this, initial_metadata_batch,
3248
3151
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3249
3152
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3250
3153
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -3253,8 +3156,8 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3253
3156
  }
3254
3157
  // If wait_for_ready is false, then the error indicates the RPC
3255
3158
  // attempt's final status.
3256
- if ((send_initial_metadata_flags &
3257
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3159
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3160
+ ->value) {
3258
3161
  grpc_error_handle lb_error =
3259
3162
  absl_status_to_grpc_error(fail_pick->status);
3260
3163
  *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(