grpc 1.41.1 → 1.44.0.pre2

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 (1156) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +185 -102
  3. data/include/grpc/event_engine/event_engine.h +118 -54
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  5. data/include/grpc/event_engine/memory_allocator.h +226 -0
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +304 -145
  9. data/include/grpc/grpc_security_constants.h +2 -14
  10. data/include/grpc/impl/codegen/compression_types.h +0 -2
  11. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  12. data/include/grpc/impl/codegen/port_platform.h +14 -3
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
  14. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  17. data/src/core/ext/filters/client_channel/client_channel.cc +305 -335
  18. data/src/core/ext/filters/client_channel/client_channel.h +84 -36
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -15
  22. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  24. data/src/core/ext/filters/client_channel/connector.h +18 -18
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  28. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -22
  29. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +13 -15
  31. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  34. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +5 -18
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +198 -116
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  45. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +66 -36
  46. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +21 -12
  47. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +124 -74
  48. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2514 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  50. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  51. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +18 -6
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -96
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +101 -46
  56. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +11 -3
  57. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +101 -209
  58. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  59. data/src/core/ext/filters/client_channel/lb_policy.h +105 -63
  60. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  61. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +220 -88
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  65. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
  66. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +124 -240
  67. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  68. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  69. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +90 -77
  70. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -11
  71. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  72. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +7 -16
  73. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  74. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +423 -396
  75. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -2
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  77. data/src/core/ext/filters/client_channel/retry_filter.cc +66 -131
  78. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  79. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  82. data/src/core/ext/filters/client_channel/subchannel.cc +99 -161
  83. data/src/core/ext/filters/client_channel/subchannel.h +31 -52
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  87. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  88. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +42 -53
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -9
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +70 -160
  94. data/src/core/ext/filters/http/client_authority_filter.cc +19 -36
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +46 -139
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +84 -183
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  103. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  104. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  105. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  106. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  107. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  108. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +270 -0
  109. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
  110. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
  111. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  112. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +26 -28
  113. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
  114. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +33 -53
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +146 -113
  116. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
  117. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
  118. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
  119. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  120. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -278
  121. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
  122. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  123. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -23
  125. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
  126. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -5
  127. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  128. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  129. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  130. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  131. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +384 -218
  133. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +89 -143
  134. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  135. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -202
  137. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -9
  138. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +106 -26
  139. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -44
  140. data/src/core/ext/transport/chttp2/transport/internal.h +10 -38
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -179
  142. data/src/core/ext/transport/chttp2/transport/writing.cc +65 -127
  143. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  144. data/src/core/ext/transport/inproc/inproc_transport.cc +114 -161
  145. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  146. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
  147. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
  148. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
  149. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
  150. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
  151. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  152. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
  153. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
  154. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
  155. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
  156. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
  157. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
  158. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +277 -208
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
  161. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
  162. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
  163. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +171 -125
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +90 -71
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -0
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +121 -92
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
  194. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
  195. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
  196. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -44
  197. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
  198. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
  199. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
  200. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
  201. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
  202. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
  203. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
  204. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
  205. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
  206. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
  210. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
  211. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
  212. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
  213. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
  214. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +99 -78
  215. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -0
  216. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
  217. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
  218. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +508 -442
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
  224. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
  233. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
  235. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
  243. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
  244. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
  245. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
  247. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
  248. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
  249. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
  250. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
  251. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
  252. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
  253. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
  254. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
  255. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
  256. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
  257. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
  258. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
  259. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
  260. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
  261. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
  262. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
  263. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
  280. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
  281. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
  282. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
  283. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
  284. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
  287. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
  288. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
  289. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
  290. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
  291. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
  292. data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
  293. data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
  294. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
  295. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
  296. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
  297. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
  298. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
  299. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
  300. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
  304. data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
  305. data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
  306. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
  308. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
  310. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
  312. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
  314. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
  316. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
  318. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
  320. data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
  322. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
  332. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +68 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -0
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -5
  337. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
  341. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
  342. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
  343. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
  345. data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
  346. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +103 -0
  347. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +25 -13
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +20 -8
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +19 -8
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +28 -16
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +19 -8
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +71 -0
  361. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
  362. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
  363. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -0
  364. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
  366. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
  369. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +307 -336
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
  374. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
  375. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
  376. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +100 -138
  377. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +61 -77
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +61 -79
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
  390. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
  391. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +80 -99
  392. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
  393. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
  394. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
  395. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
  398. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
  399. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +325 -427
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
  405. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
  408. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
  409. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
  413. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
  414. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
  415. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
  416. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
  417. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
  418. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
  419. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
  420. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
  421. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
  422. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
  424. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
  426. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
  435. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
  436. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
  437. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
  438. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
  439. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
  440. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
  441. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
  442. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  443. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  444. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  445. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  447. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  448. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  449. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  450. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  451. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  452. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
  453. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
  454. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
  455. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
  456. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
  457. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
  458. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
  459. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
  460. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
  461. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +7 -15
  462. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
  463. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
  464. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
  465. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
  466. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
  467. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  468. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  469. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
  470. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
  471. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
  472. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
  473. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
  474. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
  475. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  476. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  477. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  478. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  479. data/src/core/ext/xds/upb_utils.h +65 -0
  480. data/src/core/ext/xds/xds_api.cc +159 -3468
  481. data/src/core/ext/xds/xds_api.h +57 -558
  482. data/src/core/ext/xds/xds_bootstrap.cc +189 -122
  483. data/src/core/ext/xds/xds_bootstrap.h +30 -15
  484. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  485. data/src/core/ext/xds/xds_certificate_provider.h +2 -2
  486. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  487. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  488. data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
  489. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  490. data/src/core/ext/xds/xds_client.cc +751 -844
  491. data/src/core/ext/xds/xds_client.h +100 -143
  492. data/src/core/ext/xds/xds_client_stats.h +1 -1
  493. data/src/core/ext/xds/xds_cluster.cc +451 -0
  494. data/src/core/ext/xds/xds_cluster.h +111 -0
  495. data/src/core/ext/xds/xds_common_types.cc +388 -0
  496. data/src/core/ext/xds/xds_common_types.h +110 -0
  497. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  498. data/src/core/ext/xds/xds_endpoint.h +135 -0
  499. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  500. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  501. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  502. data/src/core/ext/xds/xds_listener.cc +1036 -0
  503. data/src/core/ext/xds/xds_listener.h +220 -0
  504. data/src/core/ext/{filters/workarounds/workaround_cronet_compression_filter.h → xds/xds_resource_type.cc} +14 -8
  505. data/src/core/ext/xds/xds_resource_type.h +98 -0
  506. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  507. data/src/core/ext/xds/xds_route_config.cc +993 -0
  508. data/src/core/ext/xds/xds_route_config.h +215 -0
  509. data/src/core/ext/xds/xds_routing.cc +250 -0
  510. data/src/core/ext/xds/xds_routing.h +101 -0
  511. data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -289
  512. data/src/core/lib/address_utils/parse_address.cc +22 -0
  513. data/src/core/lib/address_utils/parse_address.h +5 -0
  514. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  515. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  516. data/src/core/lib/avl/avl.h +389 -88
  517. data/src/core/lib/backoff/backoff.cc +6 -32
  518. data/src/core/lib/backoff/backoff.h +3 -3
  519. data/src/core/lib/channel/channel_args.cc +25 -8
  520. data/src/core/lib/channel/channel_args.h +11 -1
  521. data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
  522. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  523. data/src/core/lib/channel/channel_stack.cc +8 -0
  524. data/src/core/lib/channel/channel_stack.h +1 -1
  525. data/src/core/lib/channel/channel_stack_builder.cc +8 -14
  526. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  527. data/src/core/lib/channel/channel_trace.cc +7 -7
  528. data/src/core/lib/channel/channel_trace.h +1 -1
  529. data/src/core/lib/channel/channelz.cc +4 -3
  530. data/src/core/lib/channel/channelz.h +2 -2
  531. data/src/core/lib/channel/channelz_registry.cc +1 -1
  532. data/src/core/lib/channel/channelz_registry.h +1 -1
  533. data/src/core/lib/channel/connected_channel.cc +1 -3
  534. data/src/core/lib/channel/connected_channel.h +1 -2
  535. data/src/core/lib/compression/compression.cc +21 -113
  536. data/src/core/lib/compression/compression_internal.cc +142 -202
  537. data/src/core/lib/compression/compression_internal.h +64 -69
  538. data/src/core/lib/compression/message_compress.cc +11 -11
  539. data/src/core/lib/compression/message_compress.h +2 -2
  540. data/src/core/lib/config/core_configuration.cc +46 -2
  541. data/src/core/lib/config/core_configuration.h +50 -1
  542. data/src/core/lib/debug/stats.cc +1 -1
  543. data/src/core/lib/debug/stats_data.cc +13 -13
  544. data/src/core/lib/debug/trace.h +2 -2
  545. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  546. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  547. data/src/core/lib/event_engine/event_engine.cc +0 -13
  548. data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
  549. data/src/core/lib/event_engine/event_engine_factory.h +33 -0
  550. data/src/core/lib/event_engine/memory_allocator.cc +70 -0
  551. data/src/core/lib/gpr/atm.cc +1 -1
  552. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  553. data/src/core/lib/gpr/string.cc +2 -2
  554. data/src/core/lib/gpr/tls.h +7 -1
  555. data/src/core/lib/gpr/useful.h +83 -32
  556. data/src/core/lib/gprpp/bitset.h +45 -16
  557. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  558. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  559. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  560. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  561. data/src/core/lib/gprpp/global_config_env.h +2 -2
  562. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  563. data/src/core/lib/gprpp/memory.h +6 -0
  564. data/src/core/lib/gprpp/orphanable.h +1 -1
  565. data/src/core/lib/gprpp/ref_counted.h +1 -1
  566. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  567. data/src/core/lib/gprpp/status_helper.cc +35 -23
  568. data/src/core/lib/gprpp/status_helper.h +14 -16
  569. data/src/core/lib/gprpp/table.h +434 -0
  570. data/src/core/lib/http/httpcli.cc +215 -202
  571. data/src/core/lib/http/httpcli.h +17 -27
  572. data/src/core/lib/http/parser.cc +2 -2
  573. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  574. data/src/core/lib/iomgr/buffer_list.h +13 -13
  575. data/src/core/lib/iomgr/call_combiner.cc +44 -16
  576. data/src/core/lib/iomgr/closure.h +29 -9
  577. data/src/core/lib/iomgr/combiner.cc +31 -24
  578. data/src/core/lib/iomgr/endpoint.h +0 -1
  579. data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
  580. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  581. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  582. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  583. data/src/core/lib/iomgr/error.cc +115 -52
  584. data/src/core/lib/iomgr/error.h +53 -9
  585. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  586. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  587. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  588. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  589. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  590. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  591. data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
  592. data/src/core/lib/iomgr/event_engine/iomgr.cc +9 -28
  593. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  594. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  595. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  596. data/src/core/lib/iomgr/event_engine/resolver.cc +68 -46
  597. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  598. data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
  599. data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
  600. data/src/core/lib/iomgr/exec_ctx.cc +23 -18
  601. data/src/core/lib/iomgr/exec_ctx.h +11 -11
  602. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  603. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  604. data/src/core/lib/iomgr/executor.cc +26 -34
  605. data/src/core/lib/iomgr/executor.h +1 -1
  606. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  607. data/src/core/lib/iomgr/iomgr.cc +3 -1
  608. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  609. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  610. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  611. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  612. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  613. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  614. data/src/core/lib/iomgr/load_file.cc +2 -2
  615. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  616. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  617. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  618. data/src/core/lib/iomgr/port.h +2 -2
  619. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  620. data/src/core/lib/iomgr/resolve_address.h +47 -44
  621. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  622. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  623. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  624. data/src/core/lib/iomgr/resolve_address_posix.cc +87 -73
  625. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  626. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  627. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  628. data/src/core/lib/iomgr/resolved_address.h +39 -0
  629. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  630. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  631. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  632. data/src/core/lib/iomgr/tcp_client.cc +2 -4
  633. data/src/core/lib/iomgr/tcp_client.h +1 -3
  634. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -12
  635. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
  636. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
  637. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  638. data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
  639. data/src/core/lib/iomgr/tcp_custom.cc +9 -36
  640. data/src/core/lib/iomgr/tcp_custom.h +0 -1
  641. data/src/core/lib/iomgr/tcp_posix.cc +32 -38
  642. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  643. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  644. data/src/core/lib/iomgr/tcp_server.h +6 -8
  645. data/src/core/lib/iomgr/tcp_server_custom.cc +7 -16
  646. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
  647. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  648. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  649. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  650. data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
  651. data/src/core/lib/iomgr/tcp_windows.cc +4 -9
  652. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  653. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  654. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  655. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  656. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  657. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  658. data/src/core/lib/iomgr/work_serializer.cc +115 -44
  659. data/src/core/lib/iomgr/work_serializer.h +16 -4
  660. data/src/core/lib/json/json_reader.cc +83 -35
  661. data/src/core/lib/json/json_util.cc +69 -1
  662. data/src/core/lib/json/json_util.h +57 -99
  663. data/src/core/lib/json/json_writer.cc +0 -3
  664. data/src/core/lib/matchers/matchers.cc +1 -1
  665. data/src/core/lib/promise/activity.cc +115 -0
  666. data/src/core/lib/promise/activity.h +528 -0
  667. data/src/core/lib/promise/context.h +86 -0
  668. data/src/core/lib/promise/detail/basic_seq.h +407 -0
  669. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  670. data/src/core/lib/promise/detail/promise_like.h +85 -0
  671. data/src/core/lib/promise/detail/status.h +49 -0
  672. data/src/core/lib/promise/detail/switch.h +1455 -0
  673. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  674. data/src/core/lib/promise/loop.h +108 -0
  675. data/src/core/lib/promise/map.h +88 -0
  676. data/src/core/lib/promise/poll.h +60 -0
  677. data/src/core/lib/promise/race.h +84 -0
  678. data/src/core/lib/promise/seq.h +71 -0
  679. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  680. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  681. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +12 -5
  682. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +15 -17
  683. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +5 -7
  684. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  685. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  686. data/src/core/lib/resource_quota/api.cc +108 -0
  687. data/src/core/lib/resource_quota/api.h +40 -0
  688. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  689. data/src/core/lib/{gprpp → resource_quota}/arena.h +32 -11
  690. data/src/core/lib/resource_quota/memory_quota.cc +454 -0
  691. data/src/core/lib/resource_quota/memory_quota.h +421 -0
  692. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  693. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  694. data/src/core/lib/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
  695. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  696. data/src/core/lib/resource_quota/trace.cc +19 -0
  697. data/src/core/lib/resource_quota/trace.h +24 -0
  698. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  699. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  700. data/src/core/lib/security/authorization/evaluate_args.cc +41 -30
  701. data/src/core/lib/security/authorization/evaluate_args.h +3 -1
  702. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  703. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  704. data/src/core/lib/security/authorization/matchers.cc +227 -0
  705. data/src/core/lib/security/authorization/matchers.h +211 -0
  706. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  707. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  708. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
  709. data/src/core/lib/security/context/security_context.cc +8 -4
  710. data/src/core/lib/security/context/security_context.h +1 -1
  711. data/src/core/lib/security/credentials/composite/composite_credentials.cc +6 -6
  712. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  713. data/src/core/lib/security/credentials/credentials.cc +4 -2
  714. data/src/core/lib/security/credentials/credentials.h +16 -21
  715. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +8 -12
  716. data/src/core/lib/security/credentials/external/external_account_credentials.cc +57 -24
  717. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -7
  718. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
  719. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  720. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  721. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -9
  722. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  723. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  724. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  725. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -29
  726. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  727. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -24
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +53 -70
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -9
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  733. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  737. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +15 -88
  738. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +26 -82
  739. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  740. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  741. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  742. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
  743. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  744. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -6
  745. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  746. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
  747. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  748. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
  749. data/src/core/lib/security/security_connector/security_connector.cc +9 -8
  750. data/src/core/lib/security/security_connector/security_connector.h +6 -2
  751. data/src/core/lib/security/security_connector/ssl_utils.cc +25 -27
  752. data/src/core/lib/security/security_connector/ssl_utils.h +6 -15
  753. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +347 -198
  754. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
  755. data/src/core/lib/security/transport/auth_filters.h +7 -0
  756. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  757. data/src/core/lib/security/transport/security_handshaker.cc +75 -45
  758. data/src/core/lib/security/transport/server_auth_filter.cc +40 -37
  759. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  760. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.cc +2 -2
  761. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.h +4 -4
  762. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  763. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +3 -3
  764. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +8 -6
  765. data/src/core/lib/slice/percent_encoding.cc +30 -86
  766. data/src/core/lib/slice/percent_encoding.h +5 -11
  767. data/src/core/lib/slice/slice.cc +10 -24
  768. data/src/core/lib/slice/slice.h +371 -0
  769. data/src/core/lib/{compression/stream_compression_gzip.h → slice/slice_api.cc} +18 -7
  770. data/src/core/lib/slice/slice_buffer.cc +9 -5
  771. data/src/core/lib/slice/slice_intern.cc +4 -107
  772. data/src/core/lib/slice/slice_internal.h +2 -246
  773. data/src/core/lib/slice/slice_refcount.cc +17 -0
  774. data/src/core/lib/slice/slice_refcount.h +116 -0
  775. data/src/core/lib/slice/slice_refcount_base.h +165 -0
  776. data/src/core/lib/slice/slice_split.cc +100 -0
  777. data/src/core/lib/slice/slice_split.h +40 -0
  778. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  779. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  780. data/src/core/lib/surface/builtins.cc +49 -0
  781. data/src/core/lib/surface/builtins.h +26 -0
  782. data/src/core/lib/surface/call.cc +249 -482
  783. data/src/core/lib/surface/call.h +4 -10
  784. data/src/core/lib/surface/channel.cc +53 -93
  785. data/src/core/lib/surface/channel.h +6 -25
  786. data/src/core/lib/surface/channel_init.cc +23 -76
  787. data/src/core/lib/surface/channel_init.h +52 -44
  788. data/src/core/lib/surface/completion_queue.cc +8 -7
  789. data/src/core/lib/surface/init.cc +0 -42
  790. data/src/core/lib/surface/init_secure.cc +17 -14
  791. data/src/core/lib/surface/lame_client.cc +41 -28
  792. data/src/core/lib/surface/lame_client.h +1 -1
  793. data/src/core/lib/surface/server.cc +46 -55
  794. data/src/core/lib/surface/server.h +27 -21
  795. data/src/core/lib/surface/validate_metadata.cc +7 -4
  796. data/src/core/lib/surface/version.cc +2 -2
  797. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  798. data/src/core/lib/transport/byte_stream.cc +4 -0
  799. data/src/core/lib/transport/error_utils.cc +42 -17
  800. data/src/core/lib/transport/error_utils.h +15 -1
  801. data/src/core/lib/transport/metadata_batch.h +1167 -176
  802. data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +14 -17
  803. data/src/core/lib/transport/parsed_metadata.h +385 -0
  804. data/src/core/lib/transport/pid_controller.cc +4 -4
  805. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  806. data/src/core/lib/transport/timeout_encoding.h +40 -10
  807. data/src/core/lib/transport/transport.cc +8 -31
  808. data/src/core/lib/transport/transport.h +1 -2
  809. data/src/core/lib/transport/transport_op_string.cc +7 -20
  810. data/src/core/lib/uri/uri_parser.cc +233 -63
  811. data/src/core/lib/uri/uri_parser.h +38 -23
  812. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -45
  813. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  814. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  815. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  816. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -4
  817. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  820. data/src/core/tsi/fake_transport_security.cc +15 -7
  821. data/src/core/tsi/local_transport_security.cc +43 -80
  822. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  823. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  824. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  825. data/src/core/tsi/ssl_transport_security.cc +93 -16
  826. data/src/core/tsi/ssl_transport_security.h +19 -6
  827. data/src/core/tsi/transport_security.cc +12 -0
  828. data/src/core/tsi/transport_security.h +16 -1
  829. data/src/core/tsi/transport_security_interface.h +26 -0
  830. data/src/ruby/ext/grpc/extconf.rb +21 -11
  831. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -10
  832. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -15
  833. data/src/ruby/lib/grpc/version.rb +1 -1
  834. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  835. data/src/ruby/spec/client_server_spec.rb +1 -1
  836. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  837. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  838. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  839. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  840. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  841. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  842. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  843. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  844. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  845. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  846. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  847. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  848. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  849. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  850. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  851. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  852. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  853. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  854. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  855. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  856. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  857. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  858. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  859. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  860. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  861. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  862. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  863. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  864. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  865. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  866. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  867. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  868. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  869. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  870. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  871. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  872. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  873. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  874. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  875. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  876. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  877. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  878. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  879. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  880. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  881. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  882. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  883. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  884. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  885. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  886. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  887. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  888. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  889. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  890. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  891. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  892. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  893. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  894. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  895. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  896. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  897. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  898. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  899. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  900. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  901. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  902. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  903. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  904. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  905. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  906. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  907. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  908. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  909. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  910. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  911. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  912. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  913. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  914. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  915. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  916. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  917. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  918. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  919. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  920. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  921. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  922. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  923. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  924. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  925. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  926. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  927. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  928. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  930. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  931. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  932. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  933. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  934. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  935. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  936. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  937. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  938. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  939. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  940. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  956. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  960. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  961. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  962. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  963. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  964. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  970. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  971. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  972. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  975. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  976. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  977. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  978. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  979. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  980. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  981. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  982. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  983. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  984. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  985. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  987. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  988. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  989. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  990. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  991. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  993. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  994. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  995. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  996. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  997. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  998. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  999. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1000. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  1001. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1002. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  1003. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1004. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1005. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1006. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +41 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1009. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1011. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1013. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1014. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1015. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  1024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1029. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1030. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1034. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1035. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1036. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1037. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1038. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1039. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1040. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1041. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1042. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1043. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1044. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1045. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1046. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1047. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1048. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1050. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1051. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  1052. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1019 -274
  1053. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1054. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  1055. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1056. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1057. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1058. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1059. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1060. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1061. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1062. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1063. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1064. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1065. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1066. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1067. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +31 -13
  1068. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +491 -58
  1069. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  1070. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1071. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1072. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1073. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1074. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  1075. data/third_party/re2/re2/compile.cc +91 -109
  1076. data/third_party/re2/re2/dfa.cc +27 -39
  1077. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1078. data/third_party/re2/re2/filtered_re2.h +10 -5
  1079. data/third_party/re2/re2/nfa.cc +1 -1
  1080. data/third_party/re2/re2/parse.cc +42 -23
  1081. data/third_party/re2/re2/perl_groups.cc +34 -34
  1082. data/third_party/re2/re2/prefilter.cc +3 -2
  1083. data/third_party/re2/re2/prog.cc +182 -4
  1084. data/third_party/re2/re2/prog.h +28 -9
  1085. data/third_party/re2/re2/re2.cc +87 -118
  1086. data/third_party/re2/re2/re2.h +156 -141
  1087. data/third_party/re2/re2/regexp.cc +12 -5
  1088. data/third_party/re2/re2/regexp.h +8 -2
  1089. data/third_party/re2/re2/set.cc +31 -9
  1090. data/third_party/re2/re2/set.h +9 -4
  1091. data/third_party/re2/re2/simplify.cc +11 -3
  1092. data/third_party/re2/re2/tostring.cc +1 -1
  1093. data/third_party/re2/re2/walker-inl.h +1 -1
  1094. data/third_party/re2/util/mutex.h +2 -2
  1095. data/third_party/re2/util/pcre.h +3 -3
  1096. data/third_party/upb/upb/decode.c +309 -178
  1097. data/third_party/upb/upb/decode_fast.c +1 -1
  1098. data/third_party/upb/upb/decode_internal.h +1 -0
  1099. data/third_party/upb/upb/def.c +330 -85
  1100. data/third_party/upb/upb/def.h +45 -14
  1101. data/third_party/upb/upb/def.hpp +17 -4
  1102. data/third_party/upb/upb/encode.c +100 -40
  1103. data/third_party/upb/upb/msg.c +22 -9
  1104. data/third_party/upb/upb/msg_internal.h +90 -8
  1105. data/third_party/upb/upb/reflection.c +98 -58
  1106. data/third_party/upb/upb/reflection.h +6 -2
  1107. data/third_party/upb/upb/text_encode.c +3 -3
  1108. data/third_party/upb/upb/upb.c +8 -0
  1109. data/third_party/xxhash/xxhash.h +607 -352
  1110. metadata +259 -115
  1111. data/include/grpc/event_engine/slice_allocator.h +0 -71
  1112. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1113. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1114. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1115. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1116. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1117. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1118. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  1119. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1120. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1121. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1122. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1123. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1124. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1125. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1126. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  1127. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1128. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  1129. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1130. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1131. data/src/core/lib/avl/avl.cc +0 -306
  1132. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1133. data/src/core/lib/compression/compression_args.cc +0 -136
  1134. data/src/core/lib/compression/compression_args.h +0 -56
  1135. data/src/core/lib/compression/stream_compression.cc +0 -81
  1136. data/src/core/lib/compression/stream_compression.h +0 -117
  1137. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1138. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1139. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1140. data/src/core/lib/gprpp/match.h +0 -73
  1141. data/src/core/lib/gprpp/overload.h +0 -59
  1142. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1143. data/src/core/lib/iomgr/resource_quota.cc +0 -1104
  1144. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1145. data/src/core/lib/iomgr/udp_server.cc +0 -747
  1146. data/src/core/lib/iomgr/udp_server.h +0 -103
  1147. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1148. data/src/core/lib/transport/metadata.cc +0 -693
  1149. data/src/core/lib/transport/metadata.h +0 -448
  1150. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1151. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1152. data/src/core/lib/transport/static_metadata.h +0 -604
  1153. data/src/core/lib/transport/status_metadata.cc +0 -62
  1154. data/src/core/lib/transport/status_metadata.h +0 -48
  1155. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1156. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -48,11 +48,8 @@
