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
@@ -0,0 +1,222 @@
1
+ // Copyright 2024 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "src/core/lib/surface/server_call.h"
16
+
17
+ #include <inttypes.h>
18
+ #include <limits.h>
19
+ #include <stdlib.h>
20
+ #include <string.h>
21
+
22
+ #include <memory>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/log/check.h"
27
+ #include "absl/strings/string_view.h"
28
+
29
+ #include <grpc/byte_buffer.h>
30
+ #include <grpc/compression.h>
31
+ #include <grpc/event_engine/event_engine.h>
32
+ #include <grpc/grpc.h>
33
+ #include <grpc/impl/call.h>
34
+ #include <grpc/impl/propagation_bits.h>
35
+ #include <grpc/slice.h>
36
+ #include <grpc/slice_buffer.h>
37
+ #include <grpc/status.h>
38
+ #include <grpc/support/alloc.h>
39
+ #include <grpc/support/atm.h>
40
+ #include <grpc/support/log.h>
41
+ #include <grpc/support/port_platform.h>
42
+ #include <grpc/support/string_util.h>
43
+
44
+ #include "src/core/lib/gprpp/bitset.h"
45
+ #include "src/core/lib/promise/all_ok.h"
46
+ #include "src/core/lib/promise/map.h"
47
+ #include "src/core/lib/promise/poll.h"
48
+ #include "src/core/lib/promise/status_flag.h"
49
+ #include "src/core/lib/promise/try_seq.h"
50
+ #include "src/core/lib/resource_quota/arena.h"
51
+ #include "src/core/lib/slice/slice_buffer.h"
52
+ #include "src/core/lib/surface/completion_queue.h"
53
+ #include "src/core/lib/transport/metadata.h"
54
+ #include "src/core/lib/transport/metadata_batch.h"
55
+ #include "src/core/server/server_interface.h"
56
+
57
+ namespace grpc_core {
58
+
59
+ namespace {
60
+
61
+ grpc_call_error ValidateServerBatch(const grpc_op* ops, size_t nops) {
62
+ BitSet<8> got_ops;
63
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
64
+ const grpc_op& op = ops[op_idx];
65
+ switch (op.op) {
66
+ case GRPC_OP_SEND_INITIAL_METADATA:
67
+ if (!AreInitialMetadataFlagsValid(op.flags)) {
68
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
69
+ }
70
+ if (!ValidateMetadata(op.data.send_initial_metadata.count,
71
+ op.data.send_initial_metadata.metadata)) {
72
+ return GRPC_CALL_ERROR_INVALID_METADATA;
73
+ }
74
+ break;
75
+ case GRPC_OP_SEND_MESSAGE:
76
+ if (!AreWriteFlagsValid(op.flags)) {
77
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
78
+ }
79
+ break;
80
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
81
+ if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
82
+ if (!ValidateMetadata(
83
+ op.data.send_status_from_server.trailing_metadata_count,
84
+ op.data.send_status_from_server.trailing_metadata)) {
85
+ return GRPC_CALL_ERROR_INVALID_METADATA;
86
+ }
87
+ break;
88
+ case GRPC_OP_RECV_MESSAGE:
89
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
90
+ if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
91
+ break;
92
+ case GRPC_OP_RECV_INITIAL_METADATA:
93
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
94
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
95
+ return GRPC_CALL_ERROR_NOT_ON_SERVER;
96
+ }
97
+ if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
98
+ got_ops.set(op.op);
99
+ }
100
+ return GRPC_CALL_OK;
101
+ }
102
+
103
+ } // namespace
104
+
105
+ grpc_call_error ServerCall::StartBatch(const grpc_op* ops, size_t nops,
106
+ void* notify_tag,
107
+ bool is_notify_tag_closure) {
108
+ if (nops == 0) {
109
+ EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
110
+ return GRPC_CALL_OK;
111
+ }
112
+ const grpc_call_error validation_result = ValidateServerBatch(ops, nops);
113
+ if (validation_result != GRPC_CALL_OK) {
114
+ return validation_result;
115
+ }
116
+ CommitBatch(ops, nops, notify_tag, is_notify_tag_closure);
117
+ return GRPC_CALL_OK;
118
+ }
119
+
120
+ void ServerCall::CommitBatch(const grpc_op* ops, size_t nops, void* notify_tag,
121
+ bool is_notify_tag_closure) {
122
+ BatchOpIndex op_index(ops, nops);
123
+ if (!is_notify_tag_closure) grpc_cq_begin_op(cq_, notify_tag);
124
+ auto send_initial_metadata =
125
+ op_index.OpHandler<GRPC_OP_SEND_INITIAL_METADATA>([this](
126
+ const grpc_op& op) {
127
+ auto metadata = arena()->MakePooled<ServerMetadata>();
128
+ PrepareOutgoingInitialMetadata(op, *metadata);
129
+ CToMetadata(op.data.send_initial_metadata.metadata,
130
+ op.data.send_initial_metadata.count, metadata.get());
131
+ GRPC_TRACE_LOG(call, INFO)
132
+ << DebugTag() << "[call] Send initial metadata";
133
+ return [this, metadata = std::move(metadata)]() mutable {
134
+ return call_handler_.PushServerInitialMetadata(std::move(metadata));
135
+ };
136
+ });
137
+ auto send_message =
138
+ op_index.OpHandler<GRPC_OP_SEND_MESSAGE>([this](const grpc_op& op) {
139
+ SliceBuffer send;
140
+ grpc_slice_buffer_swap(
141
+ &op.data.send_message.send_message->data.raw.slice_buffer,
142
+ send.c_slice_buffer());
143
+ auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
144
+ return [this, msg = std::move(msg)]() mutable {
145
+ return call_handler_.PushMessage(std::move(msg));
146
+ };
147
+ });
148
+ auto send_trailing_metadata =
149
+ op_index.OpHandler<GRPC_OP_SEND_STATUS_FROM_SERVER>(
150
+ [this](const grpc_op& op) {
151
+ auto metadata = arena()->MakePooled<ServerMetadata>();
152
+ CToMetadata(op.data.send_status_from_server.trailing_metadata,
153
+ op.data.send_status_from_server.trailing_metadata_count,
154
+ metadata.get());
155
+ metadata->Set(GrpcStatusMetadata(),
156
+ op.data.send_status_from_server.status);
157
+ if (auto* details =
158
+ op.data.send_status_from_server.status_details) {
159
+ // TODO(ctiller): this should not be a copy, but we have
160
+ // callers that allocate and pass in a slice created with
161
+ // grpc_slice_from_static_string and then delete the string
162
+ // after passing it in, which shouldn't be a supported API.
163
+ metadata->Set(GrpcMessageMetadata(),
164
+ Slice(grpc_slice_copy(*details)));
165
+ }
166
+ CHECK(metadata != nullptr);
167
+ return [this, metadata = std::move(metadata)]() mutable {
168
+ CHECK(metadata != nullptr);
169
+ return [this, metadata = std::move(
170
+ metadata)]() mutable -> Poll<Success> {
171
+ CHECK(metadata != nullptr);
172
+ call_handler_.PushServerTrailingMetadata(std::move(metadata));
173
+ return Success{};
174
+ };
175
+ };
176
+ });
177
+ auto recv_message =
178
+ op_index.OpHandler<GRPC_OP_RECV_MESSAGE>([this](const grpc_op& op) {
179
+ return message_receiver_.MakeBatchOp(op, &call_handler_);
180
+ });
181
+ auto primary_ops = AllOk<StatusFlag>(
182
+ TrySeq(AllOk<StatusFlag>(std::move(send_initial_metadata),
183
+ std::move(send_message)),
184
+ std::move(send_trailing_metadata)),
185
+ std::move(recv_message));
186
+ if (auto* op = op_index.op(GRPC_OP_RECV_CLOSE_ON_SERVER)) {
187
+ auto recv_trailing_metadata = OpHandler<GRPC_OP_RECV_CLOSE_ON_SERVER>(
188
+ [this, cancelled = op->data.recv_close_on_server.cancelled]() {
189
+ return Map(call_handler_.WasCancelled(),
190
+ [cancelled, this](bool result) -> Success {
191
+ ResetDeadline();
192
+ *cancelled = result ? 1 : 0;
193
+ return Success{};
194
+ });
195
+ });
196
+ call_handler_.SpawnInfallible(
197
+ "final-batch", InfallibleBatch(std::move(primary_ops),
198
+ std::move(recv_trailing_metadata),
199
+ is_notify_tag_closure, notify_tag, cq_));
200
+ } else {
201
+ call_handler_.SpawnInfallible(
202
+ "batch", FallibleBatch(std::move(primary_ops), is_notify_tag_closure,
203
+ notify_tag, cq_));
204
+ }
205
+ }
206
+
207
+ grpc_call* MakeServerCall(CallHandler call_handler,
208
+ ClientMetadataHandle client_initial_metadata,
209
+ ServerInterface* server, grpc_completion_queue* cq,
210
+ grpc_metadata_array* publish_initial_metadata) {
211
+ PublishMetadataArray(client_initial_metadata.get(), publish_initial_metadata,
212
+ false);
213
+ // TODO(ctiller): ideally we'd put this in the arena with the CallHandler,
214
+ // but there's an ownership problem: CallHandler owns the arena, and so would
215
+ // get destroyed before the base class Call destructor runs, leading to
216
+ // UB/crash. Investigate another path.
217
+ return (new ServerCall(std::move(client_initial_metadata),
218
+ std::move(call_handler), server, cq))
219
+ ->c_ptr();
220
+ }
221
+
222
+ } // namespace grpc_core
@@ -0,0 +1,167 @@
1
+ // Copyright 2024 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
16
+ #define GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
17
+
18
+ #include <inttypes.h>
19
+ #include <limits.h>
20
+ #include <stdlib.h>
21
+ #include <string.h>
22
+
23
+ #include <cstdint>
24
+ #include <memory>
25
+ #include <string>
26
+ #include <utility>
27
+
28
+ #include "absl/log/check.h"
29
+ #include "absl/status/status.h"
30
+ #include "absl/strings/str_format.h"
31
+ #include "absl/strings/string_view.h"
32
+
33
+ #include <grpc/byte_buffer.h>
34
+ #include <grpc/compression.h>
35
+ #include <grpc/event_engine/event_engine.h>
36
+ #include <grpc/grpc.h>
37
+ #include <grpc/impl/call.h>
38
+ #include <grpc/impl/propagation_bits.h>
39
+ #include <grpc/slice.h>
40
+ #include <grpc/slice_buffer.h>
41
+ #include <grpc/status.h>
42
+ #include <grpc/support/alloc.h>
43
+ #include <grpc/support/atm.h>
44
+ #include <grpc/support/log.h>
45
+ #include <grpc/support/port_platform.h>
46
+ #include <grpc/support/string_util.h>
47
+
48
+ #include "src/core/lib/gprpp/crash.h"
49
+ #include "src/core/lib/gprpp/ref_counted.h"
50
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
+ #include "src/core/lib/promise/poll.h"
52
+ #include "src/core/lib/resource_quota/arena.h"
53
+ #include "src/core/lib/surface/call.h"
54
+ #include "src/core/lib/surface/call_utils.h"
55
+ #include "src/core/lib/transport/metadata.h"
56
+ #include "src/core/lib/transport/metadata_batch.h"
57
+ #include "src/core/server/server_interface.h"
58
+ #include "src/core/telemetry/stats.h"
59
+ #include "src/core/telemetry/stats_data.h"
60
+
61
+ namespace grpc_core {
62
+
63
+ class ServerCall final : public Call, public DualRefCounted<ServerCall> {
64
+ public:
65
+ ServerCall(ClientMetadataHandle client_initial_metadata,
66
+ CallHandler call_handler, ServerInterface* server,
67
+ grpc_completion_queue* cq)
68
+ : Call(false,
69
+ client_initial_metadata->get(GrpcTimeoutMetadata())
70
+ .value_or(Timestamp::InfFuture()),
71
+ call_handler.arena()->Ref(), call_handler.event_engine()),
72
+ call_handler_(std::move(call_handler)),
73
+ client_initial_metadata_stored_(std::move(client_initial_metadata)),
74
+ cq_(cq),
75
+ server_(server) {
76
+ global_stats().IncrementServerCallsCreated();
77
+ }
78
+
79
+ void CancelWithError(grpc_error_handle error) override {
80
+ call_handler_.SpawnInfallible(
81
+ "CancelWithError",
82
+ [self = WeakRefAsSubclass<ServerCall>(), error = std::move(error)] {
83
+ auto status = ServerMetadataFromStatus(error);
84
+ status->Set(GrpcCallWasCancelled(), true);
85
+ self->call_handler_.PushServerTrailingMetadata(std::move(status));
86
+ return Empty{};
87
+ });
88
+ }
89
+ bool is_trailers_only() const override {
90
+ Crash("is_trailers_only not implemented for server calls");
91
+ }
92
+ absl::string_view GetServerAuthority() const override {
93
+ Crash("unimplemented");
94
+ }
95
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
96
+ bool is_notify_tag_closure) override;
97
+
98
+ void ExternalRef() override { Ref().release(); }
99
+ void ExternalUnref() override { Unref(); }
100
+ void InternalRef(const char*) override { WeakRef().release(); }
101
+ void InternalUnref(const char*) override { WeakUnref(); }
102
+
103
+ void Orphaned() override {
104
+ // TODO(ctiller): only when we're not already finished
105
+ CancelWithError(absl::CancelledError());
106
+ }
107
+
108
+ void SetCompletionQueue(grpc_completion_queue*) override {
109
+ Crash("unimplemented");
110
+ }
111
+
112
+ grpc_compression_options compression_options() override {
113
+ return server_->compression_options();
114
+ }
115
+
116
+ grpc_call_stack* call_stack() override { return nullptr; }
117
+
118
+ char* GetPeer() override {
119
+ Slice peer_slice = GetPeerString();
120
+ if (!peer_slice.empty()) {
121
+ absl::string_view peer_string_view = peer_slice.as_string_view();
122
+ char* peer_string =
123
+ static_cast<char*>(gpr_malloc(peer_string_view.size() + 1));
124
+ memcpy(peer_string, peer_string_view.data(), peer_string_view.size());
125
+ peer_string[peer_string_view.size()] = '\0';
126
+ return peer_string;
127
+ }
128
+ return gpr_strdup("unknown");
129
+ }
130
+
131
+ bool Completed() final { Crash("unimplemented"); }
132
+ bool failed_before_recv_message() const final { Crash("unimplemented"); }
133
+
134
+ uint32_t test_only_message_flags() override {
135
+ return message_receiver_.last_message_flags();
136
+ }
137
+
138
+ grpc_compression_algorithm incoming_compression_algorithm() override {
139
+ return message_receiver_.incoming_compression_algorithm();
140
+ }
141
+
142
+ void SetIncomingCompressionAlgorithm(
143
+ grpc_compression_algorithm algorithm) override {
144
+ message_receiver_.SetIncomingCompressionAlgorithm(algorithm);
145
+ }
146
+
147
+ private:
148
+ void CommitBatch(const grpc_op* ops, size_t nops, void* notify_tag,
149
+ bool is_notify_tag_closure);
150
+
151
+ std::string DebugTag() { return absl::StrFormat("SERVER_CALL[%p]: ", this); }
152
+
153
+ CallHandler call_handler_;
154
+ MessageReceiver message_receiver_;
155
+ ClientMetadataHandle client_initial_metadata_stored_;
156
+ grpc_completion_queue* const cq_;
157
+ ServerInterface* const server_;
158
+ };
159
+
160
+ grpc_call* MakeServerCall(CallHandler call_handler,
161
+ ClientMetadataHandle client_initial_metadata,
162
+ ServerInterface* server, grpc_completion_queue* cq,
163
+ grpc_metadata_array* publish_initial_metadata);
164
+
165
+ } // namespace grpc_core
166
+
167
+ #endif // GRPC_SRC_CORE_LIB_SURFACE_SERVER_CALL_H
@@ -22,6 +22,6 @@
22
22
  #include <grpc/grpc.h>
