grpc 1.41.0.pre2 → 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 +81 -68
  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
@@ -82,21 +82,12 @@ void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
82
82
  namespace grpc_core {
83
83
 
84
84
  struct RegisteredCall {
85
- // The method and host are kept as part of this struct just to manage their
86
- // lifetime since they must outlive the mdelem contents.
87
- std::string method;
88
- std::string host;
89
-
90
85
  grpc_mdelem path;
91
86
  grpc_mdelem authority;
92
87
 
93
88
  explicit RegisteredCall(const char* method_arg, const char* host_arg);
94
- // TODO(vjpai): delete copy constructor once all supported compilers allow
95
- // std::map value_type to be MoveConstructible.
96
89
  RegisteredCall(const RegisteredCall& other);
97
- RegisteredCall(RegisteredCall&& other) noexcept;
98
90
  RegisteredCall& operator=(const RegisteredCall&) = delete;
99
- RegisteredCall& operator=(RegisteredCall&&) = delete;
100
91
 
101
92
  ~RegisteredCall();
102
93
  };
@@ -20,90 +20,37 @@
20
20
 
21
21
  #include "src/core/lib/surface/channel_init.h"
22
22
 
23
- #include <grpc/support/alloc.h>
23
+ #include <algorithm>
24
24
 
25
- typedef struct stage_slot {
26
- grpc_channel_init_stage fn;
27
- void* arg;
28
- int priority;
29
- size_t insertion_order;
30
- } stage_slot;
25
+ namespace grpc_core {
31
26
 
32
- typedef struct stage_slots {
33
- stage_slot* slots;
34
- size_t num_slots;
35
- size_t cap_slots;
36
- } stage_slots;
37
-
38
- static stage_slots g_slots[GRPC_NUM_CHANNEL_STACK_TYPES];
39
- static bool g_finalized;
40
-
41
- void grpc_channel_init_init(void) {
42
- for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
43
- g_slots[i].slots = nullptr;
44
- g_slots[i].num_slots = 0;
45
- g_slots[i].cap_slots = 0;
46
- }
47
- g_finalized = false;
48
- }
49
-
50
- void grpc_channel_init_register_stage(grpc_channel_stack_type type,
51
- int priority,
52
- grpc_channel_init_stage stage,
53
- void* stage_arg) {
54
- GPR_ASSERT(!g_finalized);
55
- if (g_slots[type].cap_slots == g_slots[type].num_slots) {
56
- g_slots[type].cap_slots = GPR_MAX(8, 3 * g_slots[type].cap_slots / 2);
57
- g_slots[type].slots = static_cast<stage_slot*>(
58
- gpr_realloc(g_slots[type].slots,
59
- g_slots[type].cap_slots * sizeof(*g_slots[type].slots)));
60
- }
61
- stage_slot* s = &g_slots[type].slots[g_slots[type].num_slots++];
62
- s->insertion_order = g_slots[type].num_slots;
63
- s->priority = priority;
64
- s->fn = stage;
65
- s->arg = stage_arg;
66
- }
67
-
68
- static int compare_slots(const void* a, const void* b) {
69
- const stage_slot* sa = static_cast<const stage_slot*>(a);
70
- const stage_slot* sb = static_cast<const stage_slot*>(b);
71
-
72
- int c = GPR_ICMP(sa->priority, sb->priority);
73
- if (c != 0) return c;
74
- return GPR_ICMP(sa->insertion_order, sb->insertion_order);
27
+ void ChannelInit::Builder::RegisterStage(grpc_channel_stack_type type,
28
+ int priority, Stage stage) {
29
+ slots_[type].emplace_back(std::move(stage), priority);
75
30
  }
76
31
 
77
- void grpc_channel_init_finalize(void) {
78
- GPR_ASSERT(!g_finalized);
32
+ ChannelInit ChannelInit::Builder::Build() {
33
+ ChannelInit result;
79
34
  for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
80
- qsort(g_slots[i].slots, g_slots[i].num_slots, sizeof(*g_slots[i].slots),
81
- compare_slots);
82
- }
83
- g_finalized = true;
84
- }
85
-
86
- void grpc_channel_init_shutdown(void) {
87
- for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
88
- gpr_free(g_slots[i].slots);
89
- g_slots[i].slots =
90
- static_cast<stage_slot*>(reinterpret_cast<void*>(0xdeadbeef));
35
+ auto& slots = slots_[i];
36
+ std::stable_sort(
37
+ slots.begin(), slots.end(),
38
+ [](const Slot& a, const Slot& b) { return a.priority < b.priority; });
39
+ auto& result_slots = result.slots_[i];
40
+ result_slots.reserve(slots.size());
41
+ for (auto& slot : slots) {
42
+ result_slots.emplace_back(std::move(slot.stage));
43
+ }
91
44
  }
45
+ return result;
92
46
  }
93
47
 
94
- bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
95
- grpc_channel_stack_type type) {
96
- GPR_ASSERT(g_finalized);
97
-
98
- grpc_channel_stack_builder_set_name(builder,
99
- grpc_channel_stack_type_string(type));
100
-
101
- for (size_t i = 0; i < g_slots[type].num_slots; i++) {
102
- const stage_slot* slot = &g_slots[type].slots[i];
103
- if (!slot->fn(builder, slot->arg)) {
104
- return false;
105
- }
48
+ bool ChannelInit::CreateStack(grpc_channel_stack_builder* builder,
49
+ grpc_channel_stack_type type) const {
50
+ for (const auto& stage : slots_[type]) {
51
+ if (!stage(builder)) return false;
106
52
  }
107
-
108
53
  return true;
109
54
  }
55
+
56
+ } // namespace grpc_core
@@ -21,9 +21,10 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include "src/core/lib/channel/channel_stack_builder.h"
24
+ #include <functional>
25
+ #include <vector>
26
+
25
27
  #include "src/core/lib/surface/channel_stack_type.h"
26
- #include "src/core/lib/transport/transport.h"
27
28
 
28
29
  #define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
29
30
 
@@ -32,47 +33,54 @@
32
33
  /// It also provides a universal entry path to run those mutators to build
33
34
  /// a channel stack for various subsystems.
34
35
 
35
- /// One stage of mutation: call functions against \a builder to influence the
36
- /// finally constructed channel stack
37
- typedef bool (*grpc_channel_init_stage)(grpc_channel_stack_builder* builder,
38
- void* arg);
39
-
40
- /// Global initialization of the system
41
- void grpc_channel_init_init(void);
42
-
43
- /// Register one stage of mutators.
44
- /// Stages are run in priority order (lowest to highest), and then in
45
- /// registration order (in the case of a tie).
46
- /// Stages are registered against one of the pre-determined channel stack
47
- /// types.
48
- /// If the channel stack type is GRPC_CLIENT_SUBCHANNEL, the caller should
49
- /// ensure that subchannels with different filter lists will always have
50
- /// different channel args. This requires setting a channel arg in case the
51
- /// registration function relies on some condition other than channel args to
52
- /// decide whether to add a filter or not.
53
- void grpc_channel_init_register_stage(grpc_channel_stack_type type,
54
- int priority,
55
- grpc_channel_init_stage stage_fn,
56
- void* stage_arg);
57
-
58
- /// Finalize registration. No more calls to grpc_channel_init_register_stage are
59
- /// allowed.
60
- void grpc_channel_init_finalize(void);
61
- /// Shutdown the channel init system
62
- void grpc_channel_init_shutdown(void);
63
-
64
- /// Construct a channel stack of some sort: see channel_stack.h for details
65
- /// \a type is the type of channel stack to create
66
- /// \a prefix_bytes is the number of bytes before the channel stack to allocate
67
- /// \a args are configuration arguments for the channel stack
68
- /// \a initial_refs is the initial refcount to give the channel stack
69
- /// \a destroy and \a destroy_arg specify how to destroy the channel stack
70
- /// if destroy_arg is NULL, the returned value from this function will be
71
- /// substituted
72
- /// \a optional_transport is either NULL or a constructed transport object
73
- /// Returns a pointer to the base of the memory allocated (the actual channel
74
- /// stack object will be prefix_bytes past that pointer)
75
- bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
76
- grpc_channel_stack_type type);
36
+ typedef struct grpc_channel_stack_builder grpc_channel_stack_builder;
37
+
38
+ namespace grpc_core {
39
+
40
+ class ChannelInit {
41
+ public:
42
+ /// One stage of mutation: call functions against \a builder to influence the
43
+ /// finally constructed channel stack
44
+ using Stage = std::function<bool(grpc_channel_stack_builder* builder)>;
45
+
46
+ class Builder {
47
+ public:
48
+ /// Register one stage of mutators.
49
+ /// Stages are run in priority order (lowest to highest), and then in
50
+ /// registration order (in the case of a tie).
51
+ /// Stages are registered against one of the pre-determined channel stack
52
+ /// types.
53
+ /// If the channel stack type is GRPC_CLIENT_SUBCHANNEL, the caller should
54
+ /// ensure that subchannels with different filter lists will always have
55
+ /// different channel args. This requires setting a channel arg in case the
56
+ /// registration function relies on some condition other than channel args
57
+ /// to decide whether to add a filter or not.
58
+ void RegisterStage(grpc_channel_stack_type type, int priority, Stage stage);
59
+
60
+ /// Finalize registration. No more calls to grpc_channel_init_register_stage
61
+ /// are allowed.
62
+ ChannelInit Build();
63
+
64
+ private:
65
+ struct Slot {
66
+ Slot(Stage stage, int priority)
67
+ : stage(std::move(stage)), priority(priority) {}
68
+ Stage stage;
69
+ int priority;
70
+ };
71
+ std::vector<Slot> slots_[GRPC_NUM_CHANNEL_STACK_TYPES];
72
+ };
73
+
74
+ /// Construct a channel stack of some sort: see channel_stack.h for details
75
+ /// \a type is the type of channel stack to create
76
+ /// \a builder is the channel stack builder to build into.
77
+ bool CreateStack(grpc_channel_stack_builder* builder,
78
+ grpc_channel_stack_type type) const;
79
+
80
+ private:
81
+ std::vector<Stage> slots_[GRPC_NUM_CHANNEL_STACK_TYPES];
82
+ };
83
+
84
+ } // namespace grpc_core
77
85
 