48
48
  #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
49
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
50
50
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
51
- #include "src/core/ext/filters/client_channel/resolver_registry.h"
52
51
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
53
52
  #include "src/core/ext/filters/client_channel/retry_filter.h"
54
- #include "src/core/ext/filters/client_channel/service_config.h"
55
- #include "src/core/ext/filters/client_channel/service_config_call_data.h"
56
53
  #include "src/core/ext/filters/client_channel/subchannel.h"
57
54
  #include "src/core/ext/filters/deadline/deadline_filter.h"
58
55
  #include "src/core/lib/backoff/backoff.h"
@@ -65,20 +62,23 @@
65
62
  #include "src/core/lib/iomgr/polling_entity.h"
66
63
  #include "src/core/lib/iomgr/work_serializer.h"
67
64
  #include "src/core/lib/profiling/timers.h"
65
+ #include "src/core/lib/resolver/resolver_registry.h"
66
+ #include "src/core/lib/service_config/service_config.h"
67
+ #include "src/core/lib/service_config/service_config_call_data.h"
68
68
  #include "src/core/lib/slice/slice_internal.h"
69
69
  #include "src/core/lib/slice/slice_string_helpers.h"
70
70
  #include "src/core/lib/surface/channel.h"
71
71
  #include "src/core/lib/transport/connectivity_state.h"