23
23
  #include <grpc/support/port_platform.h>
24
24
 
25
- const char* grpc_version_string(void) { return "41.0.0"; }
25
+ const char* grpc_version_string(void) { return "42.0.0"; }
26
26
 
27
- const char* grpc_g_stands_for(void) { return "grateful"; }
27
+ const char* grpc_g_stands_for(void) { return "gnarly"; }
@@ -27,8 +27,6 @@
27
27
 
28
28
  #include <grpc/support/port_platform.h>
29
29
 
30
- grpc_core::TraceFlag grpc_bdp_estimator_trace(false, "bdp_estimator");
31
-
32
30
  namespace grpc_core {
33
31
 
34
32
  BdpEstimator::BdpEstimator(absl::string_view name)
@@ -48,7 +46,7 @@ Timestamp BdpEstimator::CompletePing() {
48
46
  1e-9 * static_cast<double>(dt_ts.tv_nsec);
49
47
  double bw = dt > 0 ? (static_cast<double>(accumulator_) / dt) : 0;
50
48
  Duration start_inter_ping_delay = inter_ping_delay_;
51
- if (GRPC_TRACE_FLAG_ENABLED(grpc_bdp_estimator_trace)) {
49
+ if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
52
50
  gpr_log(GPR_INFO,
53
51
  "bdp[%s]:complete acc=%" PRId64 " est=%" PRId64
54
52
  " dt=%lf bw=%lfMbs bw_est=%lfMbs",
@@ -59,7 +57,7 @@ Timestamp BdpEstimator::CompletePing() {
59
57
  if (accumulator_ > 2 * estimate_ / 3 && bw > bw_est_) {
60
58
  estimate_ = std::max(accumulator_, estimate_ * 2);
61
59
  bw_est_ = bw;
62
- if (GRPC_TRACE_FLAG_ENABLED(grpc_bdp_estimator_trace)) {
60
+ if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
63
61
  gpr_log(GPR_INFO, "bdp[%s]: estimate increased to %" PRId64,
64
62
  std::string(name_).c_str(), estimate_);
65
63
  }
@@ -75,7 +73,7 @@ Timestamp BdpEstimator::CompletePing() {
75
73
  }
76
74
  if (start_inter_ping_delay != inter_ping_delay_) {
77
75
  stable_estimate_count_ = 0;
78
- if (GRPC_TRACE_FLAG_ENABLED(grpc_bdp_estimator_trace)) {
76
+ if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
79
77
  gpr_log(GPR_INFO, "bdp[%s]:update_inter_time to %" PRId64 "ms",
80
78
  std::string(name_).c_str(), inter_ping_delay_.millis());
81
79
  }
@@ -33,8 +33,6 @@
33
33
  #include "src/core/lib/debug/trace.h"
34
34
  #include "src/core/lib/gprpp/time.h"
35
35
 
36
- extern grpc_core::TraceFlag grpc_bdp_estimator_trace;
37
-
38
36
  namespace grpc_core {
39
37
 
40
38
  class BdpEstimator {
@@ -51,7 +49,7 @@ class BdpEstimator {
51
49
  // grpc_bdp_estimator_add_incoming_bytes once a ping has been scheduled by a
52
50
  // transport (but not necessarily started)
53
51
  void SchedulePing() {
54
- if (GRPC_TRACE_FLAG_ENABLED(grpc_bdp_estimator_trace)) {
52
+ if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
55
53
  gpr_log(GPR_INFO, "bdp[%s]:sched acc=%" PRId64 " est=%" PRId64,
56
54
  std::string(name_).c_str(), accumulator_, estimate_);
57
55
  }
@@ -64,7 +62,7 @@ class BdpEstimator {
64
62
  // once
65
63
  // the ping is on the wire
66
64
  void StartPing() {
67
- if (GRPC_TRACE_FLAG_ENABLED(grpc_bdp_estimator_trace)) {
65
+ if (GRPC_TRACE_FLAG_ENABLED(bdp_estimator)) {
68
66
  gpr_log(GPR_INFO, "bdp[%s]:start acc=%" PRId64 " est=%" PRId64,
69
67
  std::string(name_).c_str(), accumulator_, estimate_);
70
68
  }
@@ -28,7 +28,7 @@
28
28
 
29
29
  namespace grpc_core {
30
30
 
31
- class CallSizeEstimator {
31
+ class CallSizeEstimator final {
32
32
  public:
33
33
  explicit CallSizeEstimator(size_t initial_estimate)
34
34
  : call_size_estimate_(initial_estimate) {}
@@ -52,19 +52,21 @@ class CallSizeEstimator {
52
52
  std::atomic<size_t> call_size_estimate_;
53
53
  };
54
54
 
55
- class CallArenaAllocator : public RefCounted<CallArenaAllocator> {
55
+ class CallArenaAllocator final : public ArenaFactory {
56
56
  public:
57
57
  CallArenaAllocator(MemoryAllocator allocator, size_t initial_size)
58
- : allocator_(std::move(allocator)), call_size_estimator_(initial_size) {}
58
+ : ArenaFactory(std::move(allocator)),
59
+ call_size_estimator_(initial_size) {}
59
60
 
60
- Arena* MakeArena() {
61
- return Arena::Create(call_size_estimator_.CallSizeEstimate(), &allocator_);
61
+ RefCountedPtr<Arena> MakeArena() override {
62
+ return Arena::Create(call_size_estimator_.CallSizeEstimate(), Ref());
62
63
  }
63
64
 
64
- void Destroy(Arena* arena) { arena->Destroy(); }
65
+ void FinalizeArena(Arena* arena) override {
66
+ call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes());
67
+ }
65
68
 
66
69
  private:
67
- MemoryAllocator allocator_;
68
70
  CallSizeEstimator call_size_estimator_;
69
71
  };
70
72
 
@@ -0,0 +1,76 @@
1
+ // Copyright 2024 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
16
+ #define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include "src/core/lib/gprpp/orphanable.h"
21
+ #include "src/core/lib/transport/call_spine.h"
22
+
23
+ namespace grpc_core {
24
+
25
+ // UnstartedCallDestination is responsible for starting an UnstartedCallHandler
26
+ // and then processing operations on the resulting CallHandler.
27
+ //
28
+ // Examples of UnstartedCallDestinations include:
29
+ // - a load-balanced call in the client channel
30
+ // - a hijacking filter (see Interceptor)
31
+ class UnstartedCallDestination
32
+ : public DualRefCounted<UnstartedCallDestination> {
33
+ public:
34
+ using DualRefCounted::DualRefCounted;
35
+
36
+ ~UnstartedCallDestination() override = default;
37
+ // Start a call. The UnstartedCallHandler will be consumed by the Destination
38
+ // and started.
39
+ // Must be called from the party owned by the call, eg the following must
40
+ // hold:
41
+ // CHECK(GetContext<Activity>() == unstarted_call_handler.party());
42
+ virtual void StartCall(UnstartedCallHandler unstarted_call_handler) = 0;
43
+ };
44
+
45
+ // CallDestination is responsible for handling processing of an already started
46
+ // call.
47
+ //
48
+ // Examples of CallDestinations include:
49
+ // - a client transport
50
+ // - the server API
51
+ class CallDestination : public DualRefCounted<CallDestination> {
52
+ public:
53
+ virtual void HandleCall(CallHandler unstarted_call_handler) = 0;
54
+ };
55
+
56
+ template <typename HC>
57
+ auto MakeCallDestinationFromHandlerFunction(HC handle_call) {
58
+ class Impl : public CallDestination {
59
+ public:
60
+ explicit Impl(HC handle_call) : handle_call_(std::move(handle_call)) {}
61
+
62
+ void Orphaned() override {}
63
+
64
+ void HandleCall(CallHandler call_handler) override {
65
+ handle_call_(std::move(call_handler));
66
+ }
67
+
68
+ private:
69
+ HC handle_call_;
70
+ };
71
+ return MakeRefCounted<Impl>(std::move(handle_call));
72
+ }
73
+
74
+ } // namespace grpc_core
75
+
76
+ #endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H
@@ -29,6 +29,12 @@ void* Offset(void* base, size_t amt) { return static_cast<char*>(base) + amt; }
29
29
 
30
30
  namespace filters_detail {
31
31
 
32
+ void RunHalfClose(absl::Span<const HalfCloseOperator> ops, void* call_data) {
33
+ for (const auto& op : ops) {
34
+ op.half_close(Offset(call_data, op.call_offset), op.channel_data);
35
+ }
36
+ }
37
+
32
38
  template <typename T>
33
39
  OperationExecutor<T>::~OperationExecutor() {
34
40
  if (promise_data_ != nullptr) {
@@ -164,8 +170,15 @@ Poll<T> InfallibleOperationExecutor<T>::ContinueStep(void* call_data) {
164
170
  template class OperationExecutor<ClientMetadataHandle>;
165
171
  template class OperationExecutor<MessageHandle>;
166
172
  template class InfallibleOperationExecutor<ServerMetadataHandle>;
173
+
167
174
  } // namespace filters_detail
168
175
 
176
+ namespace {
177
+ // Call data for those calls that don't have any call data
178
+ // (we form pointers to this that aren't allowed to be nullptr)
179
+ char g_empty_call_data;
180
+ } // namespace
181
+
169
182
  ///////////////////////////////////////////////////////////////////////////////
170
183
  // CallFilters
171
184
 
@@ -175,7 +188,7 @@ CallFilters::CallFilters(ClientMetadataHandle client_initial_metadata)
175
188
  client_initial_metadata_(std::move(client_initial_metadata)) {}
176
189
 
177
190
  CallFilters::~CallFilters() {
178
- if (call_data_ != nullptr) {
191
+ if (call_data_ != nullptr && call_data_ != &g_empty_call_data) {
179
192
  for (const auto& destructor : stack_->data_.filter_destructor) {
180
193
  destructor.call_destroy(Offset(call_data_, destructor.call_offset));
181
194
  }
@@ -186,8 +199,12 @@ CallFilters::~CallFilters() {
186
199
  void CallFilters::SetStack(RefCountedPtr<Stack> stack) {
187
200
  CHECK_EQ(call_data_, nullptr);
188
201
  stack_ = std::move(stack);
189
- call_data_ = gpr_malloc_aligned(stack_->data_.call_data_size,
190
- stack_->data_.call_data_alignment);
202
+ if (stack_->data_.call_data_size != 0) {
203
+ call_data_ = gpr_malloc_aligned(stack_->data_.call_data_size,
204
+ stack_->data_.call_data_alignment);
205
+ } else {
206
+ call_data_ = &g_empty_call_data;
207
+ }
191
208
  for (const auto& constructor : stack_->data_.filter_constructor) {
192
209
  constructor.call_init(Offset(call_data_, constructor.call_offset),
193
210
  constructor.channel_data);
@@ -208,25 +225,26 @@ void CallFilters::Finalize(const grpc_call_final_info* final_info) {
208
225
  void CallFilters::CancelDueToFailedPipeOperation(SourceLocation but_where) {
209
226
  // We expect something cancelled before now
210
227
  if (server_trailing_metadata_ == nullptr) return;
211
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_promise_primitives)) {
228
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
212
229
  gpr_log(but_where.file(), but_where.line(), GPR_LOG_SEVERITY_DEBUG,
213
230
  "Cancelling due to failed pipe operation: %s",
214
231
  DebugString().c_str());
215
232
  }
216
- server_trailing_metadata_ =
217
- ServerMetadataFromStatus(absl::CancelledError("Failed pipe operation"));
233
+ PushServerTrailingMetadata(
234
+ ServerMetadataFromStatus(absl::CancelledError("Failed pipe operation")));
218
235
  server_trailing_metadata_waiter_.Wake();
219
236
  }
220
237
 
221
238
  void CallFilters::PushServerTrailingMetadata(ServerMetadataHandle md) {
222
239
  CHECK(md != nullptr);
223
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_promise_primitives)) {
240
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
224
241
  gpr_log(GPR_INFO, "%s PushServerTrailingMetadata[%p]: %s into %s",
225
242
  GetContext<Activity>()->DebugTag().c_str(), this,
226
243
  md->DebugString().c_str(), DebugString().c_str());
227
244
  }
228
245
  CHECK(md != nullptr);
229
- if (server_trailing_metadata_ != nullptr) return;
246
+ if (cancelled_.is_set()) return;
247
+ cancelled_.Set(md->get(GrpcCallWasCancelled()).value_or(false));
230
248
  server_trailing_metadata_ = std::move(md);
231
249
  client_initial_metadata_state_.CloseWithError();
232
250
  server_initial_metadata_state_.CloseSending();
@@ -362,7 +380,7 @@ void filters_detail::PipeState::DropPush() {
362
380
  case ValueState::kReady:
363
381
  case ValueState::kProcessing:
364
382
  case ValueState::kWaiting:
365
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_promise_primitives)) {
383
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
366
384
  gpr_log(GPR_INFO, "%p drop push in state %s", this,
367
385
  DebugString().c_str());
368
386
  }
@@ -382,7 +400,7 @@ void filters_detail::PipeState::DropPull() {
382
400
  case ValueState::kReady:
383
401
  case ValueState::kProcessing:
384
402
  case ValueState::kWaiting:
385
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_promise_primitives)) {
403
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
386
404
  gpr_log(GPR_INFO, "%p drop pull in state %s", this,
387
405
  DebugString().c_str());
388
406
  }