grpc 1.64.3 → 1.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -58
  3. data/include/grpc/event_engine/event_engine.h +13 -6
  4. data/include/grpc/impl/channel_arg_names.h +7 -3
  5. data/include/grpc/module.modulemap +1 -0
  6. data/include/grpc/passive_listener.h +62 -0
  7. data/include/grpc/support/log.h +7 -17
  8. data/include/grpc/support/port_platform.h +3 -0
  9. data/src/core/channelz/channel_trace.cc +1 -1
  10. data/src/core/channelz/channel_trace.h +1 -1
  11. data/src/core/channelz/channelz.cc +3 -3
  12. data/src/core/channelz/channelz.h +7 -7
  13. data/src/core/channelz/channelz_registry.cc +4 -3
  14. data/src/core/client_channel/backup_poller.cc +4 -5
  15. data/src/core/client_channel/client_channel.cc +1324 -0
  16. data/src/core/client_channel/client_channel.h +243 -0
  17. data/src/core/client_channel/client_channel_filter.cc +266 -709
  18. data/src/core/client_channel/client_channel_filter.h +11 -64
  19. data/src/core/client_channel/client_channel_internal.h +16 -5
  20. data/src/core/client_channel/client_channel_plugin.cc +1 -14
  21. data/src/core/client_channel/client_channel_service_config.h +3 -3
  22. data/src/core/client_channel/config_selector.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +1 -1
  24. data/src/core/client_channel/dynamic_filters.cc +3 -3
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
  27. data/src/core/client_channel/load_balanced_call_destination.h +49 -0
  28. data/src/core/client_channel/retry_filter.cc +2 -9
  29. data/src/core/client_channel/retry_filter.h +2 -7
  30. data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
  31. data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
  32. data/src/core/client_channel/retry_service_config.cc +4 -5
  33. data/src/core/client_channel/retry_service_config.h +3 -3
  34. data/src/core/client_channel/subchannel.cc +220 -112
  35. data/src/core/client_channel/subchannel.h +31 -18
  36. data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
  37. data/src/core/client_channel/subchannel_pool_interface.h +2 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +36 -49
  39. data/src/core/client_channel/subchannel_stream_client.h +2 -4
  40. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
  41. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
  42. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  43. data/src/core/ext/filters/census/grpc_context.cc +2 -4
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  50. data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
  51. data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
  52. data/src/core/ext/filters/http/client_authority_filter.h +1 -0
  53. data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
  54. data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
  55. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
  56. data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
  58. data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
  59. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
  60. data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
  61. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  62. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  63. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
  64. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
  65. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  66. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  67. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
  68. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
  70. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  71. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
  73. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
  74. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
  75. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
  76. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
  78. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
  79. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
  80. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
  82. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
  84. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  85. data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
  86. data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
  87. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
  88. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
  89. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
  95. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
  97. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  98. data/src/core/handshaker/handshaker.cc +6 -14
  99. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
  100. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
  101. data/src/core/handshaker/security/secure_endpoint.cc +38 -32
  102. data/src/core/handshaker/security/secure_endpoint.h +0 -2
  103. data/src/core/handshaker/security/security_handshaker.cc +25 -37
  104. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
  105. data/src/core/lib/address_utils/parse_address.cc +27 -39
  106. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
  107. data/src/core/lib/avl/avl.h +1 -1
  108. data/src/core/lib/channel/channel_args.cc +13 -17
  109. data/src/core/lib/channel/channel_args.h +19 -8
  110. data/src/core/lib/channel/channel_stack.cc +5 -63
  111. data/src/core/lib/channel/channel_stack.h +13 -37
  112. data/src/core/lib/channel/channel_stack_builder.h +0 -5
  113. data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
  114. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
  115. data/src/core/lib/channel/connected_channel.cc +37 -676
  116. data/src/core/lib/channel/promise_based_filter.cc +41 -47
  117. data/src/core/lib/channel/promise_based_filter.h +124 -477
  118. data/src/core/lib/channel/status_util.cc +1 -1
  119. data/src/core/lib/compression/compression.cc +1 -1
  120. data/src/core/lib/compression/message_compress.cc +6 -6
  121. data/src/core/lib/config/config_vars.cc +3 -8
  122. data/src/core/lib/config/config_vars.h +1 -5
  123. data/src/core/lib/debug/event_log.h +1 -1
  124. data/src/core/lib/debug/trace.cc +43 -59
  125. data/src/core/lib/debug/trace.h +2 -97
  126. data/src/core/lib/debug/trace_flags.cc +255 -0
  127. data/src/core/lib/debug/trace_flags.h +133 -0
  128. data/src/core/lib/debug/trace_impl.h +115 -0
  129. data/src/core/lib/event_engine/ares_resolver.cc +5 -7
  130. data/src/core/lib/event_engine/ares_resolver.h +1 -3
  131. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  132. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
  133. data/src/core/lib/event_engine/event_engine.cc +29 -4
  134. data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
  135. data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
  136. data/src/core/lib/event_engine/forkable.cc +4 -5
  137. data/src/core/lib/event_engine/forkable.h +0 -11
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
  139. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
  140. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
  142. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
  143. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
  144. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
  146. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
  148. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
  149. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
  150. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
  151. data/src/core/lib/event_engine/shim.cc +1 -1
  152. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  153. data/src/core/lib/event_engine/thread_local.h +1 -1
  154. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  155. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
  156. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
  157. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
  158. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
  159. data/src/core/lib/event_engine/trace.h +6 -17
  160. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  161. data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
  162. data/src/core/lib/event_engine/windows/win_socket.h +4 -5
  163. data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
  164. data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
  165. data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
  166. data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
  167. data/src/core/lib/experiments/experiments.cc +35 -151
  168. data/src/core/lib/experiments/experiments.h +12 -45
  169. data/src/core/lib/gprpp/bitset.h +1 -1
  170. data/src/core/lib/gprpp/crash.cc +2 -3
  171. data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
  172. data/src/core/lib/gprpp/dump_args.cc +54 -0
  173. data/src/core/lib/gprpp/dump_args.h +69 -0
  174. data/src/core/lib/gprpp/glob.cc +70 -0
  175. data/src/core/lib/gprpp/glob.h +29 -0
  176. data/src/core/lib/gprpp/per_cpu.cc +1 -1
  177. data/src/core/lib/gprpp/posix/stat.cc +3 -4
  178. data/src/core/lib/gprpp/posix/thd.cc +8 -9
  179. data/src/core/lib/gprpp/ref_counted.h +30 -22
  180. data/src/core/lib/gprpp/single_set_ptr.h +5 -3
  181. data/src/core/lib/gprpp/status_helper.cc +11 -30
  182. data/src/core/lib/gprpp/status_helper.h +3 -31
  183. data/src/core/lib/gprpp/time.cc +3 -4
  184. data/src/core/lib/gprpp/time.h +3 -2
  185. data/src/core/lib/gprpp/unique_type_name.h +1 -1
  186. data/src/core/lib/gprpp/validation_errors.cc +10 -1
  187. data/src/core/lib/gprpp/validation_errors.h +11 -0
  188. data/src/core/lib/gprpp/windows/stat.cc +3 -4
  189. data/src/core/lib/gprpp/windows/thd.cc +3 -2
  190. data/src/core/lib/gprpp/work_serializer.cc +48 -57
  191. data/src/core/lib/iomgr/buffer_list.cc +4 -2
  192. data/src/core/lib/iomgr/call_combiner.cc +18 -27
  193. data/src/core/lib/iomgr/call_combiner.h +1 -3
  194. data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
  195. data/src/core/lib/iomgr/closure.h +2 -4
  196. data/src/core/lib/iomgr/combiner.cc +6 -8
  197. data/src/core/lib/iomgr/combiner.h +0 -2
  198. data/src/core/lib/iomgr/endpoint.cc +0 -6
  199. data/src/core/lib/iomgr/endpoint.h +0 -2
  200. data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
  201. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  202. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  203. data/src/core/lib/iomgr/error.cc +13 -21
  204. data/src/core/lib/iomgr/error.h +1 -1
  205. data/src/core/lib/iomgr/ev_apple.cc +3 -5
  206. data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
  207. data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
  208. data/src/core/lib/iomgr/ev_posix.cc +8 -9
  209. data/src/core/lib/iomgr/ev_posix.h +10 -7
  210. data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
  211. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
  212. data/src/core/lib/iomgr/exec_ctx.cc +2 -2
  213. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  214. data/src/core/lib/iomgr/executor.cc +6 -15
  215. data/src/core/lib/iomgr/executor.h +1 -1
  216. data/src/core/lib/iomgr/fork_posix.cc +8 -10
  217. data/src/core/lib/iomgr/fork_windows.cc +3 -1
  218. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
  219. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
  220. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  221. data/src/core/lib/iomgr/iocp_windows.cc +4 -3
  222. data/src/core/lib/iomgr/iomgr.cc +13 -17
  223. data/src/core/lib/iomgr/lockfree_event.cc +3 -5
  224. data/src/core/lib/iomgr/pollset.h +0 -2
  225. data/src/core/lib/iomgr/pollset_windows.cc +0 -2
  226. data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
  227. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  228. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  229. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  230. data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
  231. data/src/core/lib/iomgr/socket_windows.cc +4 -6
  232. data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
  233. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
  234. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
  235. data/src/core/lib/iomgr/tcp_posix.cc +57 -84
  236. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  237. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  238. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
  239. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
  240. data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
  241. data/src/core/lib/iomgr/tcp_windows.cc +25 -41
  242. data/src/core/lib/iomgr/timer_generic.cc +17 -20
  243. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  244. data/src/core/lib/iomgr/timer_manager.cc +17 -30
  245. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  246. data/src/core/lib/iomgr/vsock.cc +1 -1
  247. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
  248. data/src/core/lib/promise/activity.h +27 -4
  249. data/src/core/lib/promise/cancel_callback.h +24 -0
  250. data/src/core/lib/promise/context.h +11 -0
  251. data/src/core/lib/promise/detail/basic_seq.h +1 -2
  252. data/src/core/lib/promise/detail/join_state.h +354 -398
  253. data/src/core/lib/promise/detail/promise_like.h +6 -5
  254. data/src/core/lib/promise/detail/seq_state.h +1178 -1178
  255. data/src/core/lib/promise/for_each.h +6 -6
  256. data/src/core/lib/promise/interceptor_list.h +6 -7
  257. data/src/core/lib/promise/latch.h +9 -9
  258. data/src/core/lib/promise/map.h +17 -0
  259. data/src/core/lib/promise/observable.h +182 -0
  260. data/src/core/lib/promise/party.cc +7 -8
  261. data/src/core/lib/promise/party.h +10 -8
  262. data/src/core/lib/promise/pipe.h +16 -35
  263. data/src/core/lib/promise/promise.h +1 -0
  264. data/src/core/lib/promise/status_flag.h +2 -0
  265. data/src/core/lib/resource_quota/arena.cc +56 -79
  266. data/src/core/lib/resource_quota/arena.h +118 -209
  267. data/src/core/lib/resource_quota/memory_quota.cc +12 -13
  268. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  269. data/src/core/lib/resource_quota/periodic_update.cc +1 -1
  270. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  271. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  272. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  273. data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
  274. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
  275. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
  276. data/src/core/lib/security/authorization/matchers.cc +3 -3
  277. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  278. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
  279. data/src/core/lib/security/context/security_context.cc +12 -13
  280. data/src/core/lib/security/context/security_context.h +31 -8
  281. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  282. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
  283. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
  284. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
  285. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  286. data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
  287. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  288. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
  289. data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
  290. data/src/core/lib/security/credentials/credentials.cc +6 -6
  291. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
  292. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  293. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
  294. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  295. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
  296. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
  297. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
  299. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  300. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
  301. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
  302. data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
  303. data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
  304. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  305. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
  307. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
  308. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  309. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  310. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  312. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  313. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
  314. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
  315. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  316. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
  317. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
  318. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
  319. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
  320. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
  321. data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
  322. data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
  323. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
  324. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
  325. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
  326. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
  327. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
  328. data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
  329. data/src/core/lib/security/security_connector/security_connector.cc +1 -4
  330. data/src/core/lib/security/security_connector/security_connector.h +1 -3
  331. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
  332. data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
  333. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
  334. data/src/core/lib/security/transport/auth_filters.h +1 -0
  335. data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
  336. data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
  337. data/src/core/lib/security/util/json_util.h +1 -1
  338. data/src/core/lib/slice/slice.h +1 -1
  339. data/src/core/lib/slice/slice_refcount.h +2 -4
  340. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  341. data/src/core/lib/surface/api_trace.h +1 -3
  342. data/src/core/lib/surface/call.cc +64 -3738
  343. data/src/core/lib/surface/call.h +41 -143
  344. data/src/core/lib/surface/call_log_batch.cc +1 -1
  345. data/src/core/lib/surface/call_utils.cc +276 -0
  346. data/src/core/lib/surface/call_utils.h +449 -0
  347. data/src/core/lib/surface/channel.cc +8 -3
  348. data/src/core/lib/surface/channel.h +10 -7
  349. data/src/core/lib/surface/channel_create.cc +14 -6
  350. data/src/core/lib/surface/channel_create.h +3 -2
  351. data/src/core/lib/surface/channel_init.cc +21 -77
  352. data/src/core/lib/surface/channel_init.h +19 -97
  353. data/src/core/lib/surface/client_call.cc +419 -0
  354. data/src/core/lib/surface/client_call.h +180 -0
  355. data/src/core/lib/surface/completion_queue.cc +28 -33
  356. data/src/core/lib/surface/completion_queue.h +0 -8
  357. data/src/core/lib/surface/filter_stack_call.cc +1157 -0
  358. data/src/core/lib/surface/filter_stack_call.h +369 -0
  359. data/src/core/lib/surface/init.cc +7 -6
  360. data/src/core/lib/surface/lame_client.cc +1 -1
  361. data/src/core/lib/surface/legacy_channel.cc +40 -27
  362. data/src/core/lib/surface/legacy_channel.h +9 -18
  363. data/src/core/lib/surface/server_call.cc +222 -0
  364. data/src/core/lib/surface/server_call.h +167 -0
  365. data/src/core/lib/surface/version.cc +2 -2
  366. data/src/core/lib/transport/bdp_estimator.cc +3 -5
  367. data/src/core/lib/transport/bdp_estimator.h +2 -4
  368. data/src/core/lib/transport/call_arena_allocator.h +9 -7
  369. data/src/core/lib/transport/call_destination.h +76 -0
  370. data/src/core/lib/transport/call_filters.cc +28 -10
  371. data/src/core/lib/transport/call_filters.h +128 -22
  372. data/src/core/lib/transport/call_spine.cc +5 -6
  373. data/src/core/lib/transport/call_spine.h +159 -334
  374. data/src/core/lib/transport/connectivity_state.cc +8 -10
  375. data/src/core/lib/transport/connectivity_state.h +0 -2
  376. data/src/core/lib/transport/interception_chain.cc +155 -0
  377. data/src/core/lib/transport/interception_chain.h +236 -0
  378. data/src/core/lib/transport/metadata_batch.h +10 -1
  379. data/src/core/lib/transport/metadata_info.h +1 -1
  380. data/src/core/lib/transport/transport.cc +3 -6
  381. data/src/core/lib/transport/transport.h +43 -40
  382. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  383. data/src/core/load_balancing/endpoint_list.cc +5 -5
  384. data/src/core/load_balancing/endpoint_list.h +1 -1
  385. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
  386. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
  387. data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
  388. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
  389. data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
  390. data/src/core/load_balancing/health_check_client.cc +10 -13
  391. data/src/core/load_balancing/lb_policy.cc +5 -8
  392. data/src/core/load_balancing/lb_policy.h +19 -3
  393. data/src/core/load_balancing/lb_policy_factory.h +1 -1
  394. data/src/core/load_balancing/lb_policy_registry.cc +2 -3
  395. data/src/core/load_balancing/lb_policy_registry.h +1 -1
  396. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  397. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
  398. data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
  399. data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
  400. data/src/core/load_balancing/priority/priority.cc +26 -28
  401. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
  402. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  403. data/src/core/load_balancing/rls/rls.cc +82 -82
  404. data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
  405. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
  406. data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
  407. data/src/core/load_balancing/xds/cds.cc +14 -16
  408. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
  409. data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
  410. data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
  411. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  412. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  413. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
  414. data/src/core/resolver/binder/binder_resolver.cc +3 -2
  415. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
  416. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  417. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
  418. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
  419. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  420. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
  421. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
  422. data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
  423. data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
  424. data/src/core/resolver/endpoint_addresses.cc +1 -1
  425. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  426. data/src/core/resolver/fake/fake_resolver.h +1 -1
  427. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  428. data/src/core/resolver/polling_resolver.cc +30 -35
  429. data/src/core/resolver/resolver.cc +2 -6
  430. data/src/core/resolver/resolver.h +0 -2
  431. data/src/core/resolver/resolver_registry.cc +6 -8
  432. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
  433. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
  434. data/src/core/resolver/xds/xds_resolver.cc +13 -15
  435. data/src/core/server/server.cc +269 -389
  436. data/src/core/server/server.h +37 -19
  437. data/src/core/server/server_call_tracer_filter.cc +7 -14
  438. data/src/core/server/server_config_selector.h +1 -1
  439. data/src/core/server/server_config_selector_filter.cc +3 -3
  440. data/src/core/server/server_interface.h +2 -0
  441. data/src/core/server/xds_channel_stack_modifier.cc +1 -1
  442. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  443. data/src/core/server/xds_server_config_fetcher.cc +1 -4
  444. data/src/core/service_config/service_config.h +1 -1
  445. data/src/core/service_config/service_config_call_data.h +13 -11
  446. data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
  447. data/src/core/service_config/service_config_impl.cc +5 -5
  448. data/src/core/service_config/service_config_impl.h +1 -1
  449. data/src/core/service_config/service_config_parser.cc +3 -6
  450. data/src/core/service_config/service_config_parser.h +1 -1
  451. data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
  452. data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
  453. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  454. data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
  455. data/src/core/telemetry/metrics.cc +178 -0
  456. data/src/core/telemetry/metrics.h +562 -0
  457. data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
  458. data/src/core/{lib/debug → telemetry}/stats.h +5 -5
  459. data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
  460. data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
  461. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
  462. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
  463. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
  464. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
  465. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  466. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
  467. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  468. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
  469. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  470. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
  471. data/src/core/tsi/fake_transport_security.cc +14 -17
  472. data/src/core/tsi/local_transport_security.cc +6 -5
  473. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
  474. data/src/core/tsi/ssl_transport_security.cc +76 -81
  475. data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
  476. data/src/core/tsi/ssl_transport_security_utils.h +11 -0
  477. data/src/core/tsi/transport_security.cc +0 -4
  478. data/src/core/tsi/transport_security.h +0 -2
  479. data/src/core/tsi/transport_security_interface.h +0 -4
  480. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  481. data/src/core/{lib/gpr → util}/android/log.cc +0 -19
  482. data/src/core/{lib/gpr → util}/atm.cc +1 -1
  483. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
  484. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
  485. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
  486. data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
  487. data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
  488. data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
  489. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
  490. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
  491. data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
  492. data/src/core/{lib/http → util/http_client}/parser.h +5 -6
  493. data/src/core/{lib → util}/json/json.h +5 -4
  494. data/src/core/{lib → util}/json/json_args.h +5 -5
  495. data/src/core/{lib → util}/json/json_channel_args.h +6 -6
  496. data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
  497. data/src/core/{lib → util}/json/json_object_loader.h +7 -7
  498. data/src/core/{lib → util}/json/json_reader.cc +3 -2
  499. data/src/core/{lib → util}/json/json_reader.h +6 -6
  500. data/src/core/{lib → util}/json/json_util.cc +4 -4
  501. data/src/core/{lib → util}/json/json_util.h +6 -6
  502. data/src/core/{lib → util}/json/json_writer.cc +3 -3
  503. data/src/core/{lib → util}/json/json_writer.h +6 -6
  504. data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
  505. data/src/core/util/log.cc +165 -0
  506. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
  507. data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
  508. data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
  509. data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
  510. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
  511. data/src/core/{lib/gpr → util}/spinlock.h +3 -3
  512. data/src/core/{lib/gpr → util}/string.cc +2 -2
  513. data/src/core/{lib/gpr → util}/string.h +3 -3
  514. data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
  515. data/src/core/{lib/gpr → util}/time_precise.h +3 -3
  516. data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
  517. data/src/core/{lib/gpr → util}/useful.h +3 -3
  518. data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
  519. data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
  520. data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
  521. data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
  522. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
  523. data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
  524. data/src/core/xds/grpc/certificate_provider_store.h +4 -4
  525. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  526. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
  527. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  528. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
  529. data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
  530. data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
  531. data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
  532. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  533. data/src/core/xds/grpc/xds_cluster.cc +4 -5
  534. data/src/core/xds/grpc/xds_cluster.h +1 -1
  535. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  536. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  537. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  538. data/src/core/xds/grpc/xds_common_types.h +1 -1
  539. data/src/core/xds/grpc/xds_endpoint.cc +4 -5
  540. data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
  541. data/src/core/xds/grpc/xds_http_filters.h +2 -2
  542. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
  543. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
  544. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  545. data/src/core/xds/grpc/xds_listener.cc +4 -6
  546. data/src/core/xds/grpc/xds_route_config.cc +7 -8
  547. data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
  548. data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
  549. data/src/core/xds/xds_client/xds_api.cc +5 -9
  550. data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
  551. data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
  552. data/src/core/xds/xds_client/xds_client.cc +39 -45
  553. data/src/core/xds/xds_client/xds_client.h +0 -3
  554. data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
  555. data/src/core/xds/xds_client/xds_client_stats.h +2 -2
  556. data/src/ruby/bin/math_pb.rb +1 -22
  557. data/src/ruby/ext/grpc/rb_call.c +8 -1
  558. data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
  559. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  560. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  561. data/src/ruby/ext/grpc/rb_server.c +39 -22
  562. data/src/ruby/lib/grpc/version.rb +1 -1
  563. data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
  564. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
  565. data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
  566. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
  567. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
  568. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
  569. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  571. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  572. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  573. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  576. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  577. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
  584. data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  589. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  590. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  593. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
  594. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
  595. metadata +103 -93
  596. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  597. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  598. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  599. data/src/core/handshaker/security/tsi_error.cc +0 -31
  600. data/src/core/handshaker/security/tsi_error.h +0 -30
  601. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  602. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  603. data/src/core/lib/channel/context.h +0 -105
  604. data/src/core/lib/channel/metrics.cc +0 -334
  605. data/src/core/lib/channel/metrics.h +0 -365
  606. data/src/core/lib/event_engine/trace.cc +0 -25
  607. data/src/core/lib/gpr/log.cc +0 -166
  608. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  609. data/src/core/lib/promise/trace.cc +0 -20
  610. data/src/core/lib/promise/trace.h +0 -24
  611. data/src/core/lib/resource_quota/trace.cc +0 -19
  612. data/src/core/lib/resource_quota/trace.h +0 -24
  613. data/src/core/lib/slice/slice_refcount.cc +0 -20
  614. data/src/core/lib/surface/api_trace.cc +0 -25
  615. data/src/core/lib/surface/call_trace.h +0 -24
  616. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  617. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  618. data/src/core/lib/transport/batch_builder.cc +0 -172
  619. data/src/core/lib/transport/batch_builder.h +0 -474
  620. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  621. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  622. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  623. /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
  624. /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
  625. /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
  626. /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
  627. /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
  628. /data/src/core/{lib/gpr → util}/sync.cc +0 -0
  629. /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
  630. /data/src/core/{lib/gpr → util}/time.cc +0 -0
  631. /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
  632. /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -20,14 +20,16 @@