72
72
  #include "src/core/lib/transport/error_utils.h"
73
- #include "src/core/lib/transport/metadata.h"
74
73
  #include "src/core/lib/transport/metadata_batch.h"
75
- #include "src/core/lib/transport/static_metadata.h"
76
- #include "src/core/lib/transport/status_metadata.h"
77
74
 
78
75
  //
79
76
  // Client channel filter
80
77
  //
81
78
 
79
+ #define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
80
+ "grpc.internal.health_check_service_name"
81
+
82
82
  namespace grpc_core {
83
83
 
84
84
  using internal::ClientChannelGlobalParsedConfig;
@@ -254,7 +254,7 @@ namespace {
254
254
  // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
255
255
  void* ClientChannelArgCopy(void* p) { return p; }
256
256
  void ClientChannelArgDestroy(void* /*p*/) {}
257
- int ClientChannelArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
257
+ int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
258
258
  const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
259
259
  ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
260
260
 
@@ -268,7 +268,7 @@ void ServiceConfigObjArgDestroy(void* p) {
268
268
  auto* service_config = static_cast<ServiceConfig*>(p);
269
269
  service_config->Unref();
270
270
  }
271
- int ServiceConfigObjArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
271
+ int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
272
272
  const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
273
273
  ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
274
274
  ServiceConfigObjArgCmp};
@@ -346,8 +346,9 @@ class DynamicTerminationFilter::CallData {
346
346
  calld->call_context_, calld->path_,
347
347
  /*start_time=*/0, calld->deadline_,
348
348
  calld->arena_, calld->call_combiner_};
349
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
350
- calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
349
+ auto* service_config_call_data =
350
+ static_cast<ClientChannelServiceConfigCallData*>(
351
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
351
352
  calld->lb_call_ = client_channel->CreateLoadBalancedCall(
352
353
  args, pollent, nullptr,
353
354
  service_config_call_data->call_dispatch_controller(),
@@ -413,16 +414,11 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
413
414
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
414
415
  }
415
416
 
416
- void ReturnResult(Resolver::Result result) override
417
+ void ReportResult(Resolver::Result result) override
417
418
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
418
419
  chand_->OnResolverResultChangedLocked(std::move(result));
419
420
  }
420
421
 
421
- void ReturnError(grpc_error_handle error) override
422
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
423
- chand_->OnResolverErrorLocked(error);
424
- }
425
-
426
422
  private:
427
423
  ClientChannel* chand_;
428
424
  };
@@ -456,15 +452,17 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
456
452
  chand, this, subchannel_.get());
457
453
  }
