grpc 1.41.0 → 1.42.0

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 (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +77 -64
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -36,10 +36,14 @@
36
36
  #include "src/core/ext/filters/client_channel/resolver.h"
37
37
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
38
38
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
39
- #include "src/core/ext/filters/client_channel/service_config.h"
40
39
  #include "src/core/ext/filters/client_channel/subchannel.h"
41
40
  #include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
41
+ #include "src/core/ext/service_config/service_config.h"
42
+ #include "src/core/ext/service_config/service_config_call_data.h"
43
+ #include "src/core/ext/service_config/service_config_parser.h"
42
44
  #include "src/core/lib/channel/call_tracer.h"
45
+ #include "src/core/lib/channel/context.h"
46
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
43
47
  #include "src/core/lib/gprpp/sync.h"
44
48
  #include "src/core/lib/iomgr/error.h"
45
49
  #include "src/core/lib/iomgr/polling_entity.h"
@@ -207,11 +211,6 @@ class ClientChannel {
207
211
  static void GetChannelInfo(grpc_channel_element* elem,
208
212
  const grpc_channel_info* info);
209
213
 
210
- // Note: Does NOT return a new ref.
211
- grpc_error_handle disconnect_error() const {
212
- return disconnect_error_.load(std::memory_order_acquire);
213
- }
214
-
215
214
  // Note: All methods with "Locked" suffix must be invoked from within
216
215
  // work_serializer_.
217
216
 
@@ -222,6 +221,7 @@ class ClientChannel {
222
221
 
223
222
  void CreateOrUpdateLbPolicyLocked(
224
223
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
224
+ const absl::optional<std::string>& health_check_service_name,
225
225
  Resolver::Result result) ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
226
226
  OrphanablePtr<LoadBalancingPolicy> CreateLbPolicyLocked(
227
227
  const grpc_channel_args& args)
@@ -235,9 +235,7 @@ class ClientChannel {
235
235
 
236
236
  void UpdateServiceConfigInControlPlaneLocked(
237
237
  RefCountedPtr<ServiceConfig> service_config,
238
- RefCountedPtr<ConfigSelector> config_selector,
239
- const internal::ClientChannelGlobalParsedConfig* parsed_service_config,
240
- const char* lb_policy_name)
238
+ RefCountedPtr<ConfigSelector> config_selector, const char* lb_policy_name)
241
239
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_);
242
240
 
243
241
  void UpdateServiceConfigInDataPlaneLocked()
@@ -268,9 +266,6 @@ class ClientChannel {
268
266
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
269
267
  void RemoveLbQueuedCall(LbQueuedCall* to_remove, grpc_polling_entity* pollent)
270
268
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
271
- RefCountedPtr<ConnectedSubchannel> GetConnectedSubchannelInDataPlane(
272
- SubchannelInterface* subchannel) const
273
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_);
274
269
 
275
270
  //
276
271
  // Fields set at construction and never modified.
@@ -280,8 +275,8 @@ class ClientChannel {
280
275
  ClientChannelFactory* client_channel_factory_;
281
276
  const grpc_channel_args* channel_args_;
282
277
  RefCountedPtr<ServiceConfig> default_service_config_;
283
- std::string server_name_;
284
- UniquePtr<char> target_uri_;
278
+ std::string uri_to_resolve_;
279
+ std::string default_authority_;
285
280
  channelz::ChannelNode* channelz_node_;
286
281
  grpc_pollset_set* interested_parties_;
287
282
 
@@ -323,8 +318,6 @@ class ClientChannel {
323
318
  ABSL_GUARDED_BY(work_serializer_);
324
319
  RefCountedPtr<ConfigSelector> saved_config_selector_
325
320
  ABSL_GUARDED_BY(work_serializer_);
326
- absl::optional<std::string> health_check_service_name_
327
- ABSL_GUARDED_BY(work_serializer_);
328
321
  OrphanablePtr<LoadBalancingPolicy> lb_policy_
329
322
  ABSL_GUARDED_BY(work_serializer_);
330
323
  RefCountedPtr<SubchannelPoolInterface> subchannel_pool_
@@ -337,18 +330,9 @@ class ClientChannel {
337
330
  // work_serializer when the SubchannelWrappers are created and destroyed.
338
331
  std::set<SubchannelWrapper*> subchannel_wrappers_
339
332
  ABSL_GUARDED_BY(work_serializer_);
340
- // Pending ConnectedSubchannel updates for each SubchannelWrapper.
341
- // Updates are queued here in the control plane work_serializer and then
342
- // applied in the data plane mutex when the picker is updated.
343
- std::map<RefCountedPtr<SubchannelWrapper>, RefCountedPtr<ConnectedSubchannel>>
344
- pending_subchannel_updates_ ABSL_GUARDED_BY(work_serializer_);
345
333
  int keepalive_time_ ABSL_GUARDED_BY(work_serializer_) = -1;
346
-
347
- //
348
- // Fields accessed from both data plane mutex and control plane
349
- // work_serializer.
350
- //
351
- std::atomic<grpc_error_handle> disconnect_error_{GRPC_ERROR_NONE};
334
+ grpc_error_handle disconnect_error_ ABSL_GUARDED_BY(work_serializer_) =
335
+ GRPC_ERROR_NONE;
352
336
 
353
337
  //
354
338
  // Fields guarded by a mutex, since they need to be accessed
@@ -529,6 +513,69 @@ class ClientChannel::LoadBalancedCall
529
513
  grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
530
514
  };
531
515
 
516
+ // A sub-class of ServiceConfigCallData used to access the
517
+ // CallDispatchController. Allocated on the arena, stored in the call
518
+ // context, and destroyed when the call is destroyed.
519
+ class ClientChannelServiceConfigCallData : public ServiceConfigCallData {
520
+ public:
521
+ ClientChannelServiceConfigCallData(
522
+ RefCountedPtr<ServiceConfig> service_config,
523
+ const ServiceConfigParser::ParsedConfigVector* method_configs,
524
+ ServiceConfigCallData::CallAttributes call_attributes,
525
+ ConfigSelector::CallDispatchController* call_dispatch_controller,
526
+ grpc_call_context_element* call_context)
527
+ : ServiceConfigCallData(std::move(service_config), method_configs,
528
+ std::move(call_attributes)),
529
+ call_dispatch_controller_(call_dispatch_controller) {
530
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = this;
531
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].destroy = Destroy;
532
+ }
533
+
534
+ ConfigSelector::CallDispatchController* call_dispatch_controller() {
535
+ return &call_dispatch_controller_;
536
+ }
537
+
538
+ private:
539
+ // A wrapper for the CallDispatchController returned by the ConfigSelector.
540
+ // Handles the case where the ConfigSelector doees not return any
541
+ // CallDispatchController.
542
+ // Also ensures that we call Commit() at most once, which allows the
543
+ // client channel code to call Commit() when the call is complete in case
544
+ // it wasn't called earlier, without needing to know whether or not it was.
545
+ class CallDispatchControllerWrapper
546
+ : public ConfigSelector::CallDispatchController {
547
+ public:
548
+ explicit CallDispatchControllerWrapper(
549
+ ConfigSelector::CallDispatchController* call_dispatch_controller)
550
+ : call_dispatch_controller_(call_dispatch_controller) {}
551
+
552
+ bool ShouldRetry() override {
553
+ if (call_dispatch_controller_ != nullptr) {
554
+ return call_dispatch_controller_->ShouldRetry();
555
+ }
556
+ return true;
557
+ }
558
+
559
+ void Commit() override {
560
+ if (call_dispatch_controller_ != nullptr && !commit_called_) {
561
+ call_dispatch_controller_->Commit();
562
+ commit_called_ = true;
563
+ }
564
+ }
565
+
566
+ private:
567
+ ConfigSelector::CallDispatchController* call_dispatch_controller_;
568
+ bool commit_called_ = false;
569
+ };
570
+
571
+ static void Destroy(void* ptr) {
572
+ auto* self = static_cast<ClientChannelServiceConfigCallData*>(ptr);
573
+ self->~ClientChannelServiceConfigCallData();
574
+ }
575
+
576
+ CallDispatchControllerWrapper call_dispatch_controller_;
577
+ };
578
+
532
579
  } // namespace grpc_core
533
580
 
534
581
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
@@ -32,7 +32,7 @@ namespace {
32
32
  void* factory_arg_copy(void* f) { return f; }
33
33
  void factory_arg_destroy(void* /*f*/) {}
34
34
  int factory_arg_cmp(void* factory1, void* factory2) {
35
- return GPR_ICMP(factory1, factory2);
35
+ return QsortCompare(factory1, factory2);
36
36
  }
37
37
  const grpc_arg_pointer_vtable factory_arg_vtable = {
38
38
  factory_arg_copy, factory_arg_destroy, factory_arg_cmp};
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
@@ -33,7 +31,7 @@ class ClientChannelFactory {
33
31
 
34
32
  // Creates a subchannel with the specified args.
35
33
  virtual RefCountedPtr<Subchannel> CreateSubchannel(
36
- const grpc_channel_args* args) = 0;
34
+ const grpc_resolved_address& address, const grpc_channel_args* args) = 0;
37
35
 
38
36
  // Returns a channel arg containing the specified factory.
39
37
  static grpc_arg CreateChannelArg(ClientChannelFactory* factory);
@@ -45,4 +43,4 @@ class ClientChannelFactory {
45
43
 
46
44
  } // namespace grpc_core
47
45
 
48
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H */
46
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
@@ -36,16 +36,9 @@
36
36
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
37
37
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
38
38
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
39
- #include "src/core/ext/filters/client_channel/service_config_parser.h"
40
- #include "src/core/lib/surface/channel_init.h"
41
-
42
- static bool append_filter(grpc_channel_stack_builder* builder, void* arg) {
43
- return grpc_channel_stack_builder_append_filter(
44
- builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
45
- }
39
+ #include "src/core/lib/config/core_configuration.h"
46
40
 
47
41
  void grpc_client_channel_init(void) {
48
- grpc_core::ServiceConfigParser::Init();
49
42
  grpc_core::internal::ClientChannelServiceConfigParser::Register();
50
43
  grpc_core::internal::RetryServiceConfigParser::Register();
51
44
  grpc_core::LoadBalancingPolicyRegistry::Builder::InitRegistry();
@@ -54,27 +47,28 @@ void grpc_client_channel_init(void) {
54
47
  grpc_core::ProxyMapperRegistry::Init();
55
48
  grpc_core::RegisterHttpProxyMapper();
56
49
  grpc_core::GlobalSubchannelPool::Init();
57
- grpc_channel_init_register_stage(
58
- GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, append_filter,
59
- const_cast<grpc_channel_filter*>(
60
- &grpc_core::ClientChannel::kFilterVtable));
61
50
  grpc_client_channel_global_init_backup_polling();
62
51
  }
63
52
 
64
53
  void grpc_client_channel_shutdown(void) {
65
54
  grpc_core::GlobalSubchannelPool::Shutdown();
66
- grpc_channel_init_shutdown();
67
55
  grpc_core::ProxyMapperRegistry::Shutdown();
68
56
  grpc_core::internal::ServerRetryThrottleMap::Shutdown();
69
57
  grpc_core::ResolverRegistry::Builder::ShutdownRegistry();
70
58
  grpc_core::LoadBalancingPolicyRegistry::Builder::ShutdownRegistry();
71
- grpc_core::ServiceConfigParser::Shutdown();
72
59
  }
73
60
 
74
61
  namespace grpc_core {
75
62
 
76
63
  void BuildClientChannelConfiguration(CoreConfiguration::Builder* builder) {
77
64
  RegisterHttpConnectHandshaker(builder);
65
+ builder->channel_init()->RegisterStage(
66
+ GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
67
+ [](grpc_channel_stack_builder* builder) {
68
+ return grpc_channel_stack_builder_append_filter(
69
+ builder, &grpc_core::ClientChannel::kFilterVtable, nullptr,
70
+ nullptr);
71
+ });
78
72
  }
79
73
 
80
74
  } // namespace grpc_core
@@ -35,7 +35,7 @@ void ConfigSelectorArgDestroy(void* p) {
35
35
  config_selector->Unref();
36
36
  }
37
37
 
38
- int ConfigSelectorArgCmp(void* p, void* q) { return GPR_ICMP(p, q); }
38
+ int ConfigSelectorArgCmp(void* p, void* q) { return QsortCompare(p, q); }
39
39
 
40
40
  const grpc_arg_pointer_vtable kChannelArgVtable = {
41
41
  ConfigSelectorArgCopy, ConfigSelectorArgDestroy, ConfigSelectorArgCmp};
@@ -27,8 +27,9 @@
27
27
 
28
28
  #include <grpc/grpc.h>
29
29
 
30
- #include "src/core/ext/filters/client_channel/service_config.h"
31
- #include "src/core/ext/filters/client_channel/service_config_parser.h"
30
+ #include "src/core/ext/service_config/service_config.h"
31
+ #include "src/core/ext/service_config/service_config_call_data.h"
32
+ #include "src/core/ext/service_config/service_config_parser.h"
32
33
  #include "src/core/lib/channel/channel_stack.h"
33
34
  #include "src/core/lib/gprpp/arena.h"
34
35
  #include "src/core/lib/gprpp/ref_counted.h"
@@ -44,8 +45,6 @@ namespace grpc_core {
44
45
  // MethodConfig and provide input to LB policies on a per-call basis.
45
46
  class ConfigSelector : public RefCounted<ConfigSelector> {
46
47
  public:
47
- using CallAttributes = std::map<const char*, absl::string_view>;
48
-
49
48
  // An interface to be used by the channel when dispatching calls.
50
49
  class CallDispatchController {
51
50
  public:
@@ -76,7 +75,7 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
76
75
  // the call to ensure that method_configs lives long enough.
77
76
  RefCountedPtr<ServiceConfig> service_config;
78
77
  // Call attributes that will be accessible to LB policy implementations.
79
- CallAttributes call_attributes;
78
+ ServiceConfigCallData::CallAttributes call_attributes;
80
79
  // Call dispatch controller.
81
80
  CallDispatchController* call_dispatch_controller = nullptr;
82
81
  };
@@ -1,20 +1,18 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2015 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H
20
18
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H
@@ -35,6 +33,8 @@ namespace grpc_core {
35
33
  class SubchannelConnector : public InternallyRefCounted<SubchannelConnector> {
36
34
  public:
37
35
  struct Args {
36
+ // Address to connect to.
37
+ grpc_resolved_address* address;
38
38
  // Set of pollsets interested in this connection.
39
39
  grpc_pollset_set* interested_parties;
40
40
  // Deadline for connection.
@@ -76,4 +76,4 @@ class SubchannelConnector : public InternallyRefCounted<SubchannelConnector> {
76
76
 
77
77
  } // namespace grpc_core
78
78
 
79
- #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H */
79
+ #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H
@@ -163,7 +163,7 @@ RefCountedPtr<DynamicFilters> DynamicFilters::Create(
163
163
  // Channel stack creation failed with requested filters.
164
164
  // Create with lame filter instead.
165
165
  grpc_error_handle error = p.second;
166
- grpc_arg error_arg = MakeLameClientErrorArg(error);
166
+ grpc_arg error_arg = MakeLameClientErrorArg(&error);
167
167
  grpc_channel_args* new_args =
168
168
  grpc_channel_args_copy_and_add(args, &error_arg, 1);
169
169
  GRPC_ERROR_UNREF(error);
@@ -32,7 +32,6 @@ namespace grpc_core {
32
32
  // should be only one instance of this class. Init() should be called once at
33
33
  // the filter initialization time; Shutdown() should be called once at the
34
34
  // filter shutdown time.
35
- // TODO(juanlishen): Enable subchannel retention.
36
35
  class GlobalSubchannelPool final : public SubchannelPoolInterface {
37
36
  public:
38
37
  // The ctor and dtor are not intended to use directly.
@@ -254,7 +254,11 @@ HealthCheckClient::CallState::CallState(
254
254
  pollent_(grpc_polling_entity_create_from_pollset_set(interested_parties)),
255
255
  arena_(Arena::Create(health_check_client_->connected_subchannel_
256
256
  ->GetInitialCallSizeEstimate())),
257
- payload_(context_) {}
257
+ payload_(context_),
258
+ send_initial_metadata_(arena_),
259
+ send_trailing_metadata_(arena_),
260
+ recv_initial_metadata_(arena_),
261
+ recv_trailing_metadata_(arena_) {}
258
262
 
259
263
  HealthCheckClient::CallState::~CallState() {
260
264
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
@@ -315,7 +319,6 @@ void HealthCheckClient::CallState::StartCall() {
315
319
  batch_.on_complete = GRPC_CLOSURE_INIT(&on_complete_, OnComplete, this,
316
320
  grpc_schedule_on_exec_ctx);
317
321
  // Add send_initial_metadata op.
318
- grpc_metadata_batch_init(&send_initial_metadata_);
319
322
  error = grpc_metadata_batch_add_head(
320
323
  &send_initial_metadata_, &path_metadata_storage_,
321
324
  grpc_mdelem_from_slices(
@@ -333,12 +336,10 @@ void HealthCheckClient::CallState::StartCall() {
333
336
  payload_.send_message.send_message.reset(send_message_.get());
334
337
  batch_.send_message = true;
335
338
  // Add send_trailing_metadata op.
336
- grpc_metadata_batch_init(&send_trailing_metadata_);
337
339
  payload_.send_trailing_metadata.send_trailing_metadata =
338
340
  &send_trailing_metadata_;
339
341
  batch_.send_trailing_metadata = true;
340
342
  // Add recv_initial_metadata op.
341
- grpc_metadata_batch_init(&recv_initial_metadata_);
342
343
  payload_.recv_initial_metadata.recv_initial_metadata =
343
344
  &recv_initial_metadata_;
344
345
  payload_.recv_initial_metadata.recv_flags = nullptr;
@@ -363,7 +364,6 @@ void HealthCheckClient::CallState::StartCall() {
363
364
  // Initialize recv_trailing_metadata batch.
364
365
  recv_trailing_metadata_batch_.payload = &payload_;
365
366
  // Add recv_trailing_metadata op.
366
- grpc_metadata_batch_init(&recv_trailing_metadata_);
367
367
  payload_.recv_trailing_metadata.recv_trailing_metadata =
368
368
  &recv_trailing_metadata_;
369
369
  payload_.recv_trailing_metadata.collect_stats = &collect_stats_;
@@ -441,8 +441,8 @@ void HealthCheckClient::CallState::OnComplete(void* arg,
441
441
  HealthCheckClient::CallState* self =
442
442
  static_cast<HealthCheckClient::CallState*>(arg);
443
443
  GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "on_complete");
444
- grpc_metadata_batch_destroy(&self->send_initial_metadata_);
445
- grpc_metadata_batch_destroy(&self->send_trailing_metadata_);
444
+ self->send_initial_metadata_.Clear();
445
+ self->send_trailing_metadata_.Clear();
446
446
  self->call_->Unref(DEBUG_LOCATION, "on_complete");
447
447
  }
448
448
 
@@ -451,7 +451,7 @@ void HealthCheckClient::CallState::RecvInitialMetadataReady(
451
451
  HealthCheckClient::CallState* self =
452
452
  static_cast<HealthCheckClient::CallState*>(arg);
453
453
  GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "recv_initial_metadata_ready");
454
- grpc_metadata_batch_destroy(&self->recv_initial_metadata_);
454
+ self->recv_initial_metadata_.Clear();
455
455
  self->call_->Unref(DEBUG_LOCATION, "recv_initial_metadata_ready");
456
456
  }
457
457
 
@@ -558,9 +558,10 @@ void HealthCheckClient::CallState::RecvTrailingMetadataReady(
558
558
  grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, &status,
559
559
  nullptr /* slice */, nullptr /* http_error */,
560
560
  nullptr /* error_string */);
561
- } else if (self->recv_trailing_metadata_.idx.named.grpc_status != nullptr) {
561
+ } else if (self->recv_trailing_metadata_.legacy_index()->named.grpc_status !=
562
+ nullptr) {
562
563
  status = grpc_get_status_code_from_metadata(
563
- self->recv_trailing_metadata_.idx.named.grpc_status->md);
564
+ self->recv_trailing_metadata_.legacy_index()->named.grpc_status->md);
564
565
  }
565
566
  if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
566
567
  gpr_log(GPR_INFO,
@@ -569,7 +570,7 @@ void HealthCheckClient::CallState::RecvTrailingMetadataReady(
569
570
  self->health_check_client_.get(), self, status);
570
571
  }
571
572
  // Clean up.
572
- grpc_metadata_batch_destroy(&self->recv_trailing_metadata_);
573
+ self->recv_trailing_metadata_.Clear();
573
574
  // For status UNIMPLEMENTED, give up and assume always healthy.
574
575
  bool retry = true;
575
576
  if (status == GRPC_STATUS_UNIMPLEMENTED) {
@@ -19,7 +19,7 @@
19
19
  #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
20
20
  #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
21
21
 
22
- #include <grpc/impl/codegen/port_platform.h>
22
+ #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include "src/core/lib/config/core_configuration.h"
25
25
 
@@ -90,6 +90,10 @@ class ChildPolicyHandler::Helper
90
90
  parent_->channel_control_helper()->RequestReresolution();
91
91
  }
92
92
 
93
+ absl::string_view GetAuthority() override {
94
+ return parent_->channel_control_helper()->GetAuthority();
95
+ }
96
+
93
97
  void AddTraceEvent(TraceSeverity severity,
94
98
  absl::string_view message) override {
95
99
  if (parent_->shutting_down_) return;
@@ -101,20 +101,15 @@ static void clr_start_transport_stream_op_batch(
101
101
  // Handle send_initial_metadata.
102
102
  if (batch->send_initial_metadata) {
103
103
  // Grab client stats object from metadata.
104
- grpc_linked_mdelem* client_stats_md =
105
- batch->payload->send_initial_metadata.send_initial_metadata->list.head;
106
- for (; client_stats_md != nullptr;
107
- client_stats_md = client_stats_md->next) {
108
- if (GRPC_SLICE_START_PTR(GRPC_MDKEY(client_stats_md->md)) ==
109
- static_cast<const void*>(grpc_core::kGrpcLbClientStatsMetadataKey)) {
110
- break;
111
- }
112
- }
113
- if (client_stats_md != nullptr) {
104
+ auto client_stats_md =
105
+ batch->payload->send_initial_metadata.send_initial_metadata->Remove(
106
+ grpc_slice_from_static_string(
107
+ grpc_core::kGrpcLbClientStatsMetadataKey));
108
+ if (client_stats_md.has_value()) {
114
109
  grpc_core::GrpcLbClientStats* client_stats =
115
110
  const_cast<grpc_core::GrpcLbClientStats*>(
116
111
  reinterpret_cast<const grpc_core::GrpcLbClientStats*>(
117
- GRPC_SLICE_START_PTR(GRPC_MDVALUE(client_stats_md->md))));
112
+ GRPC_SLICE_START_PTR(*client_stats_md)));
118
113
  if (client_stats != nullptr) {
119
114
  calld->client_stats.reset(client_stats);
120
115
  // Intercept completion.
@@ -123,10 +118,6 @@ static void clr_start_transport_stream_op_batch(
123
118
  calld, grpc_schedule_on_exec_ctx);
124
119
  batch->on_complete = &calld->on_complete_for_send;
125
120
  }
126
- // Remove metadata so it doesn't go out on the wire.
127
- grpc_metadata_batch_remove(
128
- batch->payload->send_initial_metadata.send_initial_metadata,
129
- client_stats_md);
130
121
  }
131
122
  }
132
123
  // Intercept completion of recv_initial_metadata.