20
20
  #include <grpc/support/log.h>
21
21
  #include <grpc/support/port_platform.h>
22
22
 
23
- #include "src/core/lib/channel/context.h"
23
+ #include "src/core/lib/gprpp/dual_ref_counted.h"
24
24
  #include "src/core/lib/promise/detail/status.h"
25
25
  #include "src/core/lib/promise/if.h"
26
26
  #include "src/core/lib/promise/latch.h"
27
27
  #include "src/core/lib/promise/party.h"
28
28
  #include "src/core/lib/promise/pipe.h"
29
+ #include "src/core/lib/promise/prioritized_race.h"
29
30
  #include "src/core/lib/promise/promise.h"
30
31
  #include "src/core/lib/promise/status_flag.h"
32
+ #include "src/core/lib/promise/try_seq.h"
31
33
  #include "src/core/lib/transport/call_arena_allocator.h"
32
34
  #include "src/core/lib/transport/call_filters.h"
33
35
  #include "src/core/lib/transport/message.h"
@@ -38,13 +40,23 @@ namespace grpc_core {
38
40
  // The common middle part of a call - a reference is held by each of
39
41
  // CallInitiator and CallHandler - which provide interfaces that are appropriate
40
42
  // for each side of a call.
41
- // The spine will ultimately host the pipes, filters, and context for one part
42
- // of a call: ie top-half client channel, sub channel call, server call.
43
- // TODO(ctiller): eventually drop this when we don't need to reference into
44
- // legacy promise calls anymore
45
- class CallSpineInterface {
43
+ // Hosts context, call filters, and the arena.
44
+ class CallSpine final : public Party {
46
45
  public:
47
- virtual ~CallSpineInterface() = default;
46
+ static RefCountedPtr<CallSpine> Create(
47
+ ClientMetadataHandle client_initial_metadata,
48
+ grpc_event_engine::experimental::EventEngine* event_engine,
49
+ RefCountedPtr<Arena> arena) {
50
+ Arena* arena_ptr = arena.get();
51
+ return RefCountedPtr<CallSpine>(arena_ptr->New<CallSpine>(
52
+ std::move(client_initial_metadata), event_engine, std::move(arena)));
53
+ }
54
+
55
+ ~CallSpine() override {}
56
+
57
+ CallFilters& call_filters() { return call_filters_; }
58
+ Arena* arena() { return arena_.get(); }
59
+
48
60
  // Add a callback to be called when server trailing metadata is received.
49
61
  void OnDone(absl::AnyInvocable<void()> fn) {
50
62
  if (on_done_ == nullptr) {
@@ -59,38 +71,70 @@ class CallSpineInterface {
59
71
  void CallOnDone() {
60
72
  if (on_done_ != nullptr) std::exchange(on_done_, nullptr)();
61
73
  }
62
- virtual Party& party() = 0;
63
- virtual Arena* arena() = 0;
64
- virtual void IncrementRefCount() = 0;
65
- virtual void Unref() = 0;
66
-
67
- virtual Promise<ValueOrFailure<absl::optional<ServerMetadataHandle>>>
68
- PullServerInitialMetadata() = 0;
69
- virtual Promise<ServerMetadataHandle> PullServerTrailingMetadata() = 0;
70
- virtual Promise<StatusFlag> PushClientToServerMessage(
71
- MessageHandle message) = 0;
72
- virtual Promise<ValueOrFailure<absl::optional<MessageHandle>>>
73
- PullClientToServerMessage() = 0;
74
- virtual Promise<StatusFlag> PushServerToClientMessage(
75
- MessageHandle message) = 0;
76
- virtual Promise<ValueOrFailure<absl::optional<MessageHandle>>>
77
- PullServerToClientMessage() = 0;
78
- virtual void PushServerTrailingMetadata(ServerMetadataHandle md) = 0;
79
- virtual void FinishSends() = 0;
80
- virtual Promise<ValueOrFailure<ClientMetadataHandle>>
81
- PullClientInitialMetadata() = 0;
82
- virtual Promise<StatusFlag> PushServerInitialMetadata(
83
- absl::optional<ServerMetadataHandle> md) = 0;
84
- virtual Promise<bool> WasCancelled() = 0;
85
- virtual ClientMetadata& UnprocessedClientInitialMetadata() = 0;
86
- virtual void V2HackToStartCallWithoutACallFilterStack() = 0;
74
+
75
+ auto PullServerInitialMetadata() {
76
+ return call_filters().PullServerInitialMetadata();
77
+ }
78
+
79
+ auto PullServerTrailingMetadata() {
80
+ return call_filters().PullServerTrailingMetadata();
81
+ }
82
+
83
+ auto PushClientToServerMessage(MessageHandle message) {
84
+ return call_filters().PushClientToServerMessage(std::move(message));
85
+ }
86
+
87
+ auto PullClientToServerMessage() {
88
+ return call_filters().PullClientToServerMessage();
89
+ }
90
+
91
+ auto PushServerToClientMessage(MessageHandle message) {
92
+ return call_filters().PushServerToClientMessage(std::move(message));
93
+ }
94
+
95
+ auto PullServerToClientMessage() {
96
+ return call_filters().PullServerToClientMessage();
97
+ }
98
+
99
+ void PushServerTrailingMetadata(ServerMetadataHandle md) {
100
+ call_filters().PushServerTrailingMetadata(std::move(md));
101
+ }
102
+
103
+ void FinishSends() { call_filters().FinishClientToServerSends(); }
104
+
105
+ auto PullClientInitialMetadata() {
106
+ return call_filters().PullClientInitialMetadata();
107
+ }
108
+
109
+ auto PushServerInitialMetadata(absl::optional<ServerMetadataHandle> md) {
110
+ bool has_md = md.has_value();
111
+ return If(
112
+ has_md,
113
+ [this, md = std::move(md)]() mutable {
114
+ return call_filters().PushServerInitialMetadata(std::move(*md));
115
+ },
116
+ [this]() {
117
+ call_filters().NoServerInitialMetadata();
118
+ return Immediate<StatusFlag>(Success{});
119
+ });
120
+ }
121
+
122
+ auto WasCancelled() { return call_filters().WasCancelled(); }
123
+
124
+ ClientMetadata& UnprocessedClientInitialMetadata() {
125
+ return *call_filters().unprocessed_client_initial_metadata();
126
+ }
127
+
128
+ grpc_event_engine::experimental::EventEngine* event_engine() const override {
129
+ return event_engine_;
130
+ }
87
131
 
88
132
  // Wrap a promise so that if it returns failure it automatically cancels
89
133
  // the rest of the call.
90
134
  // The resulting (returned) promise will resolve to Empty.
91
135
  template <typename Promise>
92
136
  auto CancelIfFails(Promise promise) {
93
- DCHECK(GetContext<Activity>() == &party());
137
+ DCHECK(GetContext<Activity>() == this);
94
138
  using P = promise_detail::PromiseLike<Promise>;
95
139
  using ResultType = typename P::Result;
96
140
  return Map(std::move(promise), [this](ResultType r) {
@@ -105,7 +149,7 @@ class CallSpineInterface {
105
149
  // that detail.
106
150
  template <typename PromiseFactory>
107
151
  void SpawnInfallible(absl::string_view name, PromiseFactory promise_factory) {
108
- party().Spawn(name, std::move(promise_factory), [](Empty) {});
152
+ Spawn(name, std::move(promise_factory), [](Empty) {});
109
153
  }
110
154
 
111
155
  // Spawn a promise that returns some status-like type; if the status
@@ -121,284 +165,55 @@ class CallSpineInterface {
121
165
  std::is_same<bool,
122
166
  decltype(IsStatusOk(std::declval<ResultType>()))>::value,
123
167
  "SpawnGuarded promise must return a status-like object");
124
- party().Spawn(
125
- name, std::move(promise_factory), [this, whence](ResultType r) {
126
- if (!IsStatusOk(r)) {
127
- if (grpc_trace_promise_primitives.enabled()) {
128
- gpr_log(GPR_INFO, "SpawnGuarded sees failure: %s (source: %s:%d)",
129
- r.ToString().c_str(), whence.file(), whence.line());
130
- }
131
- auto status = StatusCast<ServerMetadataHandle>(std::move(r));
132
- status->Set(GrpcCallWasCancelled(), true);
133
- PushServerTrailingMetadata(std::move(status));
134
- }
135
- });
136
- }
137
-
138
- private:
139
- absl::AnyInvocable<void()> on_done_{nullptr};
140
- };
141
-
142
- // Implementation of CallSpine atop the v2 Pipe based arrangement.
143
- // This implementation will go away in favor of an implementation atop
144
- // CallFilters by the time v3 lands.
145
- class PipeBasedCallSpine : public CallSpineInterface {
146
- public:
147
- virtual Pipe<ClientMetadataHandle>& client_initial_metadata() = 0;
148
- virtual Pipe<ServerMetadataHandle>& server_initial_metadata() = 0;
149
- virtual Pipe<MessageHandle>& client_to_server_messages() = 0;
150
- virtual Pipe<MessageHandle>& server_to_client_messages() = 0;
151
- virtual Latch<ServerMetadataHandle>& cancel_latch() = 0;
152
- virtual Latch<bool>& was_cancelled_latch() = 0;
153
-
154
- Promise<ValueOrFailure<absl::optional<ServerMetadataHandle>>>
155
- PullServerInitialMetadata() final {
156
- DCHECK(GetContext<Activity>() == &party());
157
- return Map(server_initial_metadata().receiver.Next(),
158
- [](NextResult<ServerMetadataHandle> md)
159
- -> ValueOrFailure<absl::optional<ServerMetadataHandle>> {
160
- if (!md.has_value()) {
161
- if (md.cancelled()) return Failure{};
162
- return absl::optional<ServerMetadataHandle>();
163
- }
164
- return absl::optional<ServerMetadataHandle>(std::move(*md));
165
- });
166
- }
167
-
168
- Promise<ServerMetadataHandle> PullServerTrailingMetadata() final {
169
- DCHECK(GetContext<Activity>() == &party());
170
- return cancel_latch().Wait();
171
- }
172
-
173
- Promise<ValueOrFailure<absl::optional<MessageHandle>>>
174
- PullServerToClientMessage() final {
175
- DCHECK(GetContext<Activity>() == &party());
176
- return Map(server_to_client_messages().receiver.Next(), MapNextMessage);
177
- }
178
-
179
- Promise<StatusFlag> PushClientToServerMessage(MessageHandle message) final {
180
- DCHECK(GetContext<Activity>() == &party());
181
- return Map(client_to_server_messages().sender.Push(std::move(message)),
182
- [](bool r) { return StatusFlag(r); });
183
- }
184
-
185
- Promise<ValueOrFailure<absl::optional<MessageHandle>>>
186
- PullClientToServerMessage() final {
187
- DCHECK(GetContext<Activity>() == &party());
188
- return Map(client_to_server_messages().receiver.Next(), MapNextMessage);
189
- }
190
-
191
- Promise<StatusFlag> PushServerToClientMessage(MessageHandle message) final {
192
- DCHECK(GetContext<Activity>() == &party());
193
- return Map(server_to_client_messages().sender.Push(std::move(message)),
194
- [](bool r) { return StatusFlag(r); });
195
- }
196
-
197
- void FinishSends() final {
198
- DCHECK(GetContext<Activity>() == &party());
199
- client_to_server_messages().sender.Close();
200
- }
201
-
202
- void PushServerTrailingMetadata(ServerMetadataHandle metadata) final {
203
- DCHECK(GetContext<Activity>() == &party());
204
- auto& c = cancel_latch();
205
- if (c.is_set()) return;
206
- const bool was_cancelled =
207
- metadata->get(GrpcCallWasCancelled()).value_or(false);
208
- c.Set(std::move(metadata));
209
- CallOnDone();
210
- was_cancelled_latch().Set(was_cancelled);
211
- client_initial_metadata().sender.CloseWithError();
212
- server_initial_metadata().sender.Close();
213
- client_to_server_messages().sender.CloseWithError();
214
- server_to_client_messages().sender.Close();
215
- }
216
-
217
- Promise<bool> WasCancelled() final {
218
- DCHECK(GetContext<Activity>() == &party());
219
- return was_cancelled_latch().Wait();
220
- }
221
-
222
- Promise<ValueOrFailure<ClientMetadataHandle>> PullClientInitialMetadata()
223
- final {
224
- DCHECK(GetContext<Activity>() == &party());
225
- return Map(client_initial_metadata().receiver.Next(),
226
- [](NextResult<ClientMetadataHandle> md)
227
- -> ValueOrFailure<ClientMetadataHandle> {
228
- if (!md.has_value()) return Failure{};
229
- return std::move(*md);
230
- });
231
- }
232
-
233
- Promise<StatusFlag> PushServerInitialMetadata(
234
- absl::optional<ServerMetadataHandle> md) final {
235
- DCHECK(GetContext<Activity>() == &party());
236
- return If(
237
- md.has_value(),
238
- [&md, this]() {
239
- return Map(server_initial_metadata().sender.Push(std::move(*md)),
240
- [](bool ok) { return StatusFlag(ok); });
241
- },
242
- [this]() {
243
- server_initial_metadata().sender.Close();
244
- return []() -> StatusFlag { return Success{}; };
245
- });
246
- }
247
-
248
- private:
249
- static ValueOrFailure<absl::optional<MessageHandle>> MapNextMessage(
250
- NextResult<MessageHandle> r) {
251
- if (!r.has_value()) {
252
- if (r.cancelled()) return Failure{};
253
- return absl::optional<MessageHandle>();
254
- }
255
- return absl::optional<MessageHandle>(std::move(*r));
256
- }
257
- };
258
-
259
- class CallSpine final : public CallSpineInterface, public Party {
260
- public:
261
- static RefCountedPtr<CallSpine> Create(
262
- ClientMetadataHandle client_initial_metadata,
263
- grpc_event_engine::experimental::EventEngine* event_engine, Arena* arena,
264
- RefCountedPtr<CallArenaAllocator> call_arena_allocator_if_arena_is_owned,
265
- grpc_call_context_element* legacy_context) {
266
- return RefCountedPtr<CallSpine>(arena->New<CallSpine>(
267
- std::move(client_initial_metadata), event_engine, arena,
268
- std::move(call_arena_allocator_if_arena_is_owned), legacy_context));
269
- }
270
-
271
- ~CallSpine() override {
272
- if (legacy_context_is_owned_) {
273
- for (size_t i = 0; i < GRPC_CONTEXT_COUNT; i++) {
274
- grpc_call_context_element& elem = legacy_context_[i];
275
- if (elem.destroy != nullptr) elem.destroy(&elem);
168
+ Spawn(name, std::move(promise_factory), [this, whence](ResultType r) {
169
+ if (!IsStatusOk(r)) {
170
+ GRPC_TRACE_LOG(promise_primitives, INFO)
171
+ << "SpawnGuarded sees failure: " << r
172
+ << " (source: " << whence.file() << ":" << whence.line() << ")";
173
+ auto status = StatusCast<ServerMetadataHandle>(std::move(r));
174
+ status->Set(GrpcCallWasCancelled(), true);
175
+ PushServerTrailingMetadata(std::move(status));
276
176
  }
277
- }
278
- }
279
-
280
- CallFilters& call_filters() { return call_filters_; }
281
-
282
- Party& party() override { return *this; }
283
-
284
- Arena* arena() override { return arena_; }
285
-
286
- void IncrementRefCount() override { Party::IncrementRefCount(); }
287
-
288
- void Unref() override { Party::Unref(); }
289
-
290
- Promise<ValueOrFailure<absl::optional<ServerMetadataHandle>>>
291
- PullServerInitialMetadata() override {
292
- return call_filters().PullServerInitialMetadata();
293
- }
294
-
295
- Promise<ServerMetadataHandle> PullServerTrailingMetadata() override {
296
- return call_filters().PullServerTrailingMetadata();
297
- }
298
-
299
- Promise<StatusFlag> PushClientToServerMessage(
300
- MessageHandle message) override {
301
- return call_filters().PushClientToServerMessage(std::move(message));
302
- }
303
-
304
- Promise<ValueOrFailure<absl::optional<MessageHandle>>>
305
- PullClientToServerMessage() override {
306
- return call_filters().PullClientToServerMessage();
307
- }
308
-
309
- Promise<StatusFlag> PushServerToClientMessage(
310
- MessageHandle message) override {
311
- return call_filters().PushServerToClientMessage(std::move(message));
312
- }
313
-
314
- Promise<ValueOrFailure<absl::optional<MessageHandle>>>
315
- PullServerToClientMessage() override {
316
- return call_filters().PullServerToClientMessage();
317
- }
318
-
319
- void PushServerTrailingMetadata(ServerMetadataHandle md) override {
320
- call_filters().PushServerTrailingMetadata(std::move(md));
321
- }
322
-
323
- void FinishSends() override { call_filters().FinishClientToServerSends(); }
324
-
325
- Promise<ValueOrFailure<ClientMetadataHandle>> PullClientInitialMetadata()
326
- override {
327
- return call_filters().PullClientInitialMetadata();
328
- }
329
-
330
- Promise<StatusFlag> PushServerInitialMetadata(
331
- absl::optional<ServerMetadataHandle> md) override {
332
- if (md.has_value()) {
333
- return call_filters().PushServerInitialMetadata(std::move(*md));
334
- } else {
335
- call_filters().NoServerInitialMetadata();
336
- return Immediate<StatusFlag>(Success{});
337
- }
338
- }
339
-
340
- Promise<bool> WasCancelled() override {
341
- return call_filters().WasCancelled();
342
- }
343
-
344
- ClientMetadata& UnprocessedClientInitialMetadata() override {
345
- return *call_filters().unprocessed_client_initial_metadata();
346
- }
347
-
348
- // TODO(ctiller): re-evaluate legacy context apis
349
- grpc_call_context_element& legacy_context(grpc_context_index index) const {
350
- return legacy_context_[index];
177
+ });
351
178
  }
352
179
 
353
- grpc_call_context_element* legacy_context() { return legacy_context_; }
354
-
355
- grpc_event_engine::experimental::EventEngine* event_engine() const override {
356
- return event_engine_;
180
+ // Wrap a promise so that if the call completes that promise is cancelled.
181
+ template <typename Promise>
182
+ auto UntilCallCompletes(Promise promise) {
183
+ using Result = PromiseResult<Promise>;
184
+ return PrioritizedRace(std::move(promise), Map(WasCancelled(), [](bool) {
185
+ return FailureStatusCast<Result>(Failure{});
186
+ }));
357
187
  }
358
188
 
359
- void V2HackToStartCallWithoutACallFilterStack() override {
360
- CallFilters::StackBuilder empty_stack_builder;
361
- call_filters().SetStack(empty_stack_builder.Build());
189
+ template <typename PromiseFactory>
190
+ void SpawnGuardedUntilCallCompletes(absl::string_view name,
191
+ PromiseFactory promise_factory) {
192
+ SpawnGuarded(name, [this, promise_factory]() mutable {
193
+ return UntilCallCompletes(promise_factory());
194
+ });
362
195
  }
363
196
 
364
197
  private:
365
198
  friend class Arena;
366
199
  CallSpine(ClientMetadataHandle client_initial_metadata,
367
200
  grpc_event_engine::experimental::EventEngine* event_engine,
368
- Arena* arena,
369
- RefCountedPtr<CallArenaAllocator> call_arena_allocator,
370
- grpc_call_context_element* legacy_context)
201
+ RefCountedPtr<Arena> arena)
371
202
  : Party(1),
203
+ arena_(std::move(arena)),
372
204
  call_filters_(std::move(client_initial_metadata)),
373
- arena_(arena),
374
- event_engine_(event_engine),
375
- call_arena_allocator_if_arena_is_owned_(
376
- std::move(call_arena_allocator)) {
377
- if (legacy_context == nullptr) {
378
- legacy_context_ = static_cast<grpc_call_context_element*>(
379
- arena->Alloc(sizeof(grpc_call_context_element) * GRPC_CONTEXT_COUNT));
380
- memset(legacy_context_, 0,
381
- sizeof(grpc_call_context_element) * GRPC_CONTEXT_COUNT);
382
- legacy_context_is_owned_ = true;
383
- } else {
384
- legacy_context_ = legacy_context;
385
- legacy_context_is_owned_ = false;
386
- }
387
- }
205
+ event_engine_(event_engine) {}
388
206
 
389
- class ScopedContext
390
- : public ScopedActivity,
391
- public promise_detail::Context<Arena>,
392
- public promise_detail::Context<
393
- grpc_event_engine::experimental::EventEngine>,
394
- public promise_detail::Context<grpc_call_context_element> {
207
+ class ScopedContext : public ScopedActivity,
208
+ public promise_detail::Context<Arena>,
209
+ public promise_detail::Context<
210
+ grpc_event_engine::experimental::EventEngine> {
395
211
  public:
396
212
  explicit ScopedContext(CallSpine* spine)
397
213
  : ScopedActivity(spine),
398
- Context<Arena>(spine->arena_),
214
+ Context<Arena>(spine->arena_.get()),
399
215
  Context<grpc_event_engine::experimental::EventEngine>(
400
- spine->event_engine()),
401
- Context<grpc_call_context_element>(spine->legacy_context_) {}
216
+ spine->event_engine()) {}
402
217
  };
403
218
 
404
219
  bool RunParty() override {
@@ -407,35 +222,27 @@ class CallSpine final : public CallSpineInterface, public Party {
407
222
  }
408
223
 
409
224
  void PartyOver() override {
410
- Arena* a = arena_;
411
- RefCountedPtr<CallArenaAllocator> call_arena_allocator_if_arena_is_owned =
412
- std::move(call_arena_allocator_if_arena_is_owned_);
225
+ auto arena = arena_;
413
226
  {
414
227
  ScopedContext context(this);
415
228
  CancelRemainingParticipants();
416
- a->DestroyManagedNewObjects();
229
+ arena->DestroyManagedNewObjects();
417
230
  }
418
231
  this->~CallSpine();
419
- if (call_arena_allocator_if_arena_is_owned != nullptr) {
420
- call_arena_allocator_if_arena_is_owned->Destroy(a);
421
- }
422
232
  }
423
233
 
234
+ const RefCountedPtr<Arena> arena_;
424
235
  // Call filters/pipes part of the spine
425
236
  CallFilters call_filters_;
426
- Arena* const arena_;
427
237
  // Event engine associated with this call
428
238
  grpc_event_engine::experimental::EventEngine* const event_engine_;
429
- // Legacy context
430
- // TODO(ctiller): remove
431
- grpc_call_context_element* legacy_context_;
432
- RefCountedPtr<CallArenaAllocator> call_arena_allocator_if_arena_is_owned_;
433
- bool legacy_context_is_owned_;
239
+ absl::AnyInvocable<void()> on_done_{nullptr};
434
240
  };
435
241
 
436
242
  class CallInitiator {
437
243
  public:
438
- explicit CallInitiator(RefCountedPtr<CallSpineInterface> spine)
244
+ CallInitiator() = default;
245
+ explicit CallInitiator(RefCountedPtr<CallSpine> spine)
439
246
  : spine_(std::move(spine)) {}
440
247
 
441
248
  template <typename Promise>
@@ -459,8 +266,9 @@ class CallInitiator {
459
266
  return spine_->PullServerTrailingMetadata();
460
267
  }
461
268
 
462
- void Cancel() {
463
- auto status = ServerMetadataFromStatus(absl::CancelledError());
269
+ void Cancel(absl::Status error = absl::CancelledError()) {
270
+ CHECK(!error.ok());
271
+ auto status = ServerMetadataFromStatus(error);
464
272
  status->Set(GrpcCallWasCancelled(), true);
465
273
  spine_->PushServerTrailingMetadata(std::move(status));
466
274
  }
@@ -472,6 +280,12 @@ class CallInitiator {
472
280
  spine_->SpawnGuarded(name, std::move(promise_factory));
473
281
  }
474
282
 
283
+ template <typename PromiseFactory>
284
+ void SpawnGuardedUntilCallCompletes(absl::string_view name,
285
+ PromiseFactory promise_factory) {
286
+ spine_->SpawnGuardedUntilCallCompletes(name, std::move(promise_factory));
287
+ }
288
+
475
289
  template <typename PromiseFactory>
476
290
  void SpawnInfallible(absl::string_view name, PromiseFactory promise_factory) {
477
291
  spine_->SpawnInfallible(name, std::move(promise_factory));
@@ -479,18 +293,22 @@ class CallInitiator {
479
293
 
480
294
  template <typename PromiseFactory>
481
295
  auto SpawnWaitable(absl::string_view name, PromiseFactory promise_factory) {
482
- return spine_->party().SpawnWaitable(name, std::move(promise_factory));
296
+ return spine_->SpawnWaitable(name, std::move(promise_factory));
483
297
  }
484
298
 
485
299
  Arena* arena() { return spine_->arena(); }
486
300
 
301
+ grpc_event_engine::experimental::EventEngine* event_engine() const {
302
+ return spine_->event_engine();
303
+ }
304
+
487
305
  private:
488
- RefCountedPtr<CallSpineInterface> spine_;
306
+ RefCountedPtr<CallSpine> spine_;
489
307
  };
490
308
 
491
309
  class CallHandler {
492
310
  public:
493
- explicit CallHandler(RefCountedPtr<CallSpineInterface> spine)
311
+ explicit CallHandler(RefCountedPtr<CallSpine> spine)
494
312
  : spine_(std::move(spine)) {}
495
313
 
496
314
  auto PullClientInitialMetadata() {
@@ -518,12 +336,20 @@ class CallHandler {
518
336
 
519
337
  auto PullMessage() { return spine_->PullClientToServerMessage(); }
520
338
 
339
+ auto WasCancelled() { return spine_->WasCancelled(); }
340
+
521
341
  template <typename PromiseFactory>
522
342
  void SpawnGuarded(absl::string_view name, PromiseFactory promise_factory,
523
343
  DebugLocation whence = {}) {
524
344
  spine_->SpawnGuarded(name, std::move(promise_factory), whence);
525
345
  }
526
346
 
347
+ template <typename PromiseFactory>
348
+ void SpawnGuardedUntilCallCompletes(absl::string_view name,
349
+ PromiseFactory promise_factory) {
350
+ spine_->SpawnGuardedUntilCallCompletes(name, std::move(promise_factory));
351
+ }
352
+
527
353
  template <typename PromiseFactory>
528
354
  void SpawnInfallible(absl::string_view name, PromiseFactory promise_factory) {
529
355
  spine_->SpawnInfallible(name, std::move(promise_factory));
@@ -531,27 +357,22 @@ class CallHandler {
531
357
 
532
358
  template <typename PromiseFactory>
533
359
  auto SpawnWaitable(absl::string_view name, PromiseFactory promise_factory) {
534
- return spine_->party().SpawnWaitable(name, std::move(promise_factory));
360
+ return spine_->SpawnWaitable(name, std::move(promise_factory));
535
361
  }
536
362
 
537
363
  Arena* arena() { return spine_->arena(); }
538
364
 
539
- grpc_event_engine::experimental::EventEngine* event_engine() {
540
- return DownCast<CallSpine*>(spine_.get())->event_engine();
541
- }
542
-
543
- // TODO(ctiller): re-evaluate this API
544
- grpc_call_context_element* legacy_context() {
545
- return DownCast<CallSpine*>(spine_.get())->legacy_context();
365
+ grpc_event_engine::experimental::EventEngine* event_engine() const {
366
+ return spine_->event_engine();
546
367
  }
547
368
 
548
369
  private:
549
- RefCountedPtr<CallSpineInterface> spine_;
370
+ RefCountedPtr<CallSpine> spine_;
550
371
  };
551
372
 
552
373
  class UnstartedCallHandler {
553
374
  public:
554
- explicit UnstartedCallHandler(RefCountedPtr<CallSpineInterface> spine)
375
+ explicit UnstartedCallHandler(RefCountedPtr<CallSpine> spine)
555
376
  : spine_(std::move(spine)) {}
556
377
 
557
378
  void PushServerTrailingMetadata(ServerMetadataHandle status) {
@@ -571,6 +392,12 @@ class UnstartedCallHandler {
571
392
  spine_->SpawnGuarded(name, std::move(promise_factory), whence);
572
393
  }
573
394
 
395
+ template <typename PromiseFactory>
396
+ void SpawnGuardedUntilCallCompletes(absl::string_view name,
397
+ PromiseFactory promise_factory) {
398
+ spine_->SpawnGuardedUntilCallCompletes(name, std::move(promise_factory));
399
+ }
400
+
574
401
  template <typename PromiseFactory>
575
402
  void SpawnInfallible(absl::string_view name, PromiseFactory promise_factory) {
576
403
  spine_->SpawnInfallible(name, std::move(promise_factory));
@@ -578,29 +405,28 @@ class UnstartedCallHandler {
578
405
 
579
406
  template <typename PromiseFactory>
580
407
  auto SpawnWaitable(absl::string_view name, PromiseFactory promise_factory) {
581
- return spine_->party().SpawnWaitable(name, std::move(promise_factory));
408
+ return spine_->SpawnWaitable(name, std::move(promise_factory));
582
409
  }
583
410
 
584
411
  ClientMetadata& UnprocessedClientInitialMetadata() {
585
412
  return spine_->UnprocessedClientInitialMetadata();
586
413
  }
587
414
 
588
- CallHandler V2HackToStartCallWithoutACallFilterStack() {
589
- spine_->V2HackToStartCallWithoutACallFilterStack();
590
- return CallHandler(std::move(spine_));
415
+ // Helper for the very common situation in tests where we want to start a call
416
+ // with an empty filter stack.
417
+ CallHandler StartWithEmptyFilterStack() {
418
+ return StartCall(CallFilters::StackBuilder().Build());
591
419
  }
592
420
 
593
421
  CallHandler StartCall(RefCountedPtr<CallFilters::Stack> call_filters) {
594
- DownCast<CallSpine*>(spine_.get())
595
- ->call_filters()
596
- .SetStack(std::move(call_filters));
422
+ spine_->call_filters().SetStack(std::move(call_filters));
597
423
  return CallHandler(std::move(spine_));
598
424
  }
599
425
 
600
426
  Arena* arena() { return spine_->arena(); }
601
427
 
602
428
  private:
603
- RefCountedPtr<CallSpineInterface> spine_;
429
+ RefCountedPtr<CallSpine> spine_;
604
430
  };
605
431
 
606
432
  struct CallInitiatorAndHandler {
@@ -610,9 +436,8 @@ struct CallInitiatorAndHandler {
610
436
 
611
437
  CallInitiatorAndHandler MakeCallPair(
612
438
  ClientMetadataHandle client_initial_metadata,
613
- grpc_event_engine::experimental::EventEngine* event_engine, Arena* arena,
614
- RefCountedPtr<CallArenaAllocator> call_arena_allocator_if_arena_is_owned,
615
- grpc_call_context_element* legacy_context);
439
+ grpc_event_engine::experimental::EventEngine* event_engine,
440
+ RefCountedPtr<Arena> arena);
616
441
 
617
442
  template <typename CallHalf>
618
443
  auto OutgoingMessages(CallHalf h) {