grpc 1.41.0 → 1.42.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (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 +83 -70
  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
@@ -27,8 +27,8 @@
27
27
  #include "src/core/ext/filters/client_channel/client_channel.h"
28
28
  #include "src/core/ext/filters/client_channel/retry_service_config.h"
29
29
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
30
- #include "src/core/ext/filters/client_channel/service_config.h"
31
- #include "src/core/ext/filters/client_channel/service_config_call_data.h"
30
+ #include "src/core/ext/service_config/service_config.h"
31
+ #include "src/core/ext/service_config/service_config_call_data.h"
32
32
  #include "src/core/lib/backoff/backoff.h"
33
33
  #include "src/core/lib/channel/channel_args.h"
34
34
  #include "src/core/lib/channel/channel_stack.h"
@@ -335,9 +335,10 @@ class RetryFilter::CallData {
335
335
  call_attempt_->lb_call_committed_ = true;
336
336
  auto* calld = call_attempt_->calld_;
337
337
  if (calld->retry_committed_) {
338
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
339
- calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA]
340
- .value);
338
+ auto* service_config_call_data =
339
+ static_cast<ClientChannelServiceConfigCallData*>(
340
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA]
341
+ .value);
341
342
  service_config_call_data->call_dispatch_controller()->Commit();
342
343
  }
343
344
  }
