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,369 @@
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_FILTER_STACK_CALL_H
16
+ #define GRPC_SRC_CORE_LIB_SURFACE_FILTER_STACK_CALL_H
17
+
18
+ #include <inttypes.h>
19
+ #include <limits.h>
20
+ #include <stdlib.h>
21
+ #include <string.h>
22
+
23
+ #include <atomic>
24
+ #include <cstdint>
25
+ #include <string>
26
+ #include <vector>
27
+
28
+ #include "absl/log/check.h"
29
+ #include "absl/strings/str_cat.h"
30
+ #include "absl/strings/str_join.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/channel/channel_stack.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/iomgr/call_combiner.h"
52
+ #include "src/core/lib/iomgr/polling_entity.h"
53
+ #include "src/core/lib/promise/context.h"
54
+ #include "src/core/lib/resource_quota/arena.h"
55
+ #include "src/core/lib/slice/slice_buffer.h"
56
+ #include "src/core/lib/surface/call.h"
57
+ #include "src/core/lib/surface/channel.h"
58
+ #include "src/core/lib/surface/completion_queue.h"
59
+ #include "src/core/lib/transport/metadata_batch.h"
60
+ #include "src/core/lib/transport/transport.h"
61
+ #include "src/core/server/server_interface.h"
62
+ #include "src/core/telemetry/call_tracer.h"
63
+ #include "src/core/util/alloc.h"
64
+
65
+ namespace grpc_core {
66
+
67
+ ///////////////////////////////////////////////////////////////////////////////
68
+ // FilterStackCall
69
+ // To be removed once promise conversion is complete
70
+
71
+ class FilterStackCall final : public Call {
72
+ public:
73
+ ~FilterStackCall() override {
74
+ gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
75
+ }
76
+
77
+ bool Completed() override {
78
+ return gpr_atm_acq_load(&received_final_op_atm_) != 0;
79
+ }
80
+
81
+ // TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
82
+ static grpc_error_handle Create(grpc_call_create_args* args,
83
+ grpc_call** out_call);
84
+
85
+ static Call* FromTopElem(grpc_call_element* elem) {
86
+ return FromCallStack(grpc_call_stack_from_top_element(elem));
87
+ }
88
+
89
+ grpc_call_stack* call_stack() override {
90
+ return reinterpret_cast<grpc_call_stack*>(
91
+ reinterpret_cast<char*>(this) +
92
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
93
+ }
94
+
95
+ grpc_call_element* call_elem(size_t idx) {
96
+ return grpc_call_stack_element(call_stack(), idx);
97
+ }
98
+
99
+ CallCombiner* call_combiner() { return &call_combiner_; }
100
+
101
+ void CancelWithError(grpc_error_handle error) override;
102
+ void SetCompletionQueue(grpc_completion_queue* cq) override;
103
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
104
+ bool is_notify_tag_closure) override;
105
+ void ExternalRef() override { ext_ref_.Ref(); }
106
+ void ExternalUnref() override;
107
+ void InternalRef(const char* reason) override {
108
+ GRPC_CALL_STACK_REF(call_stack(), reason);
109
+ }
110
+ void InternalUnref(const char* reason) override {
111
+ GRPC_CALL_STACK_UNREF(call_stack(), reason);
112
+ }
113
+
114
+ bool is_trailers_only() const override {
115
+ bool result = is_trailers_only_;
116
+ DCHECK(!result || recv_initial_metadata_.TransportSize() == 0);
117
+ return result;
118
+ }
119
+
120
+ bool failed_before_recv_message() const override {
121
+ return call_failed_before_recv_message_;
122
+ }
123
+
124
+ uint32_t test_only_message_flags() override {
125
+ return test_only_last_message_flags_;
126
+ }
127
+
128
+ absl::string_view GetServerAuthority() const override {
129
+ const Slice* authority_metadata =
130
+ recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
131
+ if (authority_metadata == nullptr) return "";
132
+ return authority_metadata->as_string_view();
133
+ }
134
+
135
+ static size_t InitialSizeEstimate() {
136
+ return sizeof(FilterStackCall) +
137
+ sizeof(BatchControl) * kMaxConcurrentBatches;
138
+ }
139
+
140
+ char* GetPeer() final;
141
+
142
+ grpc_compression_options compression_options() override {
143
+ return channel_->compression_options();
144
+ }
145
+
146
+ void DeleteThis() {
147
+ auto arena = this->arena()->Ref();
148
+ this->~FilterStackCall();
149
+ }
150
+
151
+ Channel* channel() const { return channel_.get(); }
152
+
153
+ private:
154
+ class ScopedContext : public promise_detail::Context<Arena> {
155
+ public:
156
+ explicit ScopedContext(FilterStackCall* call)
157
+ : promise_detail::Context<Arena>(call->arena()) {}
158
+ };
159
+
160
+ static constexpr gpr_atm kRecvNone = 0;
161
+ static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
162
+
163
+ enum class PendingOp {
164
+ kRecvMessage,
165
+ kRecvInitialMetadata,
166
+ kRecvTrailingMetadata,
167
+ kSends
168
+ };
169
+ static intptr_t PendingOpMask(PendingOp op) {
170
+ return static_cast<intptr_t>(1) << static_cast<intptr_t>(op);
171
+ }
172
+ static std::string PendingOpString(intptr_t pending_ops) {
173
+ std::vector<absl::string_view> pending_op_strings;
174
+ if (pending_ops & PendingOpMask(PendingOp::kRecvMessage)) {
175
+ pending_op_strings.push_back("kRecvMessage");
176
+ }
177
+ if (pending_ops & PendingOpMask(PendingOp::kRecvInitialMetadata)) {
178
+ pending_op_strings.push_back("kRecvInitialMetadata");
179
+ }
180
+ if (pending_ops & PendingOpMask(PendingOp::kRecvTrailingMetadata)) {
181
+ pending_op_strings.push_back("kRecvTrailingMetadata");
182
+ }
183
+ if (pending_ops & PendingOpMask(PendingOp::kSends)) {
184
+ pending_op_strings.push_back("kSends");
185
+ }
186
+ return absl::StrCat("{", absl::StrJoin(pending_op_strings, ","), "}");
187
+ }
188
+ struct BatchControl {
189
+ FilterStackCall* call_ = nullptr;
190
+ CallTracerAnnotationInterface* call_tracer_ = nullptr;
191
+ grpc_transport_stream_op_batch op_;
192
+ // Share memory for cq_completion and notify_tag as they are never needed
193
+ // simultaneously. Each byte used in this data structure count as six bytes
194
+ // per call, so any savings we can make are worthwhile,
195
+
196
+ // We use notify_tag to determine whether or not to send notification to the
197
+ // completion queue. Once we've made that determination, we can reuse the
198
+ // memory for cq_completion.
199
+ union {
200
+ grpc_cq_completion cq_completion;
201
+ struct {
202
+ // Any given op indicates completion by either (a) calling a closure or
203
+ // (b) sending a notification on the call's completion queue. If
204
+ // \a is_closure is true, \a tag indicates a closure to be invoked;
205
+ // otherwise, \a tag indicates the tag to be used in the notification to
206
+ // be sent to the completion queue.
207
+ void* tag;
208
+ bool is_closure;
209
+ } notify_tag;
210
+ } completion_data_;
211
+ grpc_closure start_batch_;
212
+ grpc_closure finish_batch_;
213
+ std::atomic<intptr_t> ops_pending_{0};
214
+ AtomicError batch_error_;
215
+ void set_pending_ops(uintptr_t ops) {
216
+ ops_pending_.store(ops, std::memory_order_release);
217
+ }
218
+ bool completed_batch_step(PendingOp op) {
219
+ auto mask = PendingOpMask(op);
220
+ auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
221
+ GRPC_TRACE_VLOG(call, 2)
222
+ << "BATCH:" << this << " COMPLETE:" << PendingOpString(mask)
223
+ << " REMAINING:" << PendingOpString(r & ~mask)
224
+ << " (tag:" << completion_data_.notify_tag.tag << ")";
225
+ CHECK_NE((r & mask), 0);
226
+ return r == mask;
227
+ }
228
+
229
+ void PostCompletion();
230
+ void FinishStep(PendingOp op);
231
+ void ProcessDataAfterMetadata();
232
+ void ReceivingStreamReady(grpc_error_handle error);
233
+ void ReceivingInitialMetadataReady(grpc_error_handle error);
234
+ void ReceivingTrailingMetadataReady(grpc_error_handle error);
235
+ void FinishBatch(grpc_error_handle error);
236
+ };
237
+
238
+ FilterStackCall(RefCountedPtr<Arena> arena,
239
+ const grpc_call_create_args& args);
240
+
241
+ static void ReleaseCall(void* call, grpc_error_handle);
242
+ static void DestroyCall(void* call, grpc_error_handle);
243
+
244
+ static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
245
+ return reinterpret_cast<FilterStackCall*>(
246
+ reinterpret_cast<char*>(call_stack) -
247
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
248
+ }
249
+
250
+ void ExecuteBatch(grpc_transport_stream_op_batch* batch,
251
+ grpc_closure* start_batch_closure);
252
+ void SetFinalStatus(grpc_error_handle error);
253
+ BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
254
+ bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
255
+ bool is_trailing);
256
+ void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
257
+ void RecvInitialFilter(grpc_metadata_batch* b);
258
+ void RecvTrailingFilter(grpc_metadata_batch* b,
259
+ grpc_error_handle batch_error);
260
+
261
+ grpc_compression_algorithm incoming_compression_algorithm() override {
262
+ return incoming_compression_algorithm_;
263
+ }
264
+ void SetIncomingCompressionAlgorithm(
265
+ grpc_compression_algorithm algorithm) override {
266
+ incoming_compression_algorithm_ = algorithm;
267
+ }
268
+
269
+ RefCountedPtr<Channel> channel_;
270
+ RefCount ext_ref_;
271
+ CallCombiner call_combiner_;
272
+ grpc_completion_queue* cq_;
273
+ grpc_polling_entity pollent_;
274
+
275
+ /// has grpc_call_unref been called
276
+ bool destroy_called_ = false;
277
+ // Trailers-only response status
278
+ bool is_trailers_only_ = false;
279
+ /// which ops are in-flight
280
+ bool sent_initial_metadata_ = false;
281
+ bool sending_message_ = false;
282
+ bool sent_final_op_ = false;
283
+ bool received_initial_metadata_ = false;
284
+ bool receiving_message_ = false;
285
+ bool requested_final_op_ = false;
286
+ gpr_atm received_final_op_atm_ = 0;
287
+
288
+ BatchControl* active_batches_[kMaxConcurrentBatches] = {};
289
+ grpc_transport_stream_op_batch_payload stream_op_payload_;
290
+
291
+ // first idx: is_receiving, second idx: is_trailing
292
+ grpc_metadata_batch send_initial_metadata_;
293
+ grpc_metadata_batch send_trailing_metadata_;
294
+ grpc_metadata_batch recv_initial_metadata_;
295
+ grpc_metadata_batch recv_trailing_metadata_;
296
+
297
+ // Buffered read metadata waiting to be returned to the application.
298
+ // Element 0 is initial metadata, element 1 is trailing metadata.
299
+ grpc_metadata_array* buffered_metadata_[2] = {};
300
+
301
+ // Call data useful used for reporting. Only valid after the call has
302
+ // completed
303
+ grpc_call_final_info final_info_;
304
+
305
+ SliceBuffer send_slice_buffer_;
306
+ absl::optional<SliceBuffer> receiving_slice_buffer_;
307
+ uint32_t receiving_stream_flags_;
308
+ uint32_t test_only_last_message_flags_ = 0;
309
+ // Compression algorithm for *incoming* data
310
+ grpc_compression_algorithm incoming_compression_algorithm_ =
311
+ GRPC_COMPRESS_NONE;
312
+
313
+ bool call_failed_before_recv_message_ = false;
314
+ grpc_byte_buffer** receiving_buffer_ = nullptr;
315
+ grpc_slice receiving_slice_ = grpc_empty_slice();
316
+ grpc_closure receiving_stream_ready_;
317
+ grpc_closure receiving_initial_metadata_ready_;
318
+ grpc_closure receiving_trailing_metadata_ready_;
319
+ // Status about operation of call
320
+ bool sent_server_trailing_metadata_ = false;
321
+ gpr_atm cancelled_with_error_ = 0;
322
+
323
+ grpc_closure release_call_;
324
+
325
+ union {
326
+ struct {
327
+ grpc_status_code* status;
328
+ grpc_slice* status_details;
329
+ const char** error_string;
330
+ } client;
331
+ struct {
332
+ int* cancelled;
333
+ // backpointer to owning server if this is a server side call.
334
+ ServerInterface* core_server;
335
+ } server;
336
+ } final_op_;
337
+ AtomicError status_error_;
338
+
339
+ // recv_state can contain one of the following values:
340
+ // RECV_NONE : : no initial metadata and messages received
341
+ // RECV_INITIAL_METADATA_FIRST : received initial metadata first
342
+ // a batch_control* : received messages first
343
+
344
+ // +------1------RECV_NONE------3-----+
345
+ // | |
346
+ // | |
347
+ // v v
348
+ // RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
349
+ // | ^ | ^
350
+ // | | | |
351
+ // +-----2-----+ +-----4-----+
352
+
353
+ // For 1, 4: See receiving_initial_metadata_ready() function
354
+ // For 2, 3: See receiving_stream_ready() function
355
+ gpr_atm recv_state_ = 0;
356
+ };
357
+
358
+ // Create a new call based on \a args.
359
+ // Regardless of success or failure, always returns a valid new call into *call
360
+ //
361
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
362
+ grpc_call** call);
363
+
364
+ // Given the top call_element, get the call object.
365
+ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element);
366
+
367
+ } // namespace grpc_core
368
+
369
+ #endif // GRPC_SRC_CORE_LIB_SURFACE_FILTER_STACK_CALL_H
@@ -19,6 +19,7 @@
19
19
  #include "src/core/lib/surface/init.h"