458
454
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
459
- auto* subchannel_node = subchannel_->channelz_node();
460
- if (subchannel_node != nullptr) {
461
- auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
462
- if (it == chand_->subchannel_refcount_map_.end()) {
463
- chand_->channelz_node_->AddChildSubchannel(subchannel_node->uuid());
464
- it = chand_->subchannel_refcount_map_.emplace(subchannel_.get(), 0)
465
- .first;
455
+ if (chand_->channelz_node_ != nullptr) {
456
+ auto* subchannel_node = subchannel_->channelz_node();
457
+ if (subchannel_node != nullptr) {
458
+ auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
459
+ if (it == chand_->subchannel_refcount_map_.end()) {
460
+ chand_->channelz_node_->AddChildSubchannel(subchannel_node->uuid());
461
+ it = chand_->subchannel_refcount_map_.emplace(subchannel_.get(), 0)
462
+ .first;
463
+ }
464
+ ++it->second;
466
465
  }
467
- ++it->second;
468
466
  }
469
467
  chand_->subchannel_wrappers_.insert(this);
470
468
  }
@@ -476,32 +474,30 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
476
474
  chand_, this, subchannel_.get());
477
475
  }
478
476
  chand_->subchannel_wrappers_.erase(this);
479
- auto* subchannel_node = subchannel_->channelz_node();
480
- if (subchannel_node != nullptr) {
481
- auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
482
- GPR_ASSERT(it != chand_->subchannel_refcount_map_.end());
483
- --it->second;
484
- if (it->second == 0) {
485
- chand_->channelz_node_->RemoveChildSubchannel(subchannel_node->uuid());
486
- chand_->subchannel_refcount_map_.erase(it);
477
+ if (chand_->channelz_node_ != nullptr) {
478
+ auto* subchannel_node = subchannel_->channelz_node();
479
+ if (subchannel_node != nullptr) {
480
+ auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
481
+ GPR_ASSERT(it != chand_->subchannel_refcount_map_.end());
482
+ --it->second;
483
+ if (it->second == 0) {
484
+ chand_->channelz_node_->RemoveChildSubchannel(
485
+ subchannel_node->uuid());
486
+ chand_->subchannel_refcount_map_.erase(it);
487
+ }
487
488
  }
488
489
  }
489
490
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
490
491
  }
491
492
 
492
- grpc_connectivity_state CheckConnectivityState() override
493
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
494
- RefCountedPtr<ConnectedSubchannel> connected_subchannel;
495
- grpc_connectivity_state connectivity_state =
496
- subchannel_->CheckConnectivityState(health_check_service_name_,
497
- &connected_subchannel);
498
- MaybeUpdateConnectedSubchannel(std::move(connected_subchannel));
499
- return connectivity_state;
493
+ grpc_connectivity_state CheckConnectivityState() override {
494
+ return subchannel_->CheckConnectivityState(health_check_service_name_);
500
495
  }
501
496
 
502
497
  void WatchConnectivityState(
503
498
  grpc_connectivity_state initial_state,
504
- std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override {
499
+ std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
500
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
505
501
  auto& watcher_wrapper = watcher_map_[watcher.get()];
506
502
  GPR_ASSERT(watcher_wrapper == nullptr);
507
503
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
@@ -513,8 +509,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
513
509
  watcher_wrapper));
514
510
  }
515
511
 
516
- void CancelConnectivityStateWatch(
517
- ConnectivityStateWatcherInterface* watcher) override {
512
+ void CancelConnectivityStateWatch(ConnectivityStateWatcherInterface* watcher)
513
+ override ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
518
514
  auto it = watcher_map_.find(watcher);
519
515
  GPR_ASSERT(it != watcher_map_.end());
520
516
  subchannel_->CancelConnectivityStateWatch(health_check_service_name_,
@@ -522,6 +518,10 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
522
518
  watcher_map_.erase(it);
523
519
  }
524
520
 
521
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel() const {
522
+ return subchannel_->connected_subchannel();
523
+ }
524
+
525
525
  void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
526
526
 
527
527
  void ResetBackoff() override { subchannel_->ResetBackoff(); }
@@ -534,57 +534,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
534
534
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
535
535
  }
536
536
 
537
- void UpdateHealthCheckServiceName(
538
- absl::optional<std::string> health_check_service_name) {
539
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
540
- gpr_log(GPR_INFO,
541
- "chand=%p: subchannel wrapper %p: updating health check service "
542
- "name from \"%s\" to \"%s\"",
543
- chand_, this, health_check_service_name_->c_str(),
544
- health_check_service_name->c_str());
545
- }
546
- for (auto& p : watcher_map_) {
547
- WatcherWrapper*& watcher_wrapper = p.second;
548
- // Cancel the current watcher and create a new one using the new
549
- // health check service name.
550
- // TODO(roth): If there is not already an existing health watch
551
- // call for the new name, then the watcher will initially report
552
- // state CONNECTING. If the LB policy is currently reporting
553
- // state READY, this may cause it to switch to CONNECTING before
554
- // switching back to READY. This could cause a small delay for
555
- // RPCs being started on the channel. If/when this becomes a
556
- // problem, we may be able to handle it by waiting for the new
557
- // watcher to report READY before we use it to replace the old one.
558
- WatcherWrapper* replacement = watcher_wrapper->MakeReplacement();
559
- subchannel_->CancelConnectivityStateWatch(health_check_service_name_,
560
- watcher_wrapper);
561
- watcher_wrapper = replacement;
562
- subchannel_->WatchConnectivityState(
563
- replacement->last_seen_state(), health_check_service_name,
564
- RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
565
- replacement));
566
- }
567
- // Save the new health check service name.
568
- health_check_service_name_ = std::move(health_check_service_name);
569
- }
570
-
571
- // Caller must be holding the control-plane work_serializer.
572
- ConnectedSubchannel* connected_subchannel() const
573
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::work_serializer_) {
574
- return connected_subchannel_.get();
575
- }
576
-
577
- // Caller must be holding the data-plane mutex.
578
- ConnectedSubchannel* connected_subchannel_in_data_plane() const
579
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
580
- return connected_subchannel_in_data_plane_.get();
581
- }
582
- void set_connected_subchannel_in_data_plane(
583
- RefCountedPtr<ConnectedSubchannel> connected_subchannel)
584
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
585
- connected_subchannel_in_data_plane_ = std::move(connected_subchannel);
586
- }
587
-
588
537
  private:
589
538
  // Subchannel and SubchannelInterface have different interfaces for
590
539
  // their respective ConnectivityStateWatcherInterface classes.
@@ -696,8 +645,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
696
645
  // since this callback was scheduled.
697
646
  if (watcher_ != nullptr) {
698
647
  last_seen_state_ = state_change.state;
699
- parent_->MaybeUpdateConnectedSubchannel(
700
- std::move(state_change.connected_subchannel));
701
648
  watcher_->OnConnectivityStateChange(state_change.state);
702
649
  }
703
650
  }
@@ -709,28 +656,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
709
656
  WatcherWrapper* replacement_ = nullptr;
710
657
  };
711
658
 
712
- void MaybeUpdateConnectedSubchannel(
713
- RefCountedPtr<ConnectedSubchannel> connected_subchannel)
714
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::work_serializer_) {
715
- // Update the connected subchannel only if the channel is not shutting
716
- // down. This is because once the channel is shutting down, we
717
- // ignore picker updates from the LB policy, which means that
718
- // UpdateStateAndPickerLocked() will never process the entries
719
- // in chand_->pending_subchannel_updates_. So we don't want to add
720
- // entries there that will never be processed, since that would
721
- // leave dangling refs to the channel and prevent its destruction.
722
- grpc_error_handle disconnect_error = chand_->disconnect_error();
723
- if (disconnect_error != GRPC_ERROR_NONE) return;
724
- // Not shutting down, so do the update.
725
- if (connected_subchannel_ != connected_subchannel) {
726
- connected_subchannel_ = std::move(connected_subchannel);
727
- // Record the new connected subchannel so that it can be updated
728
- // in the data plane mutex the next time the picker is updated.
729
- chand_->pending_subchannel_updates_[Ref(
730
- DEBUG_LOCATION, "ConnectedSubchannelUpdate")] = connected_subchannel_;
731
- }
732
- }
733
-
734
659
  ClientChannel* chand_;
735
660
  RefCountedPtr<Subchannel> subchannel_;
736
661
  absl::optional<std::string> health_check_service_name_;
@@ -739,13 +664,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
739
664
  // subchannel. This is needed so that when the LB policy calls
740
665
  // CancelConnectivityStateWatch() with its watcher, we know the
741
666
  // corresponding WrapperWatcher to cancel on the underlying subchannel.
742
- std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_;
743
- // To be accessed only in the control plane work_serializer.
744
- RefCountedPtr<ConnectedSubchannel> connected_subchannel_
667
+ std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
745
668
  ABSL_GUARDED_BY(&ClientChannel::work_serializer_);
746
- // To be accessed only in the data plane mutex.
747
- RefCountedPtr<ConnectedSubchannel> connected_subchannel_in_data_plane_
748
- ABSL_GUARDED_BY(&ClientChannel::data_plane_mu_);
749
669
  };
750
670
 
751
671
  //
@@ -942,35 +862,62 @@ class ClientChannel::ClientChannelControlHelper
942
862
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
943
863
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
944
864
  // Determine health check service name.