@@ -419,27 +420,22 @@ class RetryFilter::CallData {
419
420
  // BatchData.batch.payload points to this.
420
421
  grpc_transport_stream_op_batch_payload batch_payload_;
421
422
  // For send_initial_metadata.
422
- // Note that we need to make a copy of the initial metadata for each
423
- // call attempt instead of just referring to the copy in call_data,
424
- // because filters in the subchannel stack may modify the metadata,
425
- // so we need to start in a pristine state for each attempt of the call.
426
- grpc_linked_mdelem* send_initial_metadata_storage_;
427
- grpc_metadata_batch send_initial_metadata_;
423
+ grpc_linked_mdelem retry_attempts_metadata_;
424
+ grpc_metadata_batch send_initial_metadata_{calld_->arena_};
428
425
  // For send_message.
429
426
  // TODO(roth): Restructure this to eliminate use of ManualConstructor.
430
427
  ManualConstructor<ByteStreamCache::CachingByteStream> send_message_;
431
428
  // For send_trailing_metadata.
432
- grpc_linked_mdelem* send_trailing_metadata_storage_;
433
- grpc_metadata_batch send_trailing_metadata_;
429
+ grpc_metadata_batch send_trailing_metadata_{calld_->arena_};
434
430
  // For intercepting recv_initial_metadata.
435
- grpc_metadata_batch recv_initial_metadata_;
431
+ grpc_metadata_batch recv_initial_metadata_{calld_->arena_};
436
432
  grpc_closure recv_initial_metadata_ready_;
437
433
  bool trailing_metadata_available_ = false;
438
434
  // For intercepting recv_message.
439
435
  grpc_closure recv_message_ready_;
440
436
  OrphanablePtr<ByteStream> recv_message_;
441
437
  // For intercepting recv_trailing_metadata.
442
- grpc_metadata_batch recv_trailing_metadata_;
438
+ grpc_metadata_batch recv_trailing_metadata_{calld_->arena_};
443
439
  grpc_transport_stream_stats collect_stats_;
444
440
  grpc_closure recv_trailing_metadata_ready_;
445
441
  // These fields indicate which ops have been started and completed on
@@ -572,8 +568,7 @@ class RetryFilter::CallData {
572
568
  // Cached data for retrying send ops.
573
569
  // send_initial_metadata
574
570
  bool seen_send_initial_metadata_ = false;
575
- grpc_linked_mdelem* send_initial_metadata_storage_ = nullptr;
576
- grpc_metadata_batch send_initial_metadata_;
571
+ grpc_metadata_batch send_initial_metadata_{arena_};
577
572
  uint32_t send_initial_metadata_flags_;
578
573
  // TODO(roth): As part of implementing hedging, we'll probably need to
579
574
  // have the LB call set a value in CallAttempt and then propagate it
@@ -598,8 +593,7 @@ class RetryFilter::CallData {
598
593
  absl::InlinedVector<ByteStreamCache*, 3> send_messages_;
599
594
  // send_trailing_metadata
600
595
  bool seen_send_trailing_metadata_ = false;
601
- grpc_linked_mdelem* send_trailing_metadata_storage_ = nullptr;
602
- grpc_metadata_batch send_trailing_metadata_;
596
+ grpc_metadata_batch send_trailing_metadata_{arena_};
603
597
  };
604
598
 
605
599
  //
@@ -1159,8 +1153,9 @@ bool RetryFilter::CallData::CallAttempt::ShouldRetry(
1159
1153
  }
1160
1154
  }
1161
1155
  // Check with call dispatch controller.
1162
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
1163
- calld_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
1156
+ auto* service_config_call_data =
1157
+ static_cast<ClientChannelServiceConfigCallData*>(
1158
+ calld_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
1164
1159
  if (!service_config_call_data->call_dispatch_controller()->ShouldRetry()) {
1165
1160
  if (GRPC_TRACE_FLAG_ENABLED(grpc_retry_trace)) {
1166
1161
  gpr_log(
@@ -1308,18 +1303,6 @@ RetryFilter::CallData::CallAttempt::BatchData::~BatchData() {
1308
1303
  call_attempt_->calld_->chand_, call_attempt_->calld_,
1309
1304
  call_attempt_.get(), this);
1310
1305
  }
1311
- if (batch_.send_initial_metadata) {
1312
- grpc_metadata_batch_destroy(&call_attempt_->send_initial_metadata_);
1313
- }
1314
- if (batch_.send_trailing_metadata) {
1315
- grpc_metadata_batch_destroy(&call_attempt_->send_trailing_metadata_);
1316
- }
1317
- if (batch_.recv_initial_metadata) {
1318
- grpc_metadata_batch_destroy(&call_attempt_->recv_initial_metadata_);
1319
- }
1320
- if (batch_.recv_trailing_metadata) {
1321
- grpc_metadata_batch_destroy(&call_attempt_->recv_trailing_metadata_);
1322
- }
1323
1306
  GRPC_CALL_STACK_UNREF(call_attempt_->calld_->owning_call_, "Retry BatchData");
1324
1307
  call_attempt_.reset(DEBUG_LOCATION, "~BatchData");
1325
1308
  }
@@ -1363,9 +1346,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1363
1346
  return;
1364
1347
  }
1365
1348
  // Return metadata.
1366
- grpc_metadata_batch_move(
1367
- &call_attempt_->recv_initial_metadata_,
1368
- pending->batch->payload->recv_initial_metadata.recv_initial_metadata);
1349
+ *pending->batch->payload->recv_initial_metadata.recv_initial_metadata =
1350
+ std::move(call_attempt_->recv_initial_metadata_);
1369
1351
  // Propagate trailing_metadata_available.
1370
1352
  *pending->batch->payload->recv_initial_metadata.trailing_metadata_available =
1371
1353
  call_attempt_->trailing_metadata_available_;
@@ -1565,11 +1547,12 @@ void GetCallStatus(grpc_millis deadline, grpc_metadata_batch* md_batch,
1565
1547
  *is_lb_drop = true;
1566
1548
  }
1567
1549
  } else {
1568
- GPR_ASSERT(md_batch->idx.named.grpc_status != nullptr);
1569
- *status =
1570
- grpc_get_status_code_from_metadata(md_batch->idx.named.grpc_status->md);
1571
- if (md_batch->idx.named.grpc_retry_pushback_ms != nullptr) {
1572
- *server_pushback_md = &md_batch->idx.named.grpc_retry_pushback_ms->md;
1550
+ GPR_ASSERT(md_batch->legacy_index()->named.grpc_status != nullptr);
1551
+ *status = grpc_get_status_code_from_metadata(
1552
+ md_batch->legacy_index()->named.grpc_status->md);
1553
+ if (md_batch->legacy_index()->named.grpc_retry_pushback_ms != nullptr) {
1554
+ *server_pushback_md =
1555
+ &md_batch->legacy_index()->named.grpc_retry_pushback_ms->md;
1573
1556
  }
1574
1557
  }
1575
1558
  GRPC_ERROR_UNREF(error);
@@ -1601,9 +1584,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1601
1584
  &call_attempt_->collect_stats_,
1602
1585
  pending->batch->payload->recv_trailing_metadata.collect_stats);
1603
1586
  // Return metadata.
1604
- grpc_metadata_batch_move(
1605
- &call_attempt_->recv_trailing_metadata_,
1606
- pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata);
1587
+ *pending->batch->payload->recv_trailing_metadata.recv_trailing_metadata =
1588
+ std::move(call_attempt_->recv_trailing_metadata_);
1607
1589
  // Add closure.
1608
1590
  closures->Add(pending->batch->payload->recv_trailing_metadata
1609
1591
  .recv_trailing_metadata_ready,
@@ -1920,18 +1902,12 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1920
1902
  //
1921
1903
  // If we've already completed one or more attempts, add the
1922
1904
  // grpc-retry-attempts header.
1923
- call_attempt_->send_initial_metadata_storage_ =
1924
- static_cast<grpc_linked_mdelem*>(
1925
- calld->arena_->Alloc(sizeof(grpc_linked_mdelem) *
1926
- (calld->send_initial_metadata_.list.count +
1927
- (calld->num_attempts_completed_ > 0))));
1928
1905
  grpc_metadata_batch_copy(&calld->send_initial_metadata_,
1929
- &call_attempt_->send_initial_metadata_,
1930
- call_attempt_->send_initial_metadata_storage_);
1931
- if (GPR_UNLIKELY(call_attempt_->send_initial_metadata_.idx.named
1932
- .grpc_previous_rpc_attempts != nullptr)) {
1933
- grpc_metadata_batch_remove(&call_attempt_->send_initial_metadata_,
1934
- GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1906
+ &call_attempt_->send_initial_metadata_);
1907
+ if (GPR_UNLIKELY(call_attempt_->send_initial_metadata_.legacy_index()
1908
+ ->named.grpc_previous_rpc_attempts != nullptr)) {
1909
+ call_attempt_->send_initial_metadata_.Remove(
1910
+ GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1935
1911
  }
1936
1912
  if (GPR_UNLIKELY(calld->num_attempts_completed_ > 0)) {
1937
1913
  grpc_mdelem retry_md = grpc_mdelem_create(
@@ -1939,9 +1915,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1939
1915
  *retry_count_strings[calld->num_attempts_completed_ - 1], nullptr);
1940
1916
  grpc_error_handle error = grpc_metadata_batch_add_tail(
1941
1917
  &call_attempt_->send_initial_metadata_,
1942
- &call_attempt_->send_initial_metadata_storage_
1943
- [calld->send_initial_metadata_.list.count],
1944
- retry_md, GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1918
+ &call_attempt_->retry_attempts_metadata_, retry_md,
1919
+ GRPC_BATCH_GRPC_PREVIOUS_RPC_ATTEMPTS);
1945
1920
  if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
1946
1921
  gpr_log(GPR_ERROR, "error adding retry metadata: %s",
1947
1922
  grpc_error_std_string(error).c_str());
@@ -1983,13 +1958,8 @@ void RetryFilter::CallData::CallAttempt::BatchData::
1983
1958
  // We need to make a copy of the metadata batch for each attempt, since
1984
1959
  // the filters in the subchannel stack may modify this batch, and we don't
1985
1960
  // want those modifications to be passed forward to subsequent attempts.
1986
- call_attempt_->send_trailing_metadata_storage_ =
1987
- static_cast<grpc_linked_mdelem*>(
1988
- calld->arena_->Alloc(sizeof(grpc_linked_mdelem) *
1989
- calld->send_trailing_metadata_.list.count));
1990
1961
  grpc_metadata_batch_copy(&calld->send_trailing_metadata_,
1991
- &call_attempt_->send_trailing_metadata_,
1992
- call_attempt_->send_trailing_metadata_storage_);
1962
+ &call_attempt_->send_trailing_metadata_);
1993
1963
  call_attempt_->started_send_trailing_metadata_ = true;
1994
1964
  batch_.send_trailing_metadata = true;
1995
1965
  batch_.payload->send_trailing_metadata.send_trailing_metadata =
@@ -2000,7 +1970,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
2000
1970
  AddRetriableRecvInitialMetadataOp() {
2001
1971
  call_attempt_->started_recv_initial_metadata_ = true;
2002
1972
  batch_.recv_initial_metadata = true;
2003
- grpc_metadata_batch_init(&call_attempt_->recv_initial_metadata_);
1973
+ call_attempt_->recv_initial_metadata_.Clear();
2004
1974
  batch_.payload->recv_initial_metadata.recv_initial_metadata =
2005
1975
  &call_attempt_->recv_initial_metadata_;
2006
1976
  batch_.payload->recv_initial_metadata.trailing_metadata_available =
@@ -2027,7 +1997,7 @@ void RetryFilter::CallData::CallAttempt::BatchData::
2027
1997
  AddRetriableRecvTrailingMetadataOp() {
2028
1998
  call_attempt_->started_recv_trailing_metadata_ = true;
2029
1999
  batch_.recv_trailing_metadata = true;
2030
- grpc_metadata_batch_init(&call_attempt_->recv_trailing_metadata_);
2000
+ call_attempt_->recv_trailing_metadata_.Clear();
2031
2001
  batch_.payload->recv_trailing_metadata.recv_trailing_metadata =
2032
2002
  &call_attempt_->recv_trailing_metadata_;
2033
2003
  batch_.payload->recv_trailing_metadata.collect_stats =
@@ -2244,8 +2214,9 @@ void RetryFilter::CallData::StartTransportStreamOpBatch(
2244
2214
  chand_, this);
2245
2215
  }
2246
2216
  PendingBatchClear(pending);
2247
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2248
- call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2217
+ auto* service_config_call_data =
2218
+ static_cast<ClientChannelServiceConfigCallData*>(
2219
+ call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2249
2220
  committed_call_ = CreateLoadBalancedCall(
2250
2221
  service_config_call_data->call_dispatch_controller());
2251
2222
  committed_call_->StartTransportStreamOpBatch(batch);
@@ -2301,14 +2272,9 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2301
2272
  // Save a copy of metadata for send_initial_metadata ops.
2302
2273
  if (batch->send_initial_metadata) {
2303
2274
  seen_send_initial_metadata_ = true;
2304
- GPR_ASSERT(send_initial_metadata_storage_ == nullptr);
2305
2275
  grpc_metadata_batch* send_initial_metadata =
2306
2276
  batch->payload->send_initial_metadata.send_initial_metadata;
2307
- send_initial_metadata_storage_ =
2308
- static_cast<grpc_linked_mdelem*>(arena_->Alloc(
2309
- sizeof(grpc_linked_mdelem) * send_initial_metadata->list.count));
2310
- grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_,
2311
- send_initial_metadata_storage_);
2277
+ grpc_metadata_batch_copy(send_initial_metadata, &send_initial_metadata_);
2312
2278
  send_initial_metadata_flags_ =
2313
2279
  batch->payload->send_initial_metadata.send_initial_metadata_flags;
2314
2280
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
@@ -2322,14 +2288,9 @@ void RetryFilter::CallData::MaybeCacheSendOpsForBatch(PendingBatch* pending) {
2322
2288
  // Save metadata batch for send_trailing_metadata ops.
2323
2289
  if (batch->send_trailing_metadata) {
2324
2290
  seen_send_trailing_metadata_ = true;
2325
- GPR_ASSERT(send_trailing_metadata_storage_ == nullptr);
2326
2291
  grpc_metadata_batch* send_trailing_metadata =
2327
2292
  batch->payload->send_trailing_metadata.send_trailing_metadata;
2328
- send_trailing_metadata_storage_ =
2329
- static_cast<grpc_linked_mdelem*>(arena_->Alloc(
2330
- sizeof(grpc_linked_mdelem) * send_trailing_metadata->list.count));
2331
- grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_,
2332
- send_trailing_metadata_storage_);
2293
+ grpc_metadata_batch_copy(send_trailing_metadata, &send_trailing_metadata_);
2333
2294
  }
2334
2295
  }
2335
2296
 
@@ -2338,7 +2299,7 @@ void RetryFilter::CallData::FreeCachedSendInitialMetadata() {
2338
2299
  gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_initial_metadata",
2339
2300
  chand_, this);
2340
2301
  }
2341
- grpc_metadata_batch_destroy(&send_initial_metadata_);
2302
+ send_initial_metadata_.Clear();
2342
2303
  }
2343
2304
 
2344
2305
  void RetryFilter::CallData::FreeCachedSendMessage(size_t idx) {
@@ -2355,7 +2316,7 @@ void RetryFilter::CallData::FreeCachedSendTrailingMetadata() {
2355
2316
  gpr_log(GPR_INFO, "chand=%p calld=%p: destroying send_trailing_metadata",
2356
2317
  chand_, this);
2357
2318
  }
2358
- grpc_metadata_batch_destroy(&send_trailing_metadata_);
2319
+ send_trailing_metadata_.Clear();
2359
2320
  }
2360
2321
 
2361
2322
  void RetryFilter::CallData::FreeAllCachedSendOpData() {
@@ -2404,8 +2365,8 @@ RetryFilter::CallData::PendingBatch* RetryFilter::CallData::PendingBatchesAdd(
2404
2365
  // gRPC clients do not send trailing metadata.
2405
2366
  if (batch->send_initial_metadata) {
2406
2367
  pending_send_initial_metadata_ = true;
2407
- bytes_buffered_for_retry_ += grpc_metadata_batch_size(
2408
- batch->payload->send_initial_metadata.send_initial_metadata);
2368
+ bytes_buffered_for_retry_ += batch->payload->send_initial_metadata
2369
+ .send_initial_metadata->TransportSize();
2409
2370
  }
2410
2371
  if (batch->send_message) {
2411
2372
  pending_send_message_ = true;
@@ -2541,8 +2502,9 @@ void RetryFilter::CallData::RetryCommit(CallAttempt* call_attempt) {
2541
2502
  // call dispatch controller down into the LB call, and it won't be
2542
2503
  // our problem anymore.
2543
2504
  if (call_attempt->lb_call_committed()) {
2544
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2545
- call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2505
+ auto* service_config_call_data =
2506
+ static_cast<ClientChannelServiceConfigCallData*>(
2507
+ call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2546
2508
  service_config_call_data->call_dispatch_controller()->Commit();
2547
2509
  }
2548
2510
  // Free cached send ops.
@@ -22,7 +22,7 @@
22
22
  #include <memory>
23
23
 
24
24
  #include "src/core/ext/filters/client_channel/retry_throttle.h"
25
- #include "src/core/ext/filters/client_channel/service_config_parser.h"
25
+ #include "src/core/ext/service_config/service_config_parser.h"
26
26
  #include "src/core/lib/channel/status_util.h"
27
27
  #include "src/core/lib/iomgr/exec_ctx.h" // for grpc_millis
28
28
 
@@ -23,6 +23,7 @@
23
23
  #include <limits.h>
24
24
  #include <string.h>
25
25
 
26
+ #include <map>
26
27
  #include <string>
27
28
 
28
29
  #include <grpc/support/alloc.h>
@@ -30,7 +31,7 @@
30
31
  #include <grpc/support/string_util.h>
31
32
  #include <grpc/support/sync.h>
32
33
 
33
- #include "src/core/lib/avl/avl.h"
34
+ #include "src/core/lib/gprpp/manual_constructor.h"
34
35
 
35
36
  namespace grpc_core {
36
37
  namespace internal {
@@ -114,55 +115,24 @@ void ServerRetryThrottleData::RecordSuccess() {
114
115
  static_cast<gpr_atm>(throttle_data->max_milli_tokens_));
115
116
  }
116
117
 
117
- //
118
- // avl vtable for string -> server_retry_throttle_data map
119
- //
120
-
121
- namespace {
122
-
123
- void* copy_server_name(void* key, void* /*unused*/) {
124
- return gpr_strdup(static_cast<const char*>(key));
125
- }
126
-
127
- long compare_server_name(void* key1, void* key2, void* /*unused*/) {
128
- return strcmp(static_cast<const char*>(key1), static_cast<const char*>(key2));
129
- }
130
-
131
- void destroy_server_retry_throttle_data(void* value, void* /*unused*/) {
132
- ServerRetryThrottleData* throttle_data =
133
- static_cast<ServerRetryThrottleData*>(value);
134
- throttle_data->Unref();
135
- }
136
-
137
- void* copy_server_retry_throttle_data(void* value, void* /*unused*/) {
138
- ServerRetryThrottleData* throttle_data =
139
- static_cast<ServerRetryThrottleData*>(value);
140
- return throttle_data->Ref().release();
141
- }
142
-
143
- void destroy_server_name(void* key, void* /*unused*/) { gpr_free(key); }
144
-
145
- const grpc_avl_vtable avl_vtable = {
146
- destroy_server_name, copy_server_name, compare_server_name,
147
- destroy_server_retry_throttle_data, copy_server_retry_throttle_data};
148
-
149
- } // namespace
150
-
151
118
  //
152
119
  // ServerRetryThrottleMap
153
120
  //
154
121
 
122
+ using StringToDataMap =
123
+ std::map<std::string, RefCountedPtr<ServerRetryThrottleData>>;
155
124
  static gpr_mu g_mu;
156
- static grpc_avl g_avl;
125
+ static StringToDataMap* g_map;
157
126
 
158
127
  void ServerRetryThrottleMap::Init() {
159
128
  gpr_mu_init(&g_mu);
160
- g_avl = grpc_avl_create(&avl_vtable);
129
+ g_map = new StringToDataMap();
161
130
  }
162
131
 
163
132
  void ServerRetryThrottleMap::Shutdown() {
164
133
  gpr_mu_destroy(&g_mu);
165
- grpc_avl_unref(g_avl, nullptr);
134
+ delete g_map;
135
+ g_map = nullptr;
166
136
  }
167
137
 
168
138
  RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
@@ -170,23 +140,22 @@ RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
170
140
  intptr_t milli_token_ratio) {
171
141
  RefCountedPtr<ServerRetryThrottleData> result;
172
142
  gpr_mu_lock(&g_mu);
143
+ auto it = g_map->find(server_name);
173
144
  ServerRetryThrottleData* throttle_data =
174
- static_cast<ServerRetryThrottleData*>(
175
- grpc_avl_get(g_avl, const_cast<char*>(server_name.c_str()), nullptr));
145
+ it == g_map->end() ? nullptr : it->second.get();
176
146
  if (throttle_data == nullptr ||
177
147
  throttle_data->max_milli_tokens() != max_milli_tokens ||
178
148
  throttle_data->milli_token_ratio() != milli_token_ratio) {
179
149
  // Entry not found, or found with old parameters. Create a new one.
180
- result = MakeRefCounted<ServerRetryThrottleData>(
181
- max_milli_tokens, milli_token_ratio, throttle_data);
182
- g_avl = grpc_avl_add(g_avl, gpr_strdup(server_name.c_str()),
183
- result->Ref().release(), nullptr);
184
- } else {
185
- // Entry found. Return a new ref to it.
186
- result = throttle_data->Ref();
150
+ it = g_map
151
+ ->emplace(server_name,
152
+ MakeRefCounted<ServerRetryThrottleData>(
153
+ max_milli_tokens, milli_token_ratio, throttle_data))
154
+ .first;
155
+ throttle_data = it->second.get();
187
156
  }
188
157
  gpr_mu_unlock(&g_mu);
189
- return result;
158
+ return throttle_data->Ref();
190
159
  }
191
160
 
192
161
  } // namespace internal
@@ -128,7 +128,7 @@ class ServerAddressWeightAttribute : public ServerAddress::AttributeInterface {
128
128
  int Cmp(const AttributeInterface* other) const override {
129
129
  const auto* other_locality_attr =
130
130
  static_cast<const ServerAddressWeightAttribute*>(other);
131
- return GPR_ICMP(weight_, other_locality_attr->weight_);
131
+ return QsortCompare(weight_, other_locality_attr->weight_);
132
132
  }
133
133
 
134
134
  std::string ToString() const override {
@@ -19,11 +19,11 @@
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
- #include "src/core/ext/filters/client_channel/service_config_call_data.h"
22
+ #include "src/core/ext/service_config/service_config_call_data.h"
23
23
  #include "src/core/lib/channel/channel_args.h"
24
24
  #include "src/core/lib/channel/channel_stack.h"
25
25
  #include "src/core/lib/channel/channel_stack_builder.h"
26
- #include "src/core/lib/surface/channel_init.h"
26
+ #include "src/core/lib/config/core_configuration.h"
27
27
 
28
28
  namespace grpc_core {
29
29
 
@@ -59,26 +59,43 @@ class ServiceConfigChannelArgChannelData {
59
59
 
60
60
  class ServiceConfigChannelArgCallData {
61
61
  public:
62
- ServiceConfigChannelArgCallData(grpc_call_element* elem,
63
- const grpc_call_element_args* args) {
64
- ServiceConfigChannelArgChannelData* chand =
65
- static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
66
- RefCountedPtr<ServiceConfig> service_config = chand->service_config();
67
- if (service_config != nullptr) {
68
- GPR_DEBUG_ASSERT(args->context != nullptr);
69
- const auto* method_params_vector =
70
- service_config->GetMethodParsedConfigVector(args->path);
71
- args->arena->New<ServiceConfigCallData>(
72
- std::move(service_config), method_params_vector, args->context);
73
- }
62
+ ServiceConfigChannelArgCallData(
63
+ RefCountedPtr<ServiceConfig> service_config,
64
+ const ServiceConfigParser::ParsedConfigVector* method_config,
65
+ const grpc_call_element_args* args)
66
+ : call_context_(args->context),
67
+ service_config_call_data_(std::move(service_config), method_config,
68
+ /*call_attributes=*/{}) {
69
+ GPR_DEBUG_ASSERT(args->context != nullptr);
70
+ // No need to set the destroy function, since it will be cleaned up
71
+ // when this filter is destroyed in the filter stack.
72
+ args->context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value =
73
+ &service_config_call_data_;
74
+ }
75
+
76
+ ~ServiceConfigChannelArgCallData() {
77
+ // Remove the entry from call context, just in case anyone above us
78
+ // tries to look at it during call stack destruction.
79
+ call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = nullptr;
74
80
  }
81
+
82
+ private:
83
+ grpc_call_context_element* call_context_;
84
+ ServiceConfigCallData service_config_call_data_;
75
85
  };
76
86
 
77
87
  grpc_error_handle ServiceConfigChannelArgInitCallElem(
78
88
  grpc_call_element* elem, const grpc_call_element_args* args) {
79
- ServiceConfigChannelArgCallData* calld =
80
- static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
81
- new (calld) ServiceConfigChannelArgCallData(elem, args);
89
+ auto* chand =
90
+ static_cast<ServiceConfigChannelArgChannelData*>(elem->channel_data);
91
+ auto* calld = static_cast<ServiceConfigChannelArgCallData*>(elem->call_data);
92
+ RefCountedPtr<ServiceConfig> service_config = chand->service_config();
93
+ const ServiceConfigParser::ParsedConfigVector* method_config = nullptr;
94
+ if (service_config != nullptr) {
95
+ method_config = service_config->GetMethodParsedConfigVector(args->path);
96
+ }
97
+ new (calld) ServiceConfigChannelArgCallData(std::move(service_config),
98
+ method_config, args);
82
99
  return GRPC_ERROR_NONE;
83
100
  }
84
101
 
@@ -117,27 +134,23 @@ const grpc_channel_filter ServiceConfigChannelArgFilter = {
117
134
  grpc_channel_next_get_info,
118
135
  "service_config_channel_arg"};
119
136
 
120
- bool maybe_add_service_config_channel_arg_filter(
121
- grpc_channel_stack_builder* builder, void* /* arg */) {
122
- const grpc_channel_args* channel_args =
123
- grpc_channel_stack_builder_get_channel_arguments(builder);
124
- if (grpc_channel_args_want_minimal_stack(channel_args) ||
125
- grpc_channel_args_find_string(channel_args, GRPC_ARG_SERVICE_CONFIG) ==
126
- nullptr) {
127
- return true;
128
- }
129
- return grpc_channel_stack_builder_prepend_filter(
130
- builder, &ServiceConfigChannelArgFilter, nullptr, nullptr);
131
- }
132
-
133
137
  } // namespace
134
138
 
135
- } // namespace grpc_core
136
-
137
- void grpc_service_config_channel_arg_filter_init(void) {
138
- grpc_channel_init_register_stage(
139
+ void RegisterServiceConfigChannelArgFilter(
140
+ CoreConfiguration::Builder* builder) {
141
+ builder->channel_init()->RegisterStage(
139
142
  GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
140
- grpc_core::maybe_add_service_config_channel_arg_filter, nullptr);
143
+ [](grpc_channel_stack_builder* builder) {
144
+ const grpc_channel_args* channel_args =
145
+ grpc_channel_stack_builder_get_channel_arguments(builder);
146
+ if (grpc_channel_args_want_minimal_stack(channel_args) ||
147
+ grpc_channel_args_find_string(channel_args,
148
+ GRPC_ARG_SERVICE_CONFIG) == nullptr) {
149
+ return true;
150
+ }
151
+ return grpc_channel_stack_builder_prepend_filter(
152
+ builder, &ServiceConfigChannelArgFilter, nullptr, nullptr);
153
+ });
141
154
  }
142
155
 
143
- void grpc_service_config_channel_arg_filter_shutdown(void) {}
156
+ } // namespace grpc_core