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
@@ -32,6 +32,7 @@
32
32
  #include "absl/container/inlined_vector.h"
33
33
  #include "absl/functional/function_ref.h"
34
34
  #include "absl/log/check.h"
35
+ #include "absl/log/log.h"
35
36
  #include "absl/meta/type_traits.h"
36
37
  #include "absl/status/status.h"
37
38
  #include "absl/strings/string_view.h"
@@ -39,14 +40,12 @@
39
40
 
40
41
  #include <grpc/event_engine/event_engine.h>
41
42
  #include <grpc/grpc.h>
42
- #include <grpc/support/log.h>
43
43
  #include <grpc/support/port_platform.h>
44
44
 
45
45
  #include "src/core/lib/channel/call_finalization.h"
46
46
  #include "src/core/lib/channel/channel_args.h"
47
47
  #include "src/core/lib/channel/channel_fwd.h"
48
48
  #include "src/core/lib/channel/channel_stack.h"
49
- #include "src/core/lib/channel/context.h"
50
49
  #include "src/core/lib/event_engine/default_event_engine.h"
51
50
  #include "src/core/lib/event_engine/event_engine_context.h" // IWYU pragma: keep
52
51
  #include "src/core/lib/gprpp/debug_location.h"
@@ -59,6 +58,7 @@
59
58
  #include "src/core/lib/iomgr/polling_entity.h"
60
59
  #include "src/core/lib/promise/activity.h"
61
60
  #include "src/core/lib/promise/arena_promise.h"
61
+ #include "src/core/lib/promise/cancel_callback.h"
62
62
  #include "src/core/lib/promise/context.h"
63
63
  #include "src/core/lib/promise/pipe.h"
64
64
  #include "src/core/lib/promise/poll.h"
@@ -75,12 +75,6 @@
75
75
 