20
20
 
21
21
  #include "absl/base/thread_annotations.h"
22
+ #include "absl/log/log.h"
22
23
 
23
24
  #include <grpc/fork.h>
24
25
  #include <grpc/grpc.h>
@@ -66,10 +67,10 @@ static bool g_shutting_down ABSL_GUARDED_BY(g_init_mu) = false;
66
67
  namespace grpc_core {
67
68
  void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
68
69
  builder->channel_init()
69
- ->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
70
+ ->RegisterV2Filter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
70
71
  .IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
71
72
  builder->channel_init()
72
- ->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
73
+ ->RegisterV2Filter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
73
74
  .IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
74
75
  builder->channel_init()
75
76
  ->RegisterFilter<ServerAuthFilter>(GRPC_SERVER_CHANNEL)
@@ -137,7 +138,7 @@ void grpc_shutdown_from_cleanup_thread(void* /*ignored*/) {
137
138
  return;
138
139
  }
139
140
  grpc_shutdown_internal_locked();
140
- gpr_log(GPR_DEBUG, "grpc_shutdown from cleanup thread done");
141
+ VLOG(2) << "grpc_shutdown from cleanup thread done";
141
142
  }
142
143
 
143
144
  void grpc_shutdown(void) {
@@ -155,14 +156,14 @@ void grpc_shutdown(void) {
155
156
  0) &&
156
157
  grpc_core::ExecCtx::Get() == nullptr) {
157
158
  // just run clean-up when this is called on non-executor thread.
158
- gpr_log(GPR_DEBUG, "grpc_shutdown starts clean-up now");
159
+ VLOG(2) << "grpc_shutdown starts clean-up now";
159
160
  g_shutting_down = true;
160
161
  grpc_shutdown_internal_locked();
161
- gpr_log(GPR_DEBUG, "grpc_shutdown done");
162
+ VLOG(2) << "grpc_shutdown done";
162
163
  } else {
163
164
  // spawn a detached thread to do the actual clean up in case we are
164
165
  // currently in an executor thread.
165
- gpr_log(GPR_DEBUG, "grpc_shutdown spawns clean-up thread");
166
+ VLOG(2) << "grpc_shutdown spawns clean-up thread";
166
167
  g_initializations++;
167
168
  g_shutting_down = true;
168
169
  grpc_core::Thread cleanup_thread(
@@ -36,7 +36,6 @@
36
36
  #include "src/core/lib/channel/promise_based_filter.h"
37
37
  #include "src/core/lib/config/core_configuration.h"
38
38
  #include "src/core/lib/debug/trace.h"
39
- #include "src/core/lib/gpr/useful.h"
40
39
  #include "src/core/lib/gprpp/debug_location.h"
41
40
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
42
41
  #include "src/core/lib/gprpp/sync.h"
@@ -49,6 +48,7 @@
49
48
  #include "src/core/lib/transport/connectivity_state.h"
50
49
  #include "src/core/lib/transport/metadata_batch.h"
51
50
  #include "src/core/lib/transport/transport.h"
51
+ #include "src/core/util/useful.h"
52
52
 
53
53
  // Avoid some IWYU confusion:
54
54
  // IWYU pragma: no_include "src/core/lib/gprpp/orphanable.h"
@@ -36,10 +36,7 @@
36
36
  #include "src/core/lib/channel/channel_fwd.h"
37
37
  #include "src/core/lib/channel/channel_stack.h"
38
38
  #include "src/core/lib/channel/channel_stack_builder_impl.h"
39
- #include "src/core/lib/channel/metrics.h"
40
39
  #include "src/core/lib/config/core_configuration.h"
41
- #include "src/core/lib/debug/stats.h"
42
- #include "src/core/lib/debug/stats_data.h"
43
40
  #include "src/core/lib/gprpp/crash.h"
44
41
  #include "src/core/lib/gprpp/dual_ref_counted.h"
45
42
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
@@ -57,10 +54,13 @@
57
54
  #include "src/core/lib/surface/init_internally.h"
58
55
  #include "src/core/lib/surface/lame_client.h"
59
56
  #include "src/core/lib/transport/transport.h"
57
+ #include "src/core/telemetry/metrics.h"
58
+ #include "src/core/telemetry/stats.h"
59
+ #include "src/core/telemetry/stats_data.h"
60
60
 
61
61
  namespace grpc_core {
62
62
 
63
- absl::StatusOr<OrphanablePtr<Channel>> LegacyChannel::Create(
63
+ absl::StatusOr<RefCountedPtr<Channel>> LegacyChannel::Create(
64
64
  std::string target, ChannelArgs args,
65
65
  grpc_channel_stack_type channel_stack_type) {
66
66
  if (grpc_channel_stack_type_is_client(channel_stack_type)) {
@@ -92,31 +92,46 @@ absl::StatusOr<OrphanablePtr<Channel>> LegacyChannel::Create(
92
92
  if (channel_stack_type == GRPC_SERVER_CHANNEL) {
93
93
  *(*r)->stats_plugin_group =
94
94
  GlobalStatsPluginRegistry::GetStatsPluginsForServer(args);
95
+ // Add per-server stats plugins.
96
+ auto* stats_plugin_list = args.GetPointer<
97
+ std::shared_ptr<std::vector<std::shared_ptr<StatsPlugin>>>>(
98
+ GRPC_ARG_EXPERIMENTAL_STATS_PLUGINS);
99
+ if (stats_plugin_list != nullptr) {
100
+ for (const auto& plugin : **stats_plugin_list) {
101
+ (*r)->stats_plugin_group->AddStatsPlugin(
102
+ plugin, plugin->GetServerScopeConfig(args));
103
+ }
104
+ }
95
105
  } else {
96
106
  std::string authority = args.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY)
97
107
  .value_or(CoreConfiguration::Get()
98
108
  .resolver_registry()
99
109
  .GetDefaultAuthority(target));
110
+ experimental::StatsPluginChannelScope scope(target, authority);
100
111
  *(*r)->stats_plugin_group =
101
- GlobalStatsPluginRegistry::GetStatsPluginsForChannel(
102
- experimental::StatsPluginChannelScope(target, authority));
112
+ GlobalStatsPluginRegistry::GetStatsPluginsForChannel(scope);
113
+ // Add per-channel stats plugins.
114
+ auto* stats_plugin_list = args.GetPointer<
115
+ std::shared_ptr<std::vector<std::shared_ptr<StatsPlugin>>>>(
116
+ GRPC_ARG_EXPERIMENTAL_STATS_PLUGINS);
117
+ if (stats_plugin_list != nullptr) {
118
+ for (const auto& plugin : **stats_plugin_list) {
119
+ (*r)->stats_plugin_group->AddStatsPlugin(
120
+ plugin, plugin->GetChannelScopeConfig(scope));
121
+ }
122
+ }
103
123
  }
104
- return MakeOrphanable<LegacyChannel>(
124
+ return MakeRefCounted<LegacyChannel>(
105
125
  grpc_channel_stack_type_is_client(builder.channel_stack_type()),
106
- builder.IsPromising(), std::move(target), args, std::move(*r));
126
+ std::move(target), args, std::move(*r));
107
127
  }
108
128
 
109
- LegacyChannel::LegacyChannel(bool is_client, bool is_promising,
110
- std::string target,
129
+ LegacyChannel::LegacyChannel(bool is_client, std::string target,
111
130
  const ChannelArgs& channel_args,
112
131
  RefCountedPtr<grpc_channel_stack> channel_stack)
113
132
  : Channel(std::move(target), channel_args),
114
133
  is_client_(is_client),
115
- is_promising_(is_promising),
116
- channel_stack_(std::move(channel_stack)),
117
- allocator_(channel_args.GetObject<ResourceQuota>()
118
- ->memory_quota()
119
- ->CreateMemoryOwner()) {
134
+ channel_stack_(std::move(channel_stack)) {
120
135
  // We need to make sure that grpc_shutdown() does not shut things down
121
136
  // until after the channel is destroyed. However, the channel may not
122
137
  // actually be destroyed by the time grpc_channel_destroy() returns,
@@ -147,13 +162,12 @@ LegacyChannel::LegacyChannel(bool is_client, bool is_promising,
147
162
  };
148
163
  }
149
164
 
150
- void LegacyChannel::Orphan() {
165
+ void LegacyChannel::Orphaned() {
151
166
  grpc_transport_op* op = grpc_make_transport_op(nullptr);
152
167
  op->disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed");
153
168
  grpc_channel_element* elem =
154
169
  grpc_channel_stack_element(channel_stack_.get(), 0);
155
170
  elem->filter->start_transport_op(elem, op);
156
- Unref();
157
171
  }
158
172
 
159
173
  bool LegacyChannel::IsLame() const {
@@ -170,7 +184,7 @@ grpc_call* LegacyChannel::CreateCall(
170
184
  CHECK(is_client_);
171
185
  CHECK(!(cq != nullptr && pollset_set_alternative != nullptr));
172
186
  grpc_call_create_args args;
173
- args.channel = Ref();
187
+ args.channel = RefAsSubclass<LegacyChannel>();
174
188
  args.server = nullptr;
175
189
  args.parent = parent_call;
176
190
  args.propagation_mask = propagation_mask;
@@ -207,9 +221,9 @@ bool LegacyChannel::SupportsConnectivityWatcher() const {
207
221
  // A fire-and-forget object to handle external connectivity state watches.
208
222
  class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
209
223
  public:
210
- StateWatcher(RefCountedPtr<LegacyChannel> channel, grpc_completion_queue* cq,
211
- void* tag, grpc_connectivity_state last_observed_state,
212
- Timestamp deadline)
224
+ StateWatcher(WeakRefCountedPtr<LegacyChannel> channel,
225
+ grpc_completion_queue* cq, void* tag,
226
+ grpc_connectivity_state last_observed_state, Timestamp deadline)
213
227
  : channel_(std::move(channel)),
214
228
  cq_(cq),
215
229
  tag_(tag),
@@ -290,7 +304,7 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
290
304
 
291
305
  static void WatchComplete(void* arg, grpc_error_handle error) {
292
306
  RefCountedPtr<StateWatcher> self(static_cast<StateWatcher*>(arg));
293
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
307
+ if (GRPC_TRACE_FLAG_ENABLED(op_failure)) {
294
308
  GRPC_LOG_IF_ERROR("watch_completion_error", error);
295
309
  }
296
310
  MutexLock lock(&self->mu_);
@@ -316,7 +330,7 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
316
330
  self->WeakUnref();
317
331
  }
318
332
 
319
- RefCountedPtr<LegacyChannel> channel_;
333
+ WeakRefCountedPtr<LegacyChannel> channel_;
320
334
  grpc_completion_queue* cq_;
321
335
  void* tag_;
322
336
 
@@ -336,8 +350,8 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
336
350
  void LegacyChannel::WatchConnectivityState(
337
351
  grpc_connectivity_state last_observed_state, Timestamp deadline,
338
352
  grpc_completion_queue* cq, void* tag) {
339
- new StateWatcher(RefAsSubclass<LegacyChannel>(), cq, tag, last_observed_state,
340
- deadline);
353
+ new StateWatcher(WeakRefAsSubclass<LegacyChannel>(), cq, tag,
354
+ last_observed_state, deadline);
341
355
  }
342
356
 
343
357
  void LegacyChannel::AddConnectivityWatcher(
@@ -404,8 +418,7 @@ void LegacyChannel::Ping(grpc_completion_queue* cq, void* tag) {
404
418
  ClientChannelFilter* LegacyChannel::GetClientChannelFilter() const {
405
419
  grpc_channel_element* elem =
406
420
  grpc_channel_stack_last_element(channel_stack_.get());
407
- if (elem->filter != &ClientChannelFilter::kFilterVtableWithPromises &&
408
- elem->filter != &ClientChannelFilter::kFilterVtableWithoutPromises) {
421
+ if (elem->filter != &ClientChannelFilter::kFilter) {
409
422
  return nullptr;
410
423
  }
411
424
  return static_cast<ClientChannelFilter*>(elem->channel_data);
@@ -32,7 +32,6 @@
32
32
  #include "src/core/lib/channel/channel_args.h"
33
33
  #include "src/core/lib/channel/channel_fwd.h"
34
34
  #include "src/core/lib/channel/channel_stack.h" // IWYU pragma: keep
35
- #include "src/core/lib/debug/stats.h"
36
35
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
37
36
  #include "src/core/lib/gprpp/time.h"
38
37
  #include "src/core/lib/iomgr/iomgr_fwd.h"
@@ -40,31 +39,23 @@
40
39
  #include "src/core/lib/surface/channel.h"
41
40
  #include "src/core/lib/surface/channel_stack_type.h"
42
41
  #include "src/core/lib/transport/call_arena_allocator.h"
42
+ #include "src/core/lib/transport/transport.h"
43
+ #include "src/core/telemetry/stats.h"
43
44
 
44
45
  namespace grpc_core {
45
46
 
46
47
  class LegacyChannel final : public Channel {
47
48
  public:
48
- static absl::StatusOr<OrphanablePtr<Channel>> Create(
49
+ static absl::StatusOr<RefCountedPtr<Channel>> Create(
49
50
  std::string target, ChannelArgs args,
50
51
  grpc_channel_stack_type channel_stack_type);
51
52
 
52
53
  // Do not instantiate directly -- use Create() instead.
53
- LegacyChannel(bool is_client, bool is_promising, std::string target,
54
+ LegacyChannel(bool is_client, std::string target,
54
55
  const ChannelArgs& channel_args,
55
56
  RefCountedPtr<grpc_channel_stack> channel_stack);
56
57
 
57
- void Orphan() override;
58
-
59
- Arena* CreateArena() override {
60
- const size_t initial_size = call_size_estimator_.CallSizeEstimate();
61
- global_stats().IncrementCallInitialSize(initial_size);
62
- return Arena::Create(initial_size, &allocator_);
63
- }
64
- void DestroyArena(Arena* arena) override {
65
- call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes());
66
- arena->Destroy();
67
- }
58
+ void Orphaned() override;
68
59
 
69
60
  bool IsLame() const override;
70
61
 
@@ -74,6 +65,10 @@ class LegacyChannel final : public Channel {
74
65
  absl::optional<Slice> authority, Timestamp deadline,
75
66
  bool registered_method) override;
76
67
 
68
+ void StartCall(UnstartedCallHandler) override {
69
+ Crash("StartCall() not supported on LegacyChannel");
70
+ }
71
+
77
72
  grpc_event_engine::experimental::EventEngine* event_engine() const override {
78
73
  return channel_stack_->EventEngine();
79
74
  }
@@ -99,7 +94,6 @@ class LegacyChannel final : public Channel {
99
94
  void Ping(grpc_completion_queue* cq, void* tag) override;
100
95
 
101
96
  bool is_client() const override { return is_client_; }
102
- bool is_promising() const override { return is_promising_; }
103
97
  grpc_channel_stack* channel_stack() const override {
104
98
  return channel_stack_.get();
105
99
  }
@@ -112,10 +106,7 @@ class LegacyChannel final : public Channel {
112
106
  ClientChannelFilter* GetClientChannelFilter() const;
113
107
 
114
108
  const bool is_client_;
115
- const bool is_promising_;
116
109
  RefCountedPtr<grpc_channel_stack> channel_stack_;
117
- CallSizeEstimator call_size_estimator_{1024};
118
- grpc_event_engine::experimental::MemoryAllocator allocator_;
119
110
  };
120
111
 
121
112
  } // namespace grpc_core