945
- bool inhibit_health_checking = grpc_channel_args_find_bool(
946
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
947
865
  absl::optional<std::string> health_check_service_name;
948
- if (!inhibit_health_checking) {
949
- health_check_service_name = chand_->health_check_service_name_;
866
+ const char* health_check_service_name_arg = grpc_channel_args_find_string(
867
+ &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
868
+ if (health_check_service_name_arg != nullptr) {
869
+ bool inhibit_health_checking = grpc_channel_args_find_bool(
870
+ &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
871
+ if (!inhibit_health_checking) {
872
+ health_check_service_name = health_check_service_name_arg;
873
+ }
950
874
  }
875
+ // Construct channel args for subchannel.
951
876
  // Remove channel args that should not affect subchannel uniqueness.
952
- static const char* args_to_remove[] = {
877
+ absl::InlinedVector<const char*, 4> args_to_remove = {
878
+ GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
953
879
  GRPC_ARG_INHIBIT_HEALTH_CHECKING,
954
880
  GRPC_ARG_CHANNELZ_CHANNEL_NODE,
955
881
  };
956
882
  // Add channel args needed for the subchannel.
957
- absl::InlinedVector<grpc_arg, 3> args_to_add = {
958
- Subchannel::CreateSubchannelAddressArg(&address.address()),
883
+ absl::InlinedVector<grpc_arg, 2> args_to_add = {
959
884
  SubchannelPoolInterface::CreateChannelArg(
960
885
  chand_->subchannel_pool_.get()),
961
886
  };
887
+ // Check if default authority arg is already set.
888
+ const char* default_authority =
889
+ grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
890
+ // Add args from subchannel address.
962
891
  if (address.args() != nullptr) {
963
892
  for (size_t j = 0; j < address.args()->num_args; ++j) {
964
- args_to_add.emplace_back(address.args()->args[j]);
893
+ grpc_arg& arg = address.args()->args[j];
894
+ if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
895
+ // Don't add default authority arg from subchannel address if
896
+ // it's already set at the channel level -- the value from the
897
+ // application should take precedence over what is set by the
898
+ // resolver.
899
+ if (default_authority != nullptr) continue;
900
+ default_authority = arg.value.string;
901
+ }
902
+ args_to_add.emplace_back(arg);
965
903
  }
966
904
  }
905
+ // If we haven't already set the default authority arg, add it from
906
+ // the channel.
907
+ if (default_authority == nullptr) {
908
+ // Remove it, just in case it's actually present but is the wrong type.
909
+ args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
910
+ args_to_add.push_back(grpc_channel_arg_string_create(
911
+ const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
912
+ const_cast<char*>(chand_->default_authority_.c_str())));
913
+ }
967
914
  grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
968
- &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove),
969
- args_to_add.data(), args_to_add.size());
970
- gpr_free(args_to_add[0].value.string);
915
+ &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
916
+ args_to_add.size());
971
917
  // Create subchannel.
972
918
  RefCountedPtr<Subchannel> subchannel =
973
- chand_->client_channel_factory_->CreateSubchannel(new_args);
919
+ chand_->client_channel_factory_->CreateSubchannel(address.address(),
920
+ new_args);
974
921
  grpc_channel_args_destroy(new_args);
975
922
  if (subchannel == nullptr) return nullptr;
976
923
  // Make sure the subchannel has updated keepalive time.
@@ -985,9 +932,8 @@ class ClientChannel::ClientChannelControlHelper
985
932
  std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override
986
933
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
987
934
  if (chand_->resolver_ == nullptr) return; // Shutting down.
988
- grpc_error_handle disconnect_error = chand_->disconnect_error();
989
935
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
990
- const char* extra = disconnect_error == GRPC_ERROR_NONE
936
+ const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
991
937
  ? ""
992
938
  : " (ignoring -- channel shutting down)";
993
939
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -995,7 +941,7 @@ class ClientChannel::ClientChannelControlHelper
995
941
  picker.get(), extra);
996
942
  }
997
943
  // Do update only if not shutting down.
998
- if (disconnect_error == GRPC_ERROR_NONE) {
944
+ if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
999
945
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
1000
946
  std::move(picker));
1001
947
  }
@@ -1010,6 +956,10 @@ class ClientChannel::ClientChannelControlHelper
1010
956
  chand_->resolver_->RequestReresolutionLocked();
1011
957
  }
1012
958
 
959
+ absl::string_view GetAuthority() override {
960
+ return chand_->default_authority_;
961
+ }
962
+
1013
963
  void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
1014
964
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
1015
965
  if (chand_->resolver_ == nullptr) return; // Shutting down.
@@ -1086,8 +1036,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1086
1036
  interested_parties_(grpc_pollset_set_create()),
1087
1037
  work_serializer_(std::make_shared<WorkSerializer>()),
1088
1038
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1089
- subchannel_pool_(GetSubchannelPool(args->channel_args)),
1090
- disconnect_error_(GRPC_ERROR_NONE) {
1039
+ subchannel_pool_(GetSubchannelPool(args->channel_args)) {
1091
1040
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1092
1041
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1093
1042
  this, owning_stack_);
@@ -1100,15 +1049,6 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1100
1049
  "Missing client channel factory in args for client channel filter");
1101
1050
  return;
1102
1051
  }
1103
- // Get server name to resolve, using proxy mapper if needed.
1104
- const char* server_uri =
1105
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1106
- if (server_uri == nullptr) {
1107
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1108
- "server URI channel arg missing or wrong type in client channel "
1109
- "filter");
1110
- return;
1111
- }
1112
1052
  // Get default service config. If none is specified via the client API,
1113
1053
  // we use an empty config.
1114
1054
  const char* service_config_json = grpc_channel_args_find_string(
@@ -1121,30 +1061,50 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1121
1061
  default_service_config_.reset();
1122
1062
  return;
1123
1063
  }
1124
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
1125
- if (uri.ok() && !uri->path().empty()) {
1126
- server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
1064
+ // Get URI to resolve, using proxy mapper if needed.
1065
+ const char* server_uri =
1066
+ grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1067
+ if (server_uri == nullptr) {
1068
+ *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1069
+ "target URI channel arg missing or wrong type in client channel "
1070
+ "filter");
1071
+ return;
1127
1072
  }
1073
+ uri_to_resolve_ = server_uri;
1128
1074
  char* proxy_name = nullptr;
1129
1075
  grpc_channel_args* new_args = nullptr;
1130
1076
  ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1131
1077
  &new_args);
1132
- target_uri_.reset(proxy_name != nullptr ? proxy_name
1133
- : gpr_strdup(server_uri));
1078
+ if (proxy_name != nullptr) {
1079
+ uri_to_resolve_ = proxy_name;
1080
+ gpr_free(proxy_name);
1081
+ }
1082
+ // Make sure the URI to resolve is valid, so that we know that
1083
+ // resolver creation will succeed later.
1084
+ if (!ResolverRegistry::IsValidTarget(uri_to_resolve_)) {
1085
+ *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1086
+ absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
1087
+ return;
1088
+ }
1134
1089
  // Strip out service config channel arg, so that it doesn't affect
1135
1090
  // subchannel uniqueness when the args flow down to that layer.
1136
1091
  const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1137
1092
  channel_args_ = grpc_channel_args_copy_and_remove(
1138
1093
  new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1139
1094
  grpc_channel_args_destroy(new_args);
1095
+ // Set initial keepalive time.
1140
1096
  keepalive_time_ = grpc_channel_args_find_integer(
1141
1097
  channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1142
1098
  {-1 /* default value, unset */, 1, INT_MAX});
1143
- if (!ResolverRegistry::IsValidTarget(target_uri_.get())) {
1144
- *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1145
- absl::StrCat("the target uri is not valid: ", target_uri_.get()));
1146
- return;
1099
+ // Set default authority.
1100
+ const char* default_authority =
1101
+ grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1102
+ if (default_authority == nullptr) {
1103
+ default_authority_ = ResolverRegistry::GetDefaultAuthority(server_uri);
1104
+ } else {
1105
+ default_authority_ = default_authority;
1147
1106
  }
1107
+ // Success.
1148
1108
  *error = GRPC_ERROR_NONE;
1149
1109
  }
1150
1110
 
@@ -1154,11 +1114,10 @@ ClientChannel::~ClientChannel() {
1154
1114
  }
1155
1115
  DestroyResolverAndLbPolicyLocked();
1156
1116
  grpc_channel_args_destroy(channel_args_);
1157
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1158
1117
  // Stop backup polling.
1159
1118
  grpc_client_channel_stop_backup_polling(interested_parties_);
1160
1119
  grpc_pollset_set_destroy(interested_parties_);
1161
- GRPC_ERROR_UNREF(disconnect_error_.load(std::memory_order_relaxed));
1120
+ GRPC_ERROR_UNREF(disconnect_error_);
1162
1121
  }
1163
1122
 
1164
1123
  OrphanablePtr<ClientChannel::LoadBalancedCall>
@@ -1235,26 +1194,29 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1235
1194
  //
1236
1195
  // We track a list of strings to eventually be concatenated and traced.
1237
1196
  absl::InlinedVector<const char*, 3> trace_strings;
1238
- if (result.addresses.empty() && previous_resolution_contained_addresses_) {
1197
+ const bool resolution_contains_addresses =
1198
+ result.addresses.ok() && !result.addresses->empty();
1199
+ if (!resolution_contains_addresses &&
1200
+ previous_resolution_contained_addresses_) {
1239
1201
  trace_strings.push_back("Address list became empty");
1240
- } else if (!result.addresses.empty() &&
1202
+ } else if (resolution_contains_addresses &&
1241
1203
  !previous_resolution_contained_addresses_) {
1242
1204
  trace_strings.push_back("Address list became non-empty");
1243
1205
  }
1244
- previous_resolution_contained_addresses_ = !result.addresses.empty();
1206
+ previous_resolution_contained_addresses_ = resolution_contains_addresses;
1245
1207
  std::string service_config_error_string_storage;
1246
- if (result.service_config_error != GRPC_ERROR_NONE) {
1208
+ if (!result.service_config.ok()) {
1247
1209
  service_config_error_string_storage =
1248
- grpc_error_std_string(result.service_config_error);
1210
+ result.service_config.status().ToString();
1249
1211
  trace_strings.push_back(service_config_error_string_storage.c_str());
1250
1212
  }
1251
1213
  // Choose the service config.
1252
1214
  RefCountedPtr<ServiceConfig> service_config;
1253
1215
  RefCountedPtr<ConfigSelector> config_selector;
1254
- if (result.service_config_error != GRPC_ERROR_NONE) {
1216
+ if (!result.service_config.ok()) {
1255
1217
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1256
1218
  gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
1257
- this, grpc_error_std_string(result.service_config_error).c_str());
1219
+ this, result.service_config.status().ToString().c_str());
1258
1220
  }
1259
1221
  // If the service config was invalid, then fallback to the
1260
1222
  // previously returned service config.
@@ -1268,13 +1230,13 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1268
1230
  service_config = saved_service_config_;
1269
1231
  config_selector = saved_config_selector_;
1270
1232
  } else {
1271
- // We received an invalid service config and we don't have a
1233
+ // We received a service config error and we don't have a
1272
1234
  // previous service config to fall back to. Put the channel into
1273
1235
  // TRANSIENT_FAILURE.
1274
- OnResolverErrorLocked(GRPC_ERROR_REF(result.service_config_error));
1236
+ OnResolverErrorLocked(result.service_config.status());
1275
1237
  trace_strings.push_back("no valid service config");
1276
1238
  }