78
86
  #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H */
@@ -628,8 +628,8 @@ static void cq_check_tag(grpc_completion_queue* cq, void* tag, bool lock_cq) {
628
628
  for (int i = 0; i < static_cast<int>(cq->outstanding_tag_count); i++) {
629
629
  if (cq->outstanding_tags[i] == tag) {
630
630
  cq->outstanding_tag_count--;
631
- GPR_SWAP(void*, cq->outstanding_tags[i],
632
- cq->outstanding_tags[cq->outstanding_tag_count]);
631
+ std::swap(cq->outstanding_tags[i],
632
+ cq->outstanding_tags[cq->outstanding_tag_count]);
633
633
  found = 1;
634
634
  break;
635
635
  }
@@ -665,7 +665,8 @@ bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
665
665
  #ifndef NDEBUG
666
666
  gpr_mu_lock(cq->mu);
667
667
  if (cq->outstanding_tag_count == cq->outstanding_tag_capacity) {
668
- cq->outstanding_tag_capacity = GPR_MAX(4, 2 * cq->outstanding_tag_capacity);
668
+ cq->outstanding_tag_capacity =
669
+ std::max(size_t(4), 2 * cq->outstanding_tag_capacity);
669
670
  cq->outstanding_tags = static_cast<void**>(gpr_realloc(
670
671
  cq->outstanding_tags,
671
672
  sizeof(*cq->outstanding_tags) * cq->outstanding_tag_capacity));
@@ -1066,7 +1067,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
1066
1067
  if (cqd->queue.num_items() > 0 &&
1067
1068
  cqd->pending_events.load(std::memory_order_acquire) > 0) {
1068
1069
  gpr_mu_lock(cq->mu);
1069
- cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
1070
+ (void)cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
1070
1071
  gpr_mu_unlock(cq->mu);
1071
1072
  }
1072
1073
 
@@ -1143,7 +1144,7 @@ static void del_plucker(grpc_completion_queue* cq, void* tag,
1143
1144
  for (int i = 0; i < cqd->num_pluckers; i++) {
1144
1145
  if (cqd->pluckers[i].tag == tag && cqd->pluckers[i].worker == worker) {
1145
1146
  cqd->num_pluckers--;
1146
- GPR_SWAP(plucker, cqd->pluckers[i], cqd->pluckers[cqd->num_pluckers]);
1147
+ std::swap(cqd->pluckers[i], cqd->pluckers[cqd->num_pluckers]);
1147
1148
  return;
1148
1149
  }
1149
1150
  }
@@ -48,7 +48,6 @@
48
48
  #include "src/core/lib/slice/slice_internal.h"
49
49
  #include "src/core/lib/surface/api_trace.h"
50
50
  #include "src/core/lib/surface/call.h"
51
- #include "src/core/lib/surface/channel_init.h"
52
51
  #include "src/core/lib/surface/completion_queue.h"
53
52
  #include "src/core/lib/surface/lame_client.h"
54
53
  #include "src/core/lib/surface/server.h"
@@ -77,34 +76,6 @@ static void do_basic_init(void) {
77
76
  gpr_time_init();
78
77
  }
79
78
 
80
- static bool append_filter(grpc_channel_stack_builder* builder, void* arg) {
81
- return grpc_channel_stack_builder_append_filter(
82
- builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
83
- }
84
-
85
- static bool prepend_filter(grpc_channel_stack_builder* builder, void* arg) {
86
- return grpc_channel_stack_builder_prepend_filter(
87
- builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
88
- }
89
-
90
- static void register_builtin_channel_init() {
91
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL,
92
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
93
- grpc_add_connected_filter, nullptr);
94
- grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL,
95
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
96
- grpc_add_connected_filter, nullptr);
97
- grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL,
98
- GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
99
- grpc_add_connected_filter, nullptr);
100
- grpc_channel_init_register_stage(
101
- GRPC_CLIENT_LAME_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
102
- append_filter, const_cast<grpc_channel_filter*>(&grpc_lame_filter));
103
- grpc_channel_init_register_stage(
104
- GRPC_SERVER_CHANNEL, INT_MAX, prepend_filter,
105
- const_cast<grpc_channel_filter*>(&grpc_core::Server::kServerTopFilter));
106
- }
107
-
108
79
  typedef struct grpc_plugin {
109
80
  void (*init)();
110
81
  void (*destroy)();
@@ -134,10 +105,8 @@ void grpc_init(void) {
134
105
  grpc_core::Fork::GlobalInit();
135
106
  grpc_fork_handlers_auto_register();
136
107
  grpc_stats_init();
137
- grpc_init_static_metadata_ctx();
138
108
  grpc_slice_intern_init();
139
109
  grpc_mdctx_global_init();
140
- grpc_channel_init_init();
141
110
  grpc_core::channelz::ChannelzRegistry::Init();
142
111
  grpc_security_pre_init();
143
112
  grpc_core::ApplicationCallbackExecCtx::GlobalInit();
@@ -149,13 +118,7 @@ void grpc_init(void) {
149
118
  g_all_of_the_plugins[i].init();
150
119
  }
151
120
  }
152
- /* register channel finalization AFTER all plugins, to ensure that it's run
153
- * at the appropriate time */
154
- grpc_register_security_filters();
155
- register_builtin_channel_init();
156
121
  grpc_tracer_init();
157
- /* no more changes to channel init pipelines */
158
- grpc_channel_init_finalize();
159
122
  grpc_iomgr_start();
160
123
  }
161
124
 
@@ -189,8 +152,6 @@ void grpc_shutdown_internal_locked(void)
189
152
  grpc_core::ApplicationCallbackExecCtx::GlobalShutdown();
190
153
  g_shutting_down = false;
191
154
  g_shutting_down_cv->SignalAll();
192
- // Absolute last action will be to delete static metadata context.
193
- grpc_destroy_static_metadata_ctx();
194
155
  }
195
156
 
196
157
  void grpc_shutdown_internal(void* /*ignored*/) {
@@ -21,6 +21,8 @@
21
21
  #include <limits.h>
22
22
  #include <string.h>
23
23
 
24
+ #include "src/core/lib/channel/channel_stack_builder.h"
25
+ #include "src/core/lib/config/core_configuration.h"
24
26
  #include "src/core/lib/debug/trace.h"
25
27
  #include "src/core/lib/security/authorization/sdk_server_authz_filter.h"
26
28
  #include "src/core/lib/security/context/security_context.h"
@@ -30,14 +32,13 @@
30
32
  #include "src/core/lib/security/transport/auth_filters.h"
31
33
  #include "src/core/lib/security/transport/secure_endpoint.h"
32
34
  #include "src/core/lib/security/transport/security_handshaker.h"
33
- #include "src/core/lib/surface/channel_init.h"
34
35
  #include "src/core/lib/surface/init.h"
35
36
  #include "src/core/tsi/transport_security_interface.h"
36
37
 
37
38
  void grpc_security_pre_init(void) {}
38
39
 
39
40
  static bool maybe_prepend_client_auth_filter(
40
- grpc_channel_stack_builder* builder, void* /*arg*/) {
41
+ grpc_channel_stack_builder* builder) {
41
42
  const grpc_channel_args* args =
42
43
  grpc_channel_stack_builder_get_channel_arguments(builder);
43
44
  if (args) {
@@ -52,7 +53,7 @@ static bool maybe_prepend_client_auth_filter(
52
53
  }
53
54
 
54
55
  static bool maybe_prepend_server_auth_filter(
55
- grpc_channel_stack_builder* builder, void* /*arg*/) {
56
+ grpc_channel_stack_builder* builder) {
56
57
  const grpc_channel_args* args =
57
58
  grpc_channel_stack_builder_get_channel_arguments(builder);
58
59
  if (args) {
@@ -67,7 +68,7 @@ static bool maybe_prepend_server_auth_filter(
67
68
  }
68
69
 
69
70
  static bool maybe_prepend_sdk_server_authz_filter(
70
- grpc_channel_stack_builder* builder, void* /*arg*/) {
71
+ grpc_channel_stack_builder* builder) {
71
72
  const grpc_channel_args* args =
72
73
  grpc_channel_stack_builder_get_channel_arguments(builder);
73
74
  const auto* provider =
@@ -81,20 +82,22 @@ static bool maybe_prepend_sdk_server_authz_filter(
81
82
  return true;
82
83
  }
83
84
 
84
- void grpc_register_security_filters(void) {
85
+ namespace grpc_core {
86
+ void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
85
87
  // Register the auth client with a priority < INT_MAX to allow the authority
86
88
  // filter -on which the auth filter depends- to be higher on the channel
87
89
  // stack.
88
- grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL, INT_MAX - 1,
89
- maybe_prepend_client_auth_filter, nullptr);
90
- grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX - 1,
91
- maybe_prepend_client_auth_filter, nullptr);
92
- grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX - 1,
93
- maybe_prepend_server_auth_filter, nullptr);
90
+ builder->channel_init()->RegisterStage(GRPC_CLIENT_SUBCHANNEL, INT_MAX - 1,
91
+ maybe_prepend_client_auth_filter);
92
+ builder->channel_init()->RegisterStage(GRPC_CLIENT_DIRECT_CHANNEL,
93
+ INT_MAX - 1,
94
+ maybe_prepend_client_auth_filter);
95
+ builder->channel_init()->RegisterStage(GRPC_SERVER_CHANNEL, INT_MAX - 1,
96
+ maybe_prepend_server_auth_filter);
94
97
  // Register the SdkServerAuthzFilter with a priority less than
95
98
  // server_auth_filter to allow server_auth_filter on which the sdk filter
96
99
  // depends on to be higher on the channel stack.
97
- grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX - 2,
98
- maybe_prepend_sdk_server_authz_filter,
99
- nullptr);
100
+ builder->channel_init()->RegisterStage(GRPC_SERVER_CHANNEL, INT_MAX - 2,
101
+ maybe_prepend_sdk_server_authz_filter);
100
102
  }
103
+ } // namespace grpc_core
@@ -45,9 +45,9 @@ namespace {
45
45
  struct ChannelData {
46
46
  explicit ChannelData(grpc_channel_element_args* args)
47
47
  : state_tracker("lame_channel", GRPC_CHANNEL_SHUTDOWN) {
48
- grpc_error_handle err = grpc_channel_args_find_pointer<grpc_error>(
48
+ grpc_error_handle* err = grpc_channel_args_find_pointer<grpc_error_handle>(
49
49
  args->channel_args, GRPC_ARG_LAME_FILTER_ERROR);
50
- if (err != nullptr) error = GRPC_ERROR_REF(err);
50
+ if (err != nullptr) error = GRPC_ERROR_REF(*err);
51
51
  }
52
52
 
53
53
  ~ChannelData() { GRPC_ERROR_UNREF(error); }
@@ -125,20 +125,28 @@ static void lame_destroy_channel_elem(grpc_channel_element* elem) {
125
125
 
126
126
  // Channel arg vtable for a grpc_error_handle.
127
127
  void* ErrorCopy(void* p) {
128
- grpc_error_handle error = static_cast<grpc_error_handle>(p);
129
- return GRPC_ERROR_REF(error);
128
+ grpc_error_handle* new_error = nullptr;
129
+ if (p != nullptr) {
130
+ grpc_error_handle* error = static_cast<grpc_error_handle*>(p);
131
+ new_error = new grpc_error_handle();
132
+ *new_error = GRPC_ERROR_REF(*error);
133
+ }
134
+ return new_error;
130
135
  }
131
136
  void ErrorDestroy(void* p) {
132
- grpc_error_handle error = static_cast<grpc_error_handle>(p);
133
- GRPC_ERROR_UNREF(error);
137
+ if (p != nullptr) {
138
+ grpc_error_handle* error = static_cast<grpc_error_handle*>(p);
139
+ GRPC_ERROR_UNREF(*error);
140
+ delete error;
141
+ }
134
142
  }
135
- int ErrorCompare(void* p, void* q) { return GPR_ICMP(p, q); }
143
+ int ErrorCompare(void* p, void* q) { return grpc_core::QsortCompare(p, q); }
136
144
  const grpc_arg_pointer_vtable kLameFilterErrorArgVtable = {
137
145
  ErrorCopy, ErrorDestroy, ErrorCompare};
138
146
 
139
147
  } // namespace
140
148
 
141
- grpc_arg MakeLameClientErrorArg(grpc_error_handle error) {
149
+ grpc_arg MakeLameClientErrorArg(grpc_error_handle* error) {
142
150
  return grpc_channel_arg_pointer_create(
143
151
  const_cast<char*>(GRPC_ARG_LAME_FILTER_ERROR), error,
144
152
  &kLameFilterErrorArgVtable);
@@ -174,9 +182,8 @@ grpc_channel* grpc_lame_client_channel_create(const char* target,
174
182
  grpc_error_set_int(
175
183
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel"),
176
184
  GRPC_ERROR_INT_GRPC_STATUS, error_code),
177
- GRPC_ERROR_STR_GRPC_MESSAGE,
178
- grpc_slice_from_static_string(error_message));
179
- grpc_arg error_arg = grpc_core::MakeLameClientErrorArg(error);
185
+ GRPC_ERROR_STR_GRPC_MESSAGE, error_message);
186
+ grpc_arg error_arg = grpc_core::MakeLameClientErrorArg(&error);
180
187
  grpc_channel_args args = {1, &error_arg};
181
188
  grpc_channel* channel = grpc_channel_create(
182
189
  target, &args, GRPC_CLIENT_LAME_CHANNEL, nullptr, nullptr, 0, nullptr);
@@ -25,7 +25,7 @@
25
25
 
26
26
  namespace grpc_core {
27
27
  // Does NOT take ownership of error.
28
- grpc_arg MakeLameClientErrorArg(grpc_error_handle error);
28
+ grpc_arg MakeLameClientErrorArg(grpc_error_handle* error);
29
29
  } // namespace grpc_core
30
30
 
31
31
  extern const grpc_channel_filter grpc_lame_filter;
@@ -794,6 +794,7 @@ void DonePublishedShutdown(void* /*done_arg*/, grpc_cq_completion* storage) {
794
794
  // connection is NOT closed until the server is done with all those calls.
795
795
  // -- Once there are no more calls in progress, the channel is closed.
796
796
  void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
797
+ absl::Notification* await_requests = nullptr;
797
798
  ChannelBroadcaster broadcaster;
798
799
  {
799
800
  // Wait for startup to be finished. Locks mu_global.
@@ -820,7 +821,12 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
820
821
  KillPendingWorkLocked(
821
822
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown"));
822
823
  }
823
- ShutdownUnrefOnShutdownCall();
824
+ await_requests = ShutdownUnrefOnShutdownCall();
825
+ }
826
+ // We expect no new requests but there can still be requests in-flight.
827
+ // Wait for them to complete before proceeding.
828
+ if (await_requests != nullptr) {
829
+ await_requests->WaitForNotification();
824
830
  }
825
831
  // Shutdown listeners.
826
832
  for (auto& listener : listeners_) {
@@ -1248,7 +1254,7 @@ void Server::CallData::Publish(size_t cq_idx, RequestedCall* rc) {
1248
1254
  grpc_call_set_completion_queue(call_, rc->cq_bound_to_call);
1249
1255
  *rc->call = call_;
1250
1256
  cq_new_ = server_->cqs_[cq_idx];
1251
- GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, initial_metadata_);
1257
+ std::swap(*rc->initial_metadata, initial_metadata_);
1252
1258
  switch (rc->type) {
1253
1259
  case RequestedCall::Type::BATCH_CALL:
1254
1260
  GPR_ASSERT(host_.has_value());
@@ -1379,24 +1385,24 @@ void Server::CallData::RecvInitialMetadataReady(void* arg,
1379
1385
  grpc_error_handle error) {
1380
1386
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1381
1387
  CallData* calld = static_cast<CallData*>(elem->call_data);
1382
- grpc_millis op_deadline;
1383
1388
  if (error == GRPC_ERROR_NONE) {
1384
- GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.path != nullptr);
1385
- GPR_DEBUG_ASSERT(calld->recv_initial_metadata_->idx.named.authority !=
1386
- nullptr);
1387
- calld->path_.emplace(grpc_slice_ref_internal(
1388
- GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.path->md)));
1389
- calld->host_.emplace(grpc_slice_ref_internal(
1390
- GRPC_MDVALUE(calld->recv_initial_metadata_->idx.named.authority->md)));
1391
- grpc_metadata_batch_remove(calld->recv_initial_metadata_, GRPC_BATCH_PATH);
1392
- grpc_metadata_batch_remove(calld->recv_initial_metadata_,
1393
- GRPC_BATCH_AUTHORITY);
1389
+ GPR_DEBUG_ASSERT(
1390
+ calld->recv_initial_metadata_->legacy_index()->named.path != nullptr);
1391
+ GPR_DEBUG_ASSERT(
1392
+ calld->recv_initial_metadata_->legacy_index()->named.authority !=
1393
+ nullptr);
1394
+ calld->path_.emplace(grpc_slice_ref_internal(GRPC_MDVALUE(
1395
+ calld->recv_initial_metadata_->legacy_index()->named.path->md)));
1396
+ calld->host_.emplace(grpc_slice_ref_internal(GRPC_MDVALUE(
1397
+ calld->recv_initial_metadata_->legacy_index()->named.authority->md)));
1398
+ calld->recv_initial_metadata_->Remove(GRPC_BATCH_PATH);
1399
+ calld->recv_initial_metadata_->Remove(GRPC_BATCH_AUTHORITY);
1394
1400
  } else {
1395
- GRPC_ERROR_REF(error);
1401
+ (void)GRPC_ERROR_REF(error);
1396
1402
  }
1397
- op_deadline = calld->recv_initial_metadata_->deadline;
1398
- if (op_deadline != GRPC_MILLIS_INF_FUTURE) {
1399
- calld->deadline_ = op_deadline;
1403
+ auto op_deadline = calld->recv_initial_metadata_->get(GrpcTimeoutMetadata());
1404
+ if (op_deadline.has_value()) {
1405
+ calld->deadline_ = *op_deadline;
1400
1406
  }
1401
1407
  if (calld->host_.has_value() && calld->path_.has_value()) {
1402
1408
  /* do nothing */
@@ -1469,9 +1475,11 @@ void Server::CallData::StartTransportStreamOpBatch(
1469
1475
 
1470
1476
  grpc_server* grpc_server_create(const grpc_channel_args* args, void* reserved) {
1471
1477
  grpc_core::ExecCtx exec_ctx;
1478
+ args = grpc_channel_args_remove_grpc_internal(args);
1472
1479
  GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
1473
1480
  grpc_server* c_server = new grpc_server;
1474
1481
  c_server->core_server = grpc_core::MakeOrphanable<grpc_core::Server>(args);
1482
+ grpc_channel_args_destroy(args);
1475
1483
  return c_server;
1476
1484
  }
1477
1485