76
76
  namespace grpc_core {
77
77
 
78
- // HACK: If a filter has this type as a base class it will be skipped in
79
- // v3 filter stacks. This is a temporary measure to allow the v3 filter stack
80
- // to be bought up whilst some tests inadvertently rely on hard to convert
81
- // filters.
82
- class HackyHackyHackySkipInV3FilterStacks {};
83
-
84
78
  class ChannelFilter {
85
79
  public:
86
80
  class Args {
@@ -354,31 +348,56 @@ template <typename Promise, typename Derived>
354
348
  auto MapResult(absl::Status (Derived::Call::*fn)(ServerMetadata&), Promise x,
355
349
  FilterCallData<Derived>* call_data) {
356
350
  DCHECK(fn == &Derived::Call::OnServerTrailingMetadata);
357
- return Map(std::move(x), [call_data](ServerMetadataHandle md) {
358
- auto status = call_data->call.OnServerTrailingMetadata(*md);
359
- if (!status.ok()) return ServerMetadataFromStatus(status);
360
- return md;
361
- });
351
+ return OnCancel(Map(std::move(x),
352
+ [call_data](ServerMetadataHandle md) {
353
+ auto status =
354
+ call_data->call.OnServerTrailingMetadata(*md);
355
+ if (!status.ok()) {
356
+ return ServerMetadataFromStatus(status);
357
+ }
358
+ return md;
359
+ }),
360
+ [call_data]() {
361
+ grpc_metadata_batch b;
362
+ b.Set(GrpcStatusMetadata(), GRPC_STATUS_CANCELLED);
363
+ b.Set(GrpcCallWasCancelled(), true);
364
+ call_data->call.OnServerTrailingMetadata(b).IgnoreError();
365
+ });
362
366
  }
363
367
 
364
368
  template <typename Promise, typename Derived>
365
369
  auto MapResult(void (Derived::Call::*fn)(ServerMetadata&), Promise x,
366
370
  FilterCallData<Derived>* call_data) {
367
371
  DCHECK(fn == &Derived::Call::OnServerTrailingMetadata);
368
- return Map(std::move(x), [call_data](ServerMetadataHandle md) {
369
- call_data->call.OnServerTrailingMetadata(*md);
370
- return md;
371
- });
372
+ return OnCancel(Map(std::move(x),
373
+ [call_data](ServerMetadataHandle md) {
374
+ call_data->call.OnServerTrailingMetadata(*md);
375
+ return md;
376
+ }),
377
+ [call_data]() {
378
+ grpc_metadata_batch b;
379
+ b.Set(GrpcStatusMetadata(), GRPC_STATUS_CANCELLED);
380
+ b.Set(GrpcCallWasCancelled(), true);
381
+ call_data->call.OnServerTrailingMetadata(b);
382
+ });
372
383
  }
373
384
 
374
385
  template <typename Promise, typename Derived>
375
386
  auto MapResult(void (Derived::Call::*fn)(ServerMetadata&, Derived*), Promise x,
376
387
  FilterCallData<Derived>* call_data) {
377
388
  DCHECK(fn == &Derived::Call::OnServerTrailingMetadata);
378
- return Map(std::move(x), [call_data](ServerMetadataHandle md) {
379
- call_data->call.OnServerTrailingMetadata(*md, call_data->channel);
380
- return md;
381
- });
389
+ return OnCancel(
390
+ Map(std::move(x),
391
+ [call_data](ServerMetadataHandle md) {
392
+ call_data->call.OnServerTrailingMetadata(*md, call_data->channel);
393
+ return md;
394
+ }),
395
+ [call_data]() {
396
+ grpc_metadata_batch b;
397
+ b.Set(GrpcStatusMetadata(), GRPC_STATUS_CANCELLED);
398
+ b.Set(GrpcCallWasCancelled(), true);
399
+ call_data->call.OnServerTrailingMetadata(b, call_data->channel);
400
+ });
382
401
  }
383
402
 
384
403
  template <typename Interceptor, typename Derived, typename SfinaeVoid = void>
@@ -492,247 +511,96 @@ auto RunCall(Interceptor interceptor, CallArgs call_args,
492
511
  std::move(call_args), std::move(next_promise_factory), call_data);
493
512
  }
494
513
 
495
- inline void InterceptClientToServerMessage(const NoInterceptor*, void*,
496
- const CallArgs&) {}
497
-
498
- template <typename Derived>
499
- inline void InterceptClientToServerMessage(
500
- ServerMetadataHandle (Derived::Call::*fn)(const Message&),
501
- FilterCallData<Derived>* call_data, const CallArgs& call_args) {
502
- DCHECK(fn == &Derived::Call::OnClientToServerMessage);
503
- call_args.client_to_server_messages->InterceptAndMap(
504
- [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
505
- auto return_md = call_data->call.OnClientToServerMessage(*msg);
506
- if (return_md == nullptr) return std::move(msg);
507
- if (call_data->error_latch.is_set()) return absl::nullopt;
508
- call_data->error_latch.Set(std::move(return_md));
509
- return absl::nullopt;
510
- });
511
- }
512
-
513
- template <typename Derived>
514
- inline void InterceptClientToServerMessage(
515
- ServerMetadataHandle (Derived::Call::*fn)(const Message&, Derived*),
516
- FilterCallData<Derived>* call_data, const CallArgs& call_args) {
517
- DCHECK(fn == &Derived::Call::OnClientToServerMessage);
518
- call_args.client_to_server_messages->InterceptAndMap(
519
- [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
520
- auto return_md =
521
- call_data->call.OnClientToServerMessage(*msg, call_data->channel);
522
- if (return_md == nullptr) return std::move(msg);
523
- if (call_data->error_latch.is_set()) return absl::nullopt;
524
- call_data->error_latch.Set(std::move(return_md));
525
- return absl::nullopt;
526
- });
527
- }
528
-
529
- template <typename Derived>
530
- inline void InterceptClientToServerMessage(
531
- MessageHandle (Derived::Call::*fn)(MessageHandle, Derived*),
532
- FilterCallData<Derived>* call_data, const CallArgs& call_args) {
533
- DCHECK(fn == &Derived::Call::OnClientToServerMessage);
534
- call_args.client_to_server_messages->InterceptAndMap(
535
- [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
536
- return call_data->call.OnClientToServerMessage(std::move(msg),
537
- call_data->channel);
538
- });
539
- }
540
-
541
514
  template <typename Derived>
542
- inline void InterceptClientToServerMessage(
543
- absl::StatusOr<MessageHandle> (Derived::Call::*fn)(MessageHandle, Derived*),
544
- FilterCallData<Derived>* call_data, const CallArgs& call_args) {
515
+ inline auto InterceptClientToServerMessageHandler(
516
+ void (Derived::Call::*fn)(const Message&),
517
+ FilterCallData<Derived>* call_data, const CallArgs&) {
545
518
  DCHECK(fn == &Derived::Call::OnClientToServerMessage);
546
- call_args.client_to_server_messages->InterceptAndMap(
547
- [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
548
- auto r = call_data->call.OnClientToServerMessage(std::move(msg),
549
- call_data->channel);
550
- if (r.ok()) return std::move(*r);
551
- if (call_data->error_latch.is_set()) return absl::nullopt;
552
- call_data->error_latch.Set(ServerMetadataFromStatus(r.status()));
553
- return absl::nullopt;
554
- });
519
+ return [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
520
+ call_data->call.OnClientToServerMessage(*msg);
521
+ return std::move(msg);
522
+ };
555
523
  }
556
524
 
557
- inline void InterceptClientToServerMessage(const NoInterceptor*, void*, void*,
558
- CallSpineInterface*) {}
559
-
560
525
  template <typename Derived>
561
- inline void InterceptClientToServerMessage(
526
+ inline auto InterceptClientToServerMessageHandler(
562
527
  ServerMetadataHandle (Derived::Call::*fn)(const Message&),
563
- typename Derived::Call* call, Derived*, PipeBasedCallSpine* call_spine) {
528
+ FilterCallData<Derived>* call_data, const CallArgs&) {
564
529
  DCHECK(fn == &Derived::Call::OnClientToServerMessage);
565
- call_spine->client_to_server_messages().receiver.InterceptAndMap(
566
- [call, call_spine](MessageHandle msg) -> absl::optional<MessageHandle> {
567
- auto return_md = call->OnClientToServerMessage(*msg);
568
- if (return_md == nullptr) return std::move(msg);
569
- call_spine->PushServerTrailingMetadata(std::move(return_md));
570
- return absl::nullopt;
571
- });
530
+ return [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
531
+ auto return_md = call_data->call.OnClientToServerMessage(*msg);
532
+ if (return_md == nullptr) return std::move(msg);
533
+ if (call_data->error_latch.is_set()) return absl::nullopt;
534
+ call_data->error_latch.Set(std::move(return_md));
535
+ return absl::nullopt;
536
+ };
572
537
  }
573
538
 
574
539
  template <typename Derived>
575
- inline void InterceptClientToServerMessage(
540
+ inline auto InterceptClientToServerMessageHandler(
576
541
  ServerMetadataHandle (Derived::Call::*fn)(const Message&, Derived*),
577
- typename Derived::Call* call, Derived* channel,
578
- PipeBasedCallSpine* call_spine) {
542
+ FilterCallData<Derived>* call_data, const CallArgs&) {
579
543
  DCHECK(fn == &Derived::Call::OnClientToServerMessage);
580
- call_spine->client_to_server_messages().receiver.InterceptAndMap(
581
- [call, call_spine,
582
- channel](MessageHandle msg) -> absl::optional<MessageHandle> {
583
- auto return_md = call->OnClientToServerMessage(*msg, channel);
584
- if (return_md == nullptr) return std::move(msg);
585
- call_spine->PushServerTrailingMetadata(std::move(return_md));
586
- return absl::nullopt;
587
- });
544
+ return [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
545
+ auto return_md =
546
+ call_data->call.OnClientToServerMessage(*msg, call_data->channel);
547
+ if (return_md == nullptr) return std::move(msg);
548
+ if (call_data->error_latch.is_set()) return absl::nullopt;
549
+ call_data->error_latch.Set(std::move(return_md));
550
+ return absl::nullopt;
551
+ };
588
552
  }
589
553
 
590
554
  template <typename Derived>
591
- inline void InterceptClientToServerMessage(
555
+ inline auto InterceptClientToServerMessageHandler(
592
556
  MessageHandle (Derived::Call::*fn)(MessageHandle, Derived*),
593
- typename Derived::Call* call, Derived* channel,
594
- PipeBasedCallSpine* call_spine) {
557
+ FilterCallData<Derived>* call_data, const CallArgs&) {
595
558
  DCHECK(fn == &Derived::Call::OnClientToServerMessage);
596
- call_spine->client_to_server_messages().receiver.InterceptAndMap(
597
- [call, channel](MessageHandle msg) {
598
- return call->OnClientToServerMessage(std::move(msg), channel);
599
- });
559
+ return [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
560
+ return call_data->call.OnClientToServerMessage(std::move(msg),
561
+ call_data->channel);
562
+ };
600
563
  }
601
564
 
602
565
  template <typename Derived>
603
- inline void InterceptClientToServerMessage(
566
+ inline auto InterceptClientToServerMessageHandler(
604
567
  absl::StatusOr<MessageHandle> (Derived::Call::*fn)(MessageHandle, Derived*),
605
- typename Derived::Call* call, Derived* channel,
606
- PipeBasedCallSpine* call_spine) {
568
+ FilterCallData<Derived>* call_data, const CallArgs&) {
607
569
  DCHECK(fn == &Derived::Call::OnClientToServerMessage);
608
- call_spine->client_to_server_messages().receiver.InterceptAndMap(
609
- [call, call_spine,
610
- channel](MessageHandle msg) -> absl::optional<MessageHandle> {
611
- auto r = call->OnClientToServerMessage(std::move(msg), channel);
612
- if (r.ok()) return std::move(*r);
613
- call_spine->PushServerTrailingMetadata(
614
- ServerMetadataFromStatus(r.status()));
615
- return absl::nullopt;
616
- });
617
- }
618
-
619
- inline void InterceptClientInitialMetadata(const NoInterceptor*, void*, void*,
620
- PipeBasedCallSpine*) {}
621
-
622
- template <typename Derived>
623
- inline void InterceptClientInitialMetadata(
624
- void (Derived::Call::*fn)(ClientMetadata& md), typename Derived::Call* call,
625
- Derived*, PipeBasedCallSpine* call_spine) {
626
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
627
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
628
- [call](ClientMetadataHandle md) {
629
- call->OnClientInitialMetadata(*md);
630
- return md;
631
- });
632
- }
633
-
634
- template <typename Derived>
635
- inline void InterceptClientInitialMetadata(
636
- void (Derived::Call::*fn)(ClientMetadata& md, Derived* channel),
637
- typename Derived::Call* call, Derived* channel,
638
- PipeBasedCallSpine* call_spine) {
639
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
640
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
641
- [call, channel](ClientMetadataHandle md) {
642
- call->OnClientInitialMetadata(*md, channel);
643
- return md;
644
- });
645
- }
646
-
647
- template <typename Derived>
648
- inline void InterceptClientInitialMetadata(
649
- ServerMetadataHandle (Derived::Call::*fn)(ClientMetadata& md),
650
- typename Derived::Call* call, Derived*, PipeBasedCallSpine* call_spine) {
651
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
652
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
653
- [call_spine,
654
- call](ClientMetadataHandle md) -> absl::optional<ClientMetadataHandle> {
655
- auto return_md = call->OnClientInitialMetadata(*md);
656
- if (return_md == nullptr) return std::move(md);
657
- call_spine->PushServerTrailingMetadata(std::move(return_md));
658
- return absl::nullopt;
659
- });
570
+ return [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
571
+ auto r = call_data->call.OnClientToServerMessage(std::move(msg),
572
+ call_data->channel);
573
+ if (r.ok()) return std::move(*r);
574
+ if (call_data->error_latch.is_set()) return absl::nullopt;
575
+ call_data->error_latch.Set(ServerMetadataFromStatus(r.status()));
576
+ return absl::nullopt;
577
+ };
660
578
  }
661
579
 
662
- template <typename Derived>
663
- inline void InterceptClientInitialMetadata(
664
- ServerMetadataHandle (Derived::Call::*fn)(ClientMetadata& md,
665
- Derived* channel),
666
- typename Derived::Call* call, Derived* channel,
667
- PipeBasedCallSpine* call_spine) {
668
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
669
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
670
- [call_spine, call, channel](
671
- ClientMetadataHandle md) -> absl::optional<ClientMetadataHandle> {
672
- auto return_md = call->OnClientInitialMetadata(*md, channel);
673
- if (return_md == nullptr) return std::move(md);
674
- call_spine->PushServerTrailingMetadata(std::move(return_md));
675
- return absl::nullopt;
676
- });
580
+ template <typename Derived, typename HookFunction>
581
+ inline void InterceptClientToServerMessage(HookFunction hook,
582
+ const NoInterceptor*,
583
+ FilterCallData<Derived>* call_data,
584
+ const CallArgs& call_args) {
585
+ call_args.client_to_server_messages->InterceptAndMap(
586
+ InterceptClientToServerMessageHandler(hook, call_data, call_args));
677
587
  }
678
588
 
679
- template <typename Derived>
680
- inline void InterceptClientInitialMetadata(
681
- absl::Status (Derived::Call::*fn)(ClientMetadata& md),
682
- typename Derived::Call* call, Derived*, PipeBasedCallSpine* call_spine) {
683
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
684
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
685
- [call_spine,
686
- call](ClientMetadataHandle md) -> absl::optional<ClientMetadataHandle> {
687
- auto status = call->OnClientInitialMetadata(*md);
688
- if (status.ok()) return std::move(md);
689
- call_spine->PushServerTrailingMetadata(
690
- ServerMetadataFromStatus(status));
691
- return absl::nullopt;
692
- });
589
+ template <typename Derived, typename HookFunction>
590
+ inline void InterceptClientToServerMessage(HookFunction hook,
591
+ void (Derived::Call::*)(),
592
+ FilterCallData<Derived>* call_data,
593
+ const CallArgs& call_args) {
594
+ call_args.client_to_server_messages->InterceptAndMapWithHalfClose(
595
+ InterceptClientToServerMessageHandler(hook, call_data, call_args),
596
+ [call_data]() { call_data->call.OnClientToServerHalfClose(); });
693
597
  }
694
598
 
695
599
  template <typename Derived>
696
- inline void InterceptClientInitialMetadata(
697
- absl::Status (Derived::Call::*fn)(ClientMetadata& md, Derived* channel),
698
- typename Derived::Call* call, Derived* channel,
699
- PipeBasedCallSpine* call_spine) {
700
- DCHECK(fn == &Derived::Call::OnClientInitialMetadata);
701
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
702
- [call_spine, call, channel](
703
- ClientMetadataHandle md) -> absl::optional<ClientMetadataHandle> {
704
- auto status = call->OnClientInitialMetadata(*md, channel);
705
- if (status.ok()) return std::move(md);
706
- call_spine->PushServerTrailingMetadata(
707
- ServerMetadataFromStatus(status));
708
- return absl::nullopt;
709
- });
710
- }
711
-
712
- // Returning a promise that resolves to something that can be cast to
713
- // ServerMetadataHandle also counts
714
- template <typename Promise, typename Derived>
715
- absl::void_t<decltype(StatusCast<ServerMetadataHandle>(
716
- std::declval<PromiseResult<Promise>>))>
717
- InterceptClientInitialMetadata(Promise (Derived::Call::*promise_factory)(
718
- ClientMetadata& md, Derived* channel),
719
- typename Derived::Call* call, Derived* channel,
720
- PipeBasedCallSpine* call_spine) {
721
- DCHECK(promise_factory == &Derived::Call::OnClientInitialMetadata);
722
- call_spine->client_initial_metadata().receiver.InterceptAndMap(
723
- [call, call_spine, channel](ClientMetadataHandle md) {
724
- ClientMetadata& md_ref = *md;
725
- return Map(call->OnClientInitialMetadata(md_ref, channel),
726
- [md = std::move(md),
727
- call_spine](PromiseResult<Promise> status) mutable
728
- -> absl::optional<ClientMetadataHandle> {
729
- if (IsStatusOk(status)) return std::move(md);
730
- call_spine->PushServerTrailingMetadata(
731
- StatusCast<ServerMetadataHandle>(std::move(status)));
732
- return absl::nullopt;
733
- });
734
- });
735
- }
600
+ inline void InterceptClientToServerMessage(const NoInterceptor*,
601
+ const NoInterceptor*,
602
+ FilterCallData<Derived>*,
603
+ const CallArgs&) {}
736
604
 
737
605
  template <typename CallArgs>
738
606
  inline void InterceptServerInitialMetadata(const NoInterceptor*, void*,
@@ -797,70 +665,21 @@ inline void InterceptServerInitialMetadata(
797
665
  });
798
666
  }
799
667
 
800
- inline void InterceptServerInitialMetadata(const NoInterceptor*, void*, void*,
801
- CallSpineInterface*) {}
802
-
803
- template <typename Derived>
804
- inline void InterceptServerInitialMetadata(
805
- void (Derived::Call::*fn)(ServerMetadata&), typename Derived::Call* call,
806
- Derived*, PipeBasedCallSpine* call_spine) {
807
- DCHECK(fn == &Derived::Call::OnServerInitialMetadata);
808
- call_spine->server_initial_metadata().sender.InterceptAndMap(
809
- [call](ServerMetadataHandle md) {
810
- call->OnServerInitialMetadata(*md);
811
- return md;
812
- });
813
- }
814
-
815
- template <typename Derived>
816
- inline void InterceptServerInitialMetadata(
817
- absl::Status (Derived::Call::*fn)(ServerMetadata&),
818
- typename Derived::Call* call, Derived*, PipeBasedCallSpine* call_spine) {
819
- DCHECK(fn == &Derived::Call::OnServerInitialMetadata);
820
- call_spine->server_initial_metadata().sender.InterceptAndMap(
821
- [call, call_spine](
822
- ServerMetadataHandle md) -> absl::optional<ServerMetadataHandle> {
823
- auto status = call->OnServerInitialMetadata(*md);
824
- if (status.ok()) return std::move(md);
825
- call_spine->PushServerTrailingMetadata(
826
- ServerMetadataFromStatus(status));
827
- return absl::nullopt;
828
- });
829
- }
830
-
831
- template <typename Derived>
832
- inline void InterceptServerInitialMetadata(
833
- void (Derived::Call::*fn)(ServerMetadata&, Derived*),
834
- typename Derived::Call* call, Derived* channel,
835
- PipeBasedCallSpine* call_spine) {
836
- DCHECK(fn == &Derived::Call::OnServerInitialMetadata);
837
- call_spine->server_initial_metadata().sender.InterceptAndMap(
838
- [call, channel](ServerMetadataHandle md) {
839
- call->OnServerInitialMetadata(*md, channel);
840
- return md;
841
- });
842
- }
668
+ inline void InterceptServerToClientMessage(const NoInterceptor*, void*,
669
+ const CallArgs&) {}
843
670
 
844
671
  template <typename Derived>
845
- inline void InterceptServerInitialMetadata(
846
- absl::Status (Derived::Call::*fn)(ServerMetadata&, Derived*),
847
- typename Derived::Call* call, Derived* channel,
848
- PipeBasedCallSpine* call_spine) {
849
- DCHECK(fn == &Derived::Call::OnServerInitialMetadata);
850
- call_spine->server_initial_metadata().sender.InterceptAndMap(
851
- [call, call_spine, channel](
852
- ServerMetadataHandle md) -> absl::optional<ServerMetadataHandle> {
853
- auto status = call->OnServerInitialMetadata(*md, channel);
854
- if (status.ok()) return std::move(md);
855
- call_spine->PullServerTrailingMetadata(
856
- ServerMetadataFromStatus(status));
857
- return absl::nullopt;
672
+ inline void InterceptServerToClientMessage(
673
+ void (Derived::Call::*fn)(const Message&),
674
+ FilterCallData<Derived>* call_data, const CallArgs& call_args) {
675
+ DCHECK(fn == &Derived::Call::OnServerToClientMessage);
676
+ call_args.server_to_client_messages->InterceptAndMap(
677
+ [call_data](MessageHandle msg) -> absl::optional<MessageHandle> {
678
+ call_data->call.OnServerToClientMessage(*msg);
679
+ return std::move(msg);
858
680
  });
859
681
  }
860
682
 
861
- inline void InterceptServerToClientMessage(const NoInterceptor*, void*,
862
- const CallArgs&) {}
863
-
864
683
  template <typename Derived>
865
684
  inline void InterceptServerToClientMessage(
866
685
  ServerMetadataHandle (Derived::Call::*fn)(const Message&),
@@ -920,94 +739,6 @@ inline void InterceptServerToClientMessage(
920
739
  });
921
740
  }
922
741
 
923
- inline void InterceptServerToClientMessage(const NoInterceptor*, void*, void*,
924
- CallSpineInterface*) {}
925
-
926
- template <typename Derived>
927
- inline void InterceptServerToClientMessage(
928
- ServerMetadataHandle (Derived::Call::*fn)(const Message&),
929
- typename Derived::Call* call, Derived*, PipeBasedCallSpine* call_spine) {
930
- DCHECK(fn == &Derived::Call::OnServerToClientMessage);
931
- call_spine->server_to_client_messages().sender.InterceptAndMap(
932
- [call, call_spine](MessageHandle msg) -> absl::optional<MessageHandle> {
933
- auto return_md = call->OnServerToClientMessage(*msg);
934
- if (return_md == nullptr) return std::move(msg);
935
- call_spine->PushServerTrailingMetadata(std::move(return_md));
936
- return absl::nullopt;
937
- });
938
- }
939
-
940
- template <typename Derived>
941
- inline void InterceptServerToClientMessage(
942
- ServerMetadataHandle (Derived::Call::*fn)(const Message&, Derived*),
943
- typename Derived::Call* call, Derived* channel,
944
- PipeBasedCallSpine* call_spine) {
945
- DCHECK(fn == &Derived::Call::OnServerToClientMessage);
946
- call_spine->server_to_client_messages().sender.InterceptAndMap(
947
- [call, call_spine,
948
- channel](MessageHandle msg) -> absl::optional<MessageHandle> {
949
- auto return_md = call->OnServerToClientMessage(*msg, channel);
950
- if (return_md == nullptr) return std::move(msg);
951
- call_spine->PushServerTrailingMetadata(std::move(return_md));
952
- return absl::nullopt;
953
- });
954
- }
955
-
956
- template <typename Derived>
957
- inline void InterceptServerToClientMessage(
958
- MessageHandle (Derived::Call::*fn)(MessageHandle, Derived*),
959
- typename Derived::Call* call, Derived* channel,
960
- PipeBasedCallSpine* call_spine) {
961
- DCHECK(fn == &Derived::Call::OnServerToClientMessage);
962
- call_spine->server_to_client_messages().sender.InterceptAndMap(
963
- [call, channel](MessageHandle msg) {
964
- return call->OnServerToClientMessage(std::move(msg), channel);
965
- });
966
- }
967
-
968
- template <typename Derived>
969
- inline void InterceptServerToClientMessage(
970
- absl::StatusOr<MessageHandle> (Derived::Call::*fn)(MessageHandle, Derived*),
971
- typename Derived::Call* call, Derived* channel,
972
- PipeBasedCallSpine* call_spine) {
973
- DCHECK(fn == &Derived::Call::OnServerToClientMessage);
974
- call_spine->server_to_client_messages().sender.InterceptAndMap(
975
- [call, call_spine,
976
- channel](MessageHandle msg) -> absl::optional<MessageHandle> {
977
- auto r = call->OnServerToClientMessage(std::move(msg), channel);
978
- if (r.ok()) return std::move(*r);
979
- call_spine->PushServerTrailingMetadata(
980
- ServerMetadataFromStatus(r.status()));
981
- return absl::nullopt;
982
- });
983
- }
984
-
985
- inline void InterceptServerTrailingMetadata(const NoInterceptor*, void*, void*,
986
- CallSpineInterface*) {}
987
-
988
- template <typename Derived>
989
- inline void InterceptServerTrailingMetadata(
990
- void (Derived::Call::*)(ServerMetadata&), typename Derived::Call*, Derived*,
991
- PipeBasedCallSpine*) {
992
- gpr_log(GPR_ERROR,
993
- "InterceptServerTrailingMetadata not available for call v2.5");
994
- }
995
- template <typename Derived>
996
- inline void InterceptServerTrailingMetadata(
997
- void (Derived::Call::*)(ServerMetadata&, Derived*), typename Derived::Call*,
998
- Derived*, PipeBasedCallSpine*) {
999
- gpr_log(GPR_ERROR,
1000
- "InterceptServerTrailingMetadata not available for call v2.5");
1001
- }
1002
-
1003
- template <typename Derived>
1004
- inline void InterceptServerTrailingMetadata(
1005
- absl::Status (Derived::Call::*)(ServerMetadata&), typename Derived::Call*,
1006
- Derived*, PipeBasedCallSpine*) {
1007
- gpr_log(GPR_ERROR,
1008
- "InterceptServerTrailingMetadata not available for call v2.5");
1009
- }
1010
-
1011
742
  inline void InterceptFinalize(const NoInterceptor*, void*, void*) {}
1012
743
 
1013
744
  template <class Call>
@@ -1109,28 +840,6 @@ template <typename Derived>
1109
840
  class ImplementChannelFilter : public ChannelFilter,
1110
841
  public ImplementChannelFilterTag {
1111
842
  public:
1112
- // Natively construct a v3 call.
1113
- void InitCall(CallSpineInterface* call_spine) {
1114
- typename Derived::Call* call =
1115
- GetContext<Arena>()
1116
- ->ManagedNew<promise_filter_detail::CallWrapper<Derived>>(
1117
- static_cast<Derived*>(this));
1118
- auto* c = DownCast<PipeBasedCallSpine*>(call_spine);
1119
- auto* d = static_cast<Derived*>(this);
1120
- promise_filter_detail::InterceptClientInitialMetadata(
1121
- &Derived::Call::OnClientInitialMetadata, call, d, c);
1122
- promise_filter_detail::InterceptClientToServerMessage(
1123
- &Derived::Call::OnClientToServerMessage, call, d, c);
1124
- promise_filter_detail::InterceptServerInitialMetadata(
1125
- &Derived::Call::OnServerInitialMetadata, call, d, c);
1126
- promise_filter_detail::InterceptServerToClientMessage(
1127
- &Derived::Call::OnServerToClientMessage, call, d, c);
1128
- promise_filter_detail::InterceptServerTrailingMetadata(
1129
- &Derived::Call::OnServerTrailingMetadata, call, d, c);
1130
- promise_filter_detail::InterceptFinalize(&Derived::Call::OnFinalize, d,
1131
- call);
1132
- }
1133
-
1134
843
  // Polyfill for the original promise scheme.
1135
844
  // Allows writing v3 filters that work with v2 stacks.
1136
845
  // (and consequently also v1 stacks since we can polyfill back to that too).
@@ -1139,7 +848,8 @@ class ImplementChannelFilter : public ChannelFilter,
1139
848
  auto* call = promise_filter_detail::MakeFilterCall<Derived>(
1140
849
  static_cast<Derived*>(this));
1141
850
  promise_filter_detail::InterceptClientToServerMessage(
1142
- &Derived::Call::OnClientToServerMessage, call, call_args);
851
+ &Derived::Call::OnClientToServerMessage,
852
+ &Derived::Call::OnClientToServerHalfClose, call, call_args);
1143
853
  promise_filter_detail::InterceptServerInitialMetadata(
1144
854
  &Derived::Call::OnServerInitialMetadata, call, call_args);
1145
855
  promise_filter_detail::InterceptServerToClientMessage(
@@ -1230,26 +940,22 @@ class BaseCallData : public Activity, private Wakeable {
1230
940
 
1231
941
  virtual void StartBatch(grpc_transport_stream_op_batch* batch) = 0;
1232
942
 
943
+ Call* call() { return arena_->GetContext<Call>(); }
944
+
1233
945
  protected:
1234
- class ScopedContext
1235
- : public promise_detail::Context<Arena>,
1236
- public promise_detail::Context<grpc_call_context_element>,
1237
- public promise_detail::Context<grpc_polling_entity>,
1238
- public promise_detail::Context<CallFinalization>,
1239
- public promise_detail::Context<
1240
- grpc_event_engine::experimental::EventEngine>,
1241
- public promise_detail::Context<CallContext> {
946
+ class ScopedContext : public promise_detail::Context<Arena>,
947
+ public promise_detail::Context<grpc_polling_entity>,
948
+ public promise_detail::Context<CallFinalization>,
949
+ public promise_detail::Context<
950
+ grpc_event_engine::experimental::EventEngine> {
1242
951
  public:
1243
952
  explicit ScopedContext(BaseCallData* call_data)
1244
953
  : promise_detail::Context<Arena>(call_data->arena_),
1245
- promise_detail::Context<grpc_call_context_element>(
1246
- call_data->context_),
1247
954
  promise_detail::Context<grpc_polling_entity>(
1248
955
  call_data->pollent_.load(std::memory_order_acquire)),
1249
956
  promise_detail::Context<CallFinalization>(&call_data->finalization_),
1250
957
  promise_detail::Context<grpc_event_engine::experimental::EventEngine>(
1251
- call_data->event_engine_),
1252
- promise_detail::Context<CallContext>(call_data->call_context_) {}
958
+ call_data->event_engine_) {}
1253
959
  };
1254
960
 
1255
961
  class Flusher {
@@ -1595,8 +1301,6 @@ class BaseCallData : public Activity, private Wakeable {
1595
1301
  CallCombiner* const call_combiner_;
1596
1302
  const Timestamp deadline_;
1597
1303
  CallFinalization finalization_;
1598
- CallContext* call_context_ = nullptr;
1599
- grpc_call_context_element* const context_;
1600
1304
  std::atomic<grpc_polling_entity*> pollent_{nullptr};
1601
1305
  Pipe<ServerMetadataHandle>* const server_initial_metadata_pipe_;
1602
1306
  SendMessage* const send_message_;
@@ -1952,67 +1656,15 @@ struct ChannelFilterWithFlagsMethods {
1952
1656
  // ChannelArgs channel_args, ChannelFilter::Args filter_args);
1953
1657
  // };
1954
1658
  template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
1955
- absl::enable_if_t<
1956
- std::is_base_of<ChannelFilter, F>::value &&
1957
- !std::is_base_of<ImplementChannelFilterTag, F>::value &&
1958
- !std::is_base_of<HackyHackyHackySkipInV3FilterStacks, F>::value,
1959
- grpc_channel_filter>
1960
- MakePromiseBasedFilter(const char* name) {
1961
- using CallData = promise_filter_detail::CallData<kEndpoint>;
1962
-
1963
- return grpc_channel_filter{
1964
- // start_transport_stream_op_batch
1965
- promise_filter_detail::BaseCallDataMethods::StartTransportStreamOpBatch,
1966
- // make_call_promise
1967
- promise_filter_detail::ChannelFilterMethods::MakeCallPromise,
1968
- nullptr,
1969
- // start_transport_op
1970
- promise_filter_detail::ChannelFilterMethods::StartTransportOp,
1971
- // sizeof_call_data
1972
- sizeof(CallData),
1973
- // init_call_elem
1974
- promise_filter_detail::CallDataFilterWithFlagsMethods<
1975
- CallData, kFlags>::InitCallElem,
1976
- // set_pollset_or_pollset_set
1977
- promise_filter_detail::BaseCallDataMethods::SetPollsetOrPollsetSet,
1978
- // destroy_call_elem
1979
- promise_filter_detail::CallDataFilterWithFlagsMethods<
1980
- CallData, kFlags>::DestroyCallElem,
1981
- // sizeof_channel_data
1982
- sizeof(F),
1983
- // init_channel_elem
1984
- promise_filter_detail::ChannelFilterWithFlagsMethods<
1985
- F, kFlags>::InitChannelElem,
1986
- // post_init_channel_elem
1987
- promise_filter_detail::ChannelFilterMethods::PostInitChannelElem,
1988
- // destroy_channel_elem
1989
- promise_filter_detail::ChannelFilterWithFlagsMethods<
1990
- F, kFlags>::DestroyChannelElem,
1991
- // get_channel_info
1992
- promise_filter_detail::ChannelFilterMethods::GetChannelInfo,
1993
- // name
1994
- name,
1995
- };
1996
- }
1997
-
1998
- template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
1999
- absl::enable_if_t<
2000
- std::is_base_of<HackyHackyHackySkipInV3FilterStacks, F>::value,
2001
- grpc_channel_filter>
1659
+ absl::enable_if_t<std::is_base_of<ChannelFilter, F>::value &&
1660
+ !std::is_base_of<ImplementChannelFilterTag, F>::value,
1661
+ grpc_channel_filter>
2002
1662
  MakePromiseBasedFilter(const char* name) {
2003
1663
  using CallData = promise_filter_detail::CallData<kEndpoint>;
2004
1664
 
2005
1665
  return grpc_channel_filter{
2006
1666
  // start_transport_stream_op_batch
2007
1667
  promise_filter_detail::BaseCallDataMethods::StartTransportStreamOpBatch,
2008
- // make_call_promise
2009
- promise_filter_detail::ChannelFilterMethods::MakeCallPromise,
2010
- [](grpc_channel_element* elem, CallSpineInterface*) {
2011
- GRPC_LOG_EVERY_N_SEC(
2012
- 1, GPR_ERROR,
2013
- "gRPC V3 call stack in use, with a filter ('%s') that is not V3.",
2014
- elem->filter->name);
2015
- },
2016
1668
  // start_transport_op
2017
1669
  promise_filter_detail::ChannelFilterMethods::StartTransportOp,
2018
1670
  // sizeof_call_data
@@ -2051,11 +1703,6 @@ MakePromiseBasedFilter(const char* name) {
2051
1703
  return grpc_channel_filter{
2052
1704
  // start_transport_stream_op_batch
2053
1705
  promise_filter_detail::BaseCallDataMethods::StartTransportStreamOpBatch,
2054
- // make_call_promise
2055
- promise_filter_detail::ChannelFilterMethods::MakeCallPromise,
2056
- [](grpc_channel_element* elem, CallSpineInterface* args) {
2057
- static_cast<F*>(elem->channel_data)->InitCall(args);
2058
- },
2059
1706
  // start_transport_op
2060
1707
  promise_filter_detail::ChannelFilterMethods::StartTransportOp,
2061
1708
  // sizeof_call_data