1277
- } else if (result.service_config == nullptr) {
1239
+ } else if (*result.service_config == nullptr) {
1278
1240
  // Resolver did not return any service config.
1279
1241
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1280
1242
  gpr_log(GPR_INFO,
@@ -1285,9 +1247,12 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1285
1247
  service_config = default_service_config_;
1286
1248
  } else {
1287
1249
  // Use ServiceConfig and ConfigSelector returned by resolver.
1288
- service_config = result.service_config;
1250
+ service_config = std::move(*result.service_config);
1289
1251
  config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1290
1252
  }
1253
+ // Note: The only case in which service_config is null here is if the resolver
1254
+ // returned a service config error and we don't have a previous service
1255
+ // config to fall back to.
1291
1256
  if (service_config != nullptr) {
1292
1257
  // Extract global config for client channel.
1293
1258
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
@@ -1307,15 +1272,16 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1307
1272
  // If either has changed, apply the global parameters now.
1308
1273
  if (service_config_changed || config_selector_changed) {
1309
1274
  // Update service config in control plane.
1310
- UpdateServiceConfigInControlPlaneLocked(
1311
- std::move(service_config), std::move(config_selector),
1312
- parsed_service_config, lb_policy_config->name());
1275
+ UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1276
+ std::move(config_selector),
1277
+ lb_policy_config->name());
1313
1278
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1314
1279
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1315
1280
  }
1316
1281
  // Create or update LB policy, as needed.
1317
- CreateOrUpdateLbPolicyLocked(std::move(lb_policy_config),
1318
- std::move(result));
1282
+ CreateOrUpdateLbPolicyLocked(
1283
+ std::move(lb_policy_config),
1284
+ parsed_service_config->health_check_service_name(), std::move(result));
1319
1285
  if (service_config_changed || config_selector_changed) {
1320
1286
  // Start using new service config for calls.
1321
1287
  // This needs to happen after the LB policy has been updated, since
@@ -1338,28 +1304,21 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1338
1304
  }
1339
1305
  }
1340
1306
 
1341
- void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
1342
- if (resolver_ == nullptr) {
1343
- GRPC_ERROR_UNREF(error);
1344
- return;
1345
- }
1307
+ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1308
+ if (resolver_ == nullptr) return;
1346
1309
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1347
1310
  gpr_log(GPR_INFO, "chand=%p: resolver transient failure: %s", this,
1348
- grpc_error_std_string(error).c_str());
1311
+ status.ToString().c_str());
1349
1312
  }
1350
1313
  // If we already have an LB policy from a previous resolution
1351
1314
  // result, then we continue to let it set the connectivity state.
1352
1315
  // Otherwise, we go into TRANSIENT_FAILURE.
1353
1316
  if (lb_policy_ == nullptr) {
1354
- grpc_error_handle state_error =
1355
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1356
- "Resolver transient failure", &error, 1);
1357
- absl::Status status = grpc_error_to_absl_status(state_error);
1317
+ grpc_error_handle error = absl_status_to_grpc_error(status);
1358
1318
  {
1359
1319
  MutexLock lock(&resolution_mu_);
1360
1320
  // Update resolver transient failure.
1361
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1362
- resolver_transient_failure_error_ = state_error;
1321
+ resolver_transient_failure_error_ = status;
1363
1322
  // Process calls that were queued waiting for the resolver result.
1364
1323
  for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1365
1324
  call = call->next) {
@@ -1371,27 +1330,36 @@ void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
1371
1330
  }
1372
1331
  }
1373
1332
  }
1333
+ GRPC_ERROR_UNREF(error);
1374
1334
  // Update connectivity state.
1375
1335
  UpdateStateAndPickerLocked(
1376
1336
  GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
1377
1337
  absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
1378
1338
  }
1379
- GRPC_ERROR_UNREF(error);
1380
1339
  }
1381
1340
 
1382
1341
  void ClientChannel::CreateOrUpdateLbPolicyLocked(
1383
1342
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
1343
+ const absl::optional<std::string>& health_check_service_name,
1384
1344
  Resolver::Result result) {
1385
1345
  // Construct update.
1386
1346
  LoadBalancingPolicy::UpdateArgs update_args;
1387
1347
  update_args.addresses = std::move(result.addresses);
1388
1348
  update_args.config = std::move(lb_policy_config);
1349
+ update_args.resolution_note = std::move(result.resolution_note);
1350
+ // Add health check service name to channel args.
1351
+ absl::InlinedVector<grpc_arg, 1> args_to_add;
1352
+ if (health_check_service_name.has_value()) {
1353
+ args_to_add.push_back(grpc_channel_arg_string_create(
1354
+ const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1355
+ const_cast<char*>(health_check_service_name->c_str())));
1356
+ }
1389
1357
  // Remove the config selector from channel args so that we're not holding
1390
1358
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1391
1359
  // WorkSerializer.
1392
- const char* arg_name = GRPC_ARG_CONFIG_SELECTOR;
1393
- update_args.args =
1394
- grpc_channel_args_copy_and_remove(result.args, &arg_name, 1);
1360
+ const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1361
+ update_args.args = grpc_channel_args_copy_and_add_and_remove(
1362
+ result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1395
1363
  // Create policy if needed.
1396
1364
  if (lb_policy_ == nullptr) {
1397
1365
  lb_policy_ = CreateLbPolicyLocked(*update_args.args);
@@ -1450,9 +1418,7 @@ void ClientChannel::RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
1450
1418
 
1451
1419
  void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1452
1420
  RefCountedPtr<ServiceConfig> service_config,
1453
- RefCountedPtr<ConfigSelector> config_selector,
1454
- const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
1455
- const char* lb_policy_name) {
1421
+ RefCountedPtr<ConfigSelector> config_selector, const char* lb_policy_name) {
1456
1422
  UniquePtr<char> service_config_json(
1457
1423
  gpr_strdup(service_config->json_string().c_str()));
1458
1424
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
@@ -1462,17 +1428,6 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1462
1428
  }
1463
1429
  // Save service config.
1464
1430
  saved_service_config_ = std::move(service_config);
1465
- // Update health check service name if needed.
1466
- if (health_check_service_name_ !=
1467
- parsed_service_config->health_check_service_name()) {
1468
- health_check_service_name_ =
1469
- parsed_service_config->health_check_service_name();
1470
- // Update health check service name used by existing subchannel wrappers.
1471
- for (auto* subchannel_wrapper : subchannel_wrappers_) {
1472
- subchannel_wrapper->UpdateHealthCheckServiceName(
1473
- health_check_service_name_);
1474
- }
1475
- }
1476
1431
  // Swap out the data used by GetChannelInfo().
1477
1432
  UniquePtr<char> lb_policy_name_owned(gpr_strdup(lb_policy_name));
1478
1433
  {
@@ -1530,11 +1485,9 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1530
1485
  //
1531
1486
  // We defer unreffing the old values (and deallocating memory) until
1532
1487
  // after releasing the lock to keep the critical section small.
1533
- std::set<grpc_call_element*> calls_pending_resolver_result;
1534
1488
  {
1535
1489
  MutexLock lock(&resolution_mu_);
1536
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1537
- resolver_transient_failure_error_ = GRPC_ERROR_NONE;
1490
+ resolver_transient_failure_error_ = absl::OkStatus();
1538
1491
  // Update service config.
1539
1492
  received_service_config_data_ = true;
1540
1493
  // Old values will be unreffed after lock is released.
@@ -1570,8 +1523,8 @@ void ClientChannel::CreateResolverLocked() {
1570
1523
  gpr_log(GPR_INFO, "chand=%p: starting name resolution", this);
1571
1524
  }
1572
1525
  resolver_ = ResolverRegistry::CreateResolver(
1573
- target_uri_.get(), channel_args_, interested_parties_, work_serializer_,
1574
- absl::make_unique<ResolverResultHandler>(this));
1526
+ uri_to_resolve_.c_str(), channel_args_, interested_parties_,
1527
+ work_serializer_, absl::make_unique<ResolverResultHandler>(this));
1575
1528
  // Since the validity of the args was checked when the channel was created,
1576
1529
  // CreateResolver() must return a non-null result.
1577
1530
  GPR_ASSERT(resolver_ != nullptr);
@@ -1635,30 +1588,9 @@ void ClientChannel::UpdateStateAndPickerLocked(
1635
1588
  channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1636
1589
  state)));
1637
1590
  }
1638
- // Grab data plane lock to do subchannel updates and update the picker.
1639
- //
1640
- // Note that we want to minimize the work done while holding the data
1641
- // plane lock, to keep the critical section small. So, for all of the
1642
- // objects that we might wind up unreffing here, we actually hold onto
1643
- // the refs until after we release the lock, and then unref them at
1644
- // that point. This includes the following:
1645
- // - refs to subchannel wrappers in the keys of pending_subchannel_updates_
1646
- // - ownership of the existing picker in picker_
1591
+ // Grab data plane lock to update the picker.
1647
1592
  {
1648
1593
  MutexLock lock(&data_plane_mu_);
1649
- // Handle subchannel updates.
1650
- for (auto& p : pending_subchannel_updates_) {
1651
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1652
- gpr_log(GPR_INFO,
1653
- "chand=%p: updating subchannel wrapper %p data plane "
1654
- "connected_subchannel to %p",
1655
- this, p.first.get(), p.second.get());
1656
- }
1657
- // Note: We do not remove the entry from pending_subchannel_updates_
1658
- // here, since this would unref the subchannel wrapper; instead,
1659
- // we wait until we've released the lock to clear the map.
1660
- p.first->set_connected_subchannel_in_data_plane(std::move(p.second));
1661
- }
1662
1594
  // Swap out the picker.
1663
1595
  // Note: Original value will be destroyed after the lock is released.
1664
1596
  picker_.swap(picker);
@@ -1680,9 +1612,6 @@ void ClientChannel::UpdateStateAndPickerLocked(
1680
1612
  }
1681
1613
  }
1682
1614
  }
1683
- // Clear the pending update map after releasing the lock, to keep the
1684
- // critical section small.
1685
- pending_subchannel_updates_.clear();
1686
1615
  }
1687
1616
 
1688
1617
  namespace {
@@ -1735,7 +1664,7 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1735
1664
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::work_serializer_) {
1736
1665
  SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
1737
1666
  complete_pick->subchannel.get());
1738
- ConnectedSubchannel* connected_subchannel =
1667
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1739
1668
  subchannel->connected_subchannel();
1740
1669
  connected_subchannel->Ping(op->send_ping.on_initiate,
1741
1670
  op->send_ping.on_ack);
@@ -1793,7 +1722,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1793
1722
  if (grpc_error_get_int(op->disconnect_with_error,
1794
1723
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1795
1724
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1796
- if (disconnect_error() == GRPC_ERROR_NONE) {
1725
+ if (disconnect_error_ == GRPC_ERROR_NONE) {
1797
1726
  // Enter IDLE state.
1798
1727
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1799
1728
  "channel entering IDLE", nullptr);
@@ -1801,10 +1730,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1801
1730
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1802
1731
  } else {
1803
1732
  // Disconnect.
1804
- GPR_ASSERT(disconnect_error_.load(std::memory_order_relaxed) ==
1805
- GRPC_ERROR_NONE);
1806
- disconnect_error_.store(op->disconnect_with_error,
1807
- std::memory_order_release);
1733
+ GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1734
+ disconnect_error_ = op->disconnect_with_error;
1808
1735
  UpdateStateAndPickerLocked(
1809
1736
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1810
1737
  absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
@@ -1869,17 +1796,6 @@ void ClientChannel::RemoveLbQueuedCall(LbQueuedCall* to_remove,
1869
1796
  }
1870
1797
  }
1871
1798
 
1872
- RefCountedPtr<ConnectedSubchannel>
1873
- ClientChannel::GetConnectedSubchannelInDataPlane(
1874
- SubchannelInterface* subchannel) const {
1875
- SubchannelWrapper* subchannel_wrapper =
1876
- static_cast<SubchannelWrapper*>(subchannel);
1877
- ConnectedSubchannel* connected_subchannel =
1878
- subchannel_wrapper->connected_subchannel_in_data_plane();
1879
- if (connected_subchannel == nullptr) return nullptr;
1880
- return connected_subchannel->Ref();
1881
- }
1882
-
1883
1799
  void ClientChannel::TryToConnectLocked() {
1884
1800
  if (lb_policy_ != nullptr) {
1885
1801
  lb_policy_->ExitIdleLocked();
@@ -2274,15 +2190,16 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2274
2190
  ConfigSelector::CallConfig call_config =
2275
2191
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2276
2192
  if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2277
- // Create a ServiceConfigCallData for the call. This stores a ref to the
2278
- // ServiceConfig and caches the right set of parsed configs to use for
2279
- // the call. The MethodConfig will store itself in the call context,
2280
- // so that it can be accessed by filters in the subchannel, and it
2281
- // will be cleaned up when the call ends.
2282
- auto* service_config_call_data = arena_->New<ServiceConfigCallData>(
2283
- std::move(call_config.service_config), call_config.method_configs,
2284
- std::move(call_config.call_attributes),
2285
- call_config.call_dispatch_controller, call_context_);
2193
+ // Create a ClientChannelServiceConfigCallData for the call. This stores
2194
+ // a ref to the ServiceConfig and caches the right set of parsed configs
2195
+ // to use for the call. The ClientChannelServiceConfigCallData will store
2196
+ // itself in the call context, so that it can be accessed by filters
2197
+ // below us in the stack, and it will be cleaned up when the call ends.
2198
+ auto* service_config_call_data =
2199
+ arena_->New<ClientChannelServiceConfigCallData>(
2200
+ std::move(call_config.service_config), call_config.method_configs,
2201
+ std::move(call_config.call_attributes),
2202
+ call_config.call_dispatch_controller, call_context_);
2286
2203
  // Apply our own method params to the call.
2287
2204
  auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
2288
2205
  service_config_call_data->GetMethodParsedConfig(
@@ -2324,8 +2241,9 @@ void ClientChannel::CallData::
2324
2241
  RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
2325
2242
  void* arg, grpc_error_handle error) {
2326
2243
  auto* self = static_cast<CallData*>(arg);
2327
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2328
- self->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2244
+ auto* service_config_call_data =
2245
+ static_cast<ClientChannelServiceConfigCallData*>(
2246
+ self->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2329
2247
  if (service_config_call_data != nullptr) {
2330
2248
  service_config_call_data->call_dispatch_controller()->Commit();
2331
2249
  }
@@ -2425,12 +2343,11 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2425
2343
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2426
2344
  // If the resolver returned transient failure before returning the
2427
2345
  // first service config, fail any non-wait_for_ready calls.
2428
- grpc_error_handle resolver_error = chand->resolver_transient_failure_error_;
2429
- if (resolver_error != GRPC_ERROR_NONE &&
2430
- (send_initial_metadata_flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) ==
2431
- 0) {
2346
+ absl::Status resolver_error = chand->resolver_transient_failure_error_;
2347
+ if (!resolver_error.ok() && (send_initial_metadata_flags &
2348
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2432
2349
  MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2433
- *error = GRPC_ERROR_REF(resolver_error);
2350
+ *error = absl_status_to_grpc_error(resolver_error);
2434
2351
  return true;
2435
2352
  }
2436
2353
  // Either the resolver has not yet returned a result, or it has
@@ -2486,35 +2403,67 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2486
2403
  class ClientChannel::LoadBalancedCall::Metadata
2487
2404
  : public LoadBalancingPolicy::MetadataInterface {
2488
2405
  public:
2489
- Metadata(LoadBalancedCall* lb_call, grpc_metadata_batch* batch)
2490
- : lb_call_(lb_call), batch_(batch) {}
2406
+ explicit Metadata(grpc_metadata_batch* batch) : batch_(batch) {}
2491
2407
 
2492
2408
  void Add(absl::string_view key, absl::string_view value) override {
2493
- grpc_linked_mdelem* linked_mdelem = static_cast<grpc_linked_mdelem*>(
2494
- lb_call_->arena_->Alloc(sizeof(grpc_linked_mdelem)));
2495
- linked_mdelem->md = grpc_mdelem_from_slices(
2496
- ExternallyManagedSlice(key.data(), key.size()),
2497
- ExternallyManagedSlice(value.data(), value.size()));
2498
- GPR_ASSERT(grpc_metadata_batch_link_tail(batch_, linked_mdelem) ==
2499
- GRPC_ERROR_NONE);
2409
+ // Gross, egregious hack to support legacy grpclb behavior.
2410
+ // TODO(ctiller): Use a promise context for this once that plumbing is done.
2411
+ if (key == GrpcLbClientStatsMetadata::key()) {
2412
+ batch_->Set(
2413
+ GrpcLbClientStatsMetadata(),
2414
+ const_cast<GrpcLbClientStats*>(
2415
+ reinterpret_cast<const GrpcLbClientStats*>(value.data())));
2416
+ return;
2417
+ }
2418
+ batch_->Append(key, Slice::FromStaticString(value),
2419
+ [key](absl::string_view error, const Slice& value) {
2420
+ gpr_log(GPR_ERROR, "%s",
2421
+ absl::StrCat(error, " key:", key,
2422
+ " value:", value.as_string_view())
2423
+ .c_str());
2424
+ });
2500
2425
  }
2501
2426
 
2502
2427
  std::vector<std::pair<std::string, std::string>> TestOnlyCopyToVector()
2503
2428
  override {
2504
- std::vector<std::pair<std::string, std::string>> result;
2505
- for (grpc_linked_mdelem* entry = batch_->list.head; entry != nullptr;
2506
- entry = entry->next) {
2507
- if (batch_->idx.named.path != entry) {
2508
- result.push_back(std::make_pair(
2509
- std::string(StringViewFromSlice(GRPC_MDKEY(entry->md))),
2510
- std::string(StringViewFromSlice(GRPC_MDVALUE(entry->md)))));
2511
- }
2512
- }
2513
- return result;
2429
+ Encoder encoder;
2430
+ batch_->Encode(&encoder);
2431
+ return encoder.Take();
2432
+ }
2433
+
2434
+ absl::optional<absl::string_view> Lookup(absl::string_view key,
2435
+ std::string* buffer) const override {
2436
+ return batch_->GetStringValue(key, buffer);
2514
2437
  }
2515
2438
 
2516
2439
  private:
2517
- LoadBalancedCall* lb_call_;
2440
+ class Encoder {
2441
+ public:
2442
+ void Encode(const Slice& key, const Slice& value) {
2443
+ out_.emplace_back(std::string(key.as_string_view()),
2444
+ std::string(value.as_string_view()));
2445
+ }
2446
+
2447
+ template <class Which>
2448
+ void Encode(Which, const typename Which::ValueType& value) {
2449
+ auto value_slice = Which::Encode(value);
2450
+ out_.emplace_back(std::string(Which::key()),
2451
+ std::string(value_slice.as_string_view()));
2452
+ }
2453
+
2454
+ void Encode(GrpcTimeoutMetadata, grpc_millis) {}
2455
+ void Encode(HttpPathMetadata, const Slice&) {}
2456
+ void Encode(HttpMethodMetadata,
2457
+ const typename HttpMethodMetadata::ValueType&) {}
2458
+
2459
+ std::vector<std::pair<std::string, std::string>> Take() {
2460
+ return std::move(out_);
2461
+ }
2462
+
2463
+ private:
2464
+ std::vector<std::pair<std::string, std::string>> out_;
2465
+ };
2466
+
2518
2467
  grpc_metadata_batch* batch_;
2519
2468
  };
2520
2469
 
@@ -2529,19 +2478,6 @@ class ClientChannel::LoadBalancedCall::LbCallState
2529
2478
 
2530
2479
  void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2531
2480
 
2532
- const LoadBalancingPolicy::BackendMetricData* GetBackendMetricData()
2533
- override {
2534
- if (lb_call_->backend_metric_data_ == nullptr) {
2535
- grpc_linked_mdelem* md = lb_call_->recv_trailing_metadata_->idx.named
2536
- .x_endpoint_load_metrics_bin;
2537
- if (md != nullptr) {
2538
- lb_call_->backend_metric_data_ =
2539
- ParseBackendMetricData(GRPC_MDVALUE(md->md), lb_call_->arena_);
2540
- }
2541
- }
2542
- return lb_call_->backend_metric_data_;
2543
- }
2544
-
2545
2481
  absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2546
2482
  auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2547
2483
  lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
@@ -2556,7 +2492,32 @@ class ClientChannel::LoadBalancedCall::LbCallState
2556
2492
  };
2557
2493
 
2558
2494
  //
2559
- // LoadBalancedCall
2495
+ // ClientChannel::LoadBalancedCall::BackendMetricAccessor
2496
+ //
2497
+
2498
+ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2499
+ : public LoadBalancingPolicy::BackendMetricAccessor {
2500
+ public:
2501
+ explicit BackendMetricAccessor(LoadBalancedCall* lb_call)
2502
+ : lb_call_(lb_call) {}
2503
+
2504
+ const BackendMetricData* GetBackendMetricData() override {
2505
+ if (lb_call_->backend_metric_data_ == nullptr) {
2506
+ if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2507
+ XEndpointLoadMetricsBinMetadata())) {
2508
+ lb_call_->backend_metric_data_ =
2509
+ ParseBackendMetricData(*md, lb_call_->arena_);
2510
+ }
2511
+ }
2512
+ return lb_call_->backend_metric_data_;
2513
+ }
2514
+
2515
+ private:
2516
+ LoadBalancedCall* lb_call_;
2517
+ };
2518
+
2519
+ //
2520
+ // ClientChannel::LoadBalancedCall
2560
2521
  //
2561
2522
 
2562
2523
  namespace {
@@ -2594,12 +2555,11 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2594
2555
  GetCallAttemptTracer(args.context, is_transparent_retry)) {}
2595
2556
 
2596
2557
  ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2597
- grpc_slice_unref_internal(path_);
2598
2558
  GRPC_ERROR_UNREF(cancel_error_);
2599
2559
  GRPC_ERROR_UNREF(failure_error_);
2600
2560
  if (backend_metric_data_ != nullptr) {
2601
- backend_metric_data_
2602
- ->LoadBalancingPolicy::BackendMetricData::~BackendMetricData();
2561
+ backend_metric_data_->LoadBalancingPolicy::BackendMetricAccessor::
2562
+ BackendMetricData::~BackendMetricData();
2603
2563
  }
2604
2564
  // Make sure there are no remaining pending batches.
2605
2565
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2900,27 +2860,25 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2900
2860
  auto* self = static_cast<LoadBalancedCall*>(arg);
2901
2861
  // Check if we have a tracer or an LB callback to invoke.
2902
2862
  if (self->call_attempt_tracer_ != nullptr ||
2903
- self->lb_recv_trailing_metadata_ready_ != nullptr) {
2863
+ self->lb_subchannel_call_tracker_ != nullptr) {
2904
2864
  // Get the call's status.
2905
2865
  absl::Status status;
2906
2866
  if (error != GRPC_ERROR_NONE) {
2907
2867
  // Get status from error.
2908
2868
  grpc_status_code code;
2909
- grpc_slice message = grpc_empty_slice();
2869
+ std::string message;
2910
2870
  grpc_error_get_status(error, self->deadline_, &code, &message,
2911
2871
  /*http_error=*/nullptr, /*error_string=*/nullptr);
2912
- status = absl::Status(static_cast<absl::StatusCode>(code),
2913
- StringViewFromSlice(message));
2872
+ status = absl::Status(static_cast<absl::StatusCode>(code), message);
2914
2873
  } else {
2915
2874
  // Get status from headers.
2916
- const auto& fields = self->recv_trailing_metadata_->idx.named;
2917
- GPR_ASSERT(fields.grpc_status != nullptr);
2875
+ const auto& md = *self->recv_trailing_metadata_;
2918
2876
  grpc_status_code code =
2919
- grpc_get_status_code_from_metadata(fields.grpc_status->md);
2877
+ md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
2920
2878
  if (code != GRPC_STATUS_OK) {
2921
2879
  absl::string_view message;
2922
- if (fields.grpc_message != nullptr) {
2923
- message = StringViewFromSlice(GRPC_MDVALUE(fields.grpc_message->md));
2880
+ if (const auto* grpc_message = md.get_pointer(GrpcMessageMetadata())) {
2881
+ message = grpc_message->as_string_view();
2924
2882
  }
2925
2883
  status = absl::Status(static_cast<absl::StatusCode>(code), message);
2926
2884
  }
@@ -2933,11 +2891,13 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2933
2891
  }
2934
2892
  // If the LB policy requested a callback for trailing metadata, invoke
2935
2893
  // the callback.
2936
- if (self->lb_recv_trailing_metadata_ready_ != nullptr) {
2937
- Metadata trailing_metadata(self, self->recv_trailing_metadata_);
2938
- LbCallState lb_call_state(self);
2939
- self->lb_recv_trailing_metadata_ready_(status, &trailing_metadata,
2940
- &lb_call_state);
2894
+ if (self->lb_subchannel_call_tracker_ != nullptr) {
2895
+ Metadata trailing_metadata(self->recv_trailing_metadata_);
2896
+ BackendMetricAccessor backend_metric_accessor(self);
2897
+ LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
2898
+ status, &trailing_metadata, &backend_metric_accessor};
2899
+ self->lb_subchannel_call_tracker_->Finish(args);
2900
+ self->lb_subchannel_call_tracker_.reset();
2941
2901
  }
2942
2902
  }
2943
2903
  // Chain to original callback.
@@ -2953,7 +2913,7 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2953
2913
 
2954
2914
  void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
2955
2915
  SubchannelCall::Args call_args = {
2956
- std::move(connected_subchannel_), pollent_, path_, /*start_time=*/0,
2916
+ std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
2957
2917
  deadline_, arena_,
2958
2918
  // TODO(roth): When we implement hedging support, we will probably
2959
2919
  // need to use a separate call context for each subchannel call.
@@ -3097,10 +3057,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3097
3057
  send_initial_metadata.send_initial_metadata_flags;
3098
3058
  // Perform LB pick.
3099
3059
  LoadBalancingPolicy::PickArgs pick_args;
3100
- pick_args.path = StringViewFromSlice(path_);
3060
+ pick_args.path = path_.as_string_view();
3101
3061
  LbCallState lb_call_state(this);
3102
3062
  pick_args.call_state = &lb_call_state;
3103
- Metadata initial_metadata(this, initial_metadata_batch);
3063
+ Metadata initial_metadata(initial_metadata_batch);
3104
3064
  pick_args.initial_metadata = &initial_metadata;
3105
3065
  auto result = chand_->picker_->Pick(pick_args);
3106
3066
  return HandlePickResult<bool>(
@@ -3116,11 +3076,28 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3116
3076
  GPR_ASSERT(complete_pick->subchannel != nullptr);
3117
3077
  // Grab a ref to the connected subchannel while we're still
3118
3078
  // holding the data plane mutex.
3119
- connected_subchannel_ = chand_->GetConnectedSubchannelInDataPlane(
3079
+ SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
3120
3080
  complete_pick->subchannel.get());
3121
- GPR_ASSERT(connected_subchannel_ != nullptr);
3122
- lb_recv_trailing_metadata_ready_ =
3123
- std::move(complete_pick->recv_trailing_metadata_ready);
3081
+ connected_subchannel_ = subchannel->connected_subchannel();
3082
+ // If the subchannel has no connected subchannel (e.g., if the
3083
+ // subchannel has moved out of state READY but the LB policy hasn't
3084
+ // yet seen that change and given us a new picker), then just
3085
+ // queue the pick. We'll try again as soon as we get a new picker.
3086
+ if (connected_subchannel_ == nullptr) {
3087
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3088
+ gpr_log(GPR_INFO,
3089
+ "chand=%p lb_call=%p: subchannel returned by LB picker "
3090
+ "has no connected subchannel; queueing pick",
3091
+ chand_, this);
3092
+ }
3093
+ MaybeAddCallToLbQueuedCallsLocked();
3094
+ return false;
3095
+ }
3096
+ lb_subchannel_call_tracker_ =
3097
+ std::move(complete_pick->subchannel_call_tracker);
3098
+ if (lb_subchannel_call_tracker_ != nullptr) {
3099
+ lb_subchannel_call_tracker_->Start();
3100
+ }
3124
3101
  MaybeRemoveCallFromLbQueuedCallsLocked();
3125
3102
  return true;
3126
3103
  },
@@ -3142,13 +3119,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3142
3119
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
3143
3120
  chand_, this, fail_pick->status.ToString().c_str());
3144
3121
  }
3145
- // If we're shutting down, fail all RPCs.
3146
- grpc_error_handle disconnect_error = chand_->disconnect_error();
3147
- if (disconnect_error != GRPC_ERROR_NONE) {
3148
- MaybeRemoveCallFromLbQueuedCallsLocked();
3149
- *error = GRPC_ERROR_REF(disconnect_error);
3150
- return true;
3151
- }
3152
3122
  // If wait_for_ready is false, then the error indicates the RPC
3153
3123
  // attempt's final status.
3154
3124
  if ((send_initial_metadata_flags &