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,449 @@
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_CALL_UTILS_H
16
+ #define GRPC_SRC_CORE_LIB_SURFACE_CALL_UTILS_H
17
+
18
+ #include <inttypes.h>
19
+ #include <limits.h>
20
+ #include <stdlib.h>
21
+ #include <string.h>
22
+
23
+ #include <algorithm>
24
+ #include <atomic>
25
+ #include <cstdint>
26
+ #include <string>
27
+ #include <type_traits>
28
+ #include <utility>
29
+
30
+ #include "absl/log/check.h"
31
+ #include "absl/status/status.h"
32
+ #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/string_view.h"
34
+
35
+ #include <grpc/byte_buffer.h>
36
+ #include <grpc/compression.h>
37
+ #include <grpc/event_engine/event_engine.h>
38
+ #include <grpc/grpc.h>
39
+ #include <grpc/impl/call.h>
40
+ #include <grpc/impl/propagation_bits.h>
41
+ #include <grpc/slice.h>
42
+ #include <grpc/slice_buffer.h>
43
+ #include <grpc/status.h>
44
+ #include <grpc/support/alloc.h>
45
+ #include <grpc/support/atm.h>
46
+ #include <grpc/support/log.h>
47
+ #include <grpc/support/port_platform.h>
48
+ #include <grpc/support/string_util.h>
49
+
50
+ #include "src/core/lib/gprpp/crash.h"
51
+ #include "src/core/lib/promise/activity.h"
52
+ #include "src/core/lib/promise/cancel_callback.h"
53
+ #include "src/core/lib/promise/map.h"
54
+ #include "src/core/lib/promise/poll.h"
55
+ #include "src/core/lib/promise/seq.h"
56
+ #include "src/core/lib/promise/status_flag.h"
57
+ #include "src/core/lib/surface/completion_queue.h"
58
+ #include "src/core/lib/transport/message.h"
59
+ #include "src/core/lib/transport/metadata.h"
60
+ #include "src/core/lib/transport/metadata_batch.h"
61
+
62
+ namespace grpc_core {
63
+
64
+ class PublishToAppEncoder {
65
+ public:
66
+ explicit PublishToAppEncoder(grpc_metadata_array* dest,
67
+ const grpc_metadata_batch* encoding,
68
+ bool is_client)
69
+ : dest_(dest), encoding_(encoding), is_client_(is_client) {}
70
+
71
+ void Encode(const Slice& key, const Slice& value) {
72
+ Append(key.c_slice(), value.c_slice());
73
+ }
74
+
75
+ // Catch anything that is not explicitly handled, and do not publish it to the
76
+ // application. If new metadata is added to a batch that needs to be
77
+ // published, it should be called out here.
78
+ template <typename Which>
79
+ void Encode(Which, const typename Which::ValueType&) {}
80
+
81
+ void Encode(UserAgentMetadata, const Slice& slice) {
82
+ Append(UserAgentMetadata::key(), slice);
83
+ }
84
+
85
+ void Encode(HostMetadata, const Slice& slice) {
86
+ Append(HostMetadata::key(), slice);
87
+ }
88
+
89
+ void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
90
+ Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
91
+ }
92
+
93
+ void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
94
+ Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
95
+ }
96
+
97
+ void Encode(LbTokenMetadata, const Slice& slice) {
98
+ Append(LbTokenMetadata::key(), slice);
99
+ }
100
+
101
+ private:
102
+ void Append(absl::string_view key, int64_t value) {
103
+ Append(StaticSlice::FromStaticString(key).c_slice(),
104
+ Slice::FromInt64(value).c_slice());
105
+ }
106
+
107
+ void Append(absl::string_view key, const Slice& value) {
108
+ Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
109
+ }
110
+
111
+ void Append(grpc_slice key, grpc_slice value) {
112
+ if (dest_->count == dest_->capacity) {
113
+ Crash(absl::StrCat(
114
+ "Too many metadata entries: capacity=", dest_->capacity, " on ",
115
+ is_client_ ? "client" : "server", " encoding ", encoding_->count(),
116
+ " elements: ", encoding_->DebugString().c_str()));
117
+ }
118
+ auto* mdusr = &dest_->metadata[dest_->count++];
119
+ mdusr->key = key;
120
+ mdusr->value = value;
121
+ }
122
+
123
+ grpc_metadata_array* const dest_;
124
+ const grpc_metadata_batch* const encoding_;
125
+ const bool is_client_;
126
+ };
127
+
128
+ void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array,
129
+ bool is_client);
130
+ void CToMetadata(grpc_metadata* metadata, size_t count, grpc_metadata_batch* b);
131
+ const char* GrpcOpTypeName(grpc_op_type op);
132
+
133
+ bool ValidateMetadata(size_t count, grpc_metadata* metadata);
134
+ void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
135
+ bool is_notify_tag_closure);
136
+
137
+ inline bool AreWriteFlagsValid(uint32_t flags) {
138
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
139
+ const uint32_t allowed_write_positions =
140
+ (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
141
+ const uint32_t invalid_positions = ~allowed_write_positions;
142
+ return !(flags & invalid_positions);
143
+ }
144
+
145
+ inline bool AreInitialMetadataFlagsValid(uint32_t flags) {
146
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
147
+ uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
148
+ return !(flags & invalid_positions);
149
+ }
150
+
151
+ // One batch operation
152
+ // Wrapper around promise steps to perform once of the batch operations for the
153
+ // legacy grpc surface api.
154
+ template <typename SetupResult, grpc_op_type kOp>
155
+ class OpHandlerImpl {
156
+ public:
157
+ using PromiseFactory = promise_detail::OncePromiseFactory<void, SetupResult>;
158
+ using Promise = typename PromiseFactory::Promise;
159
+ static_assert(!std::is_same<Promise, void>::value,
160
+ "PromiseFactory must return a promise");
161
+
162
+ OpHandlerImpl() : state_(State::kDismissed) {}
163
+ explicit OpHandlerImpl(SetupResult result) : state_(State::kPromiseFactory) {
164
+ Construct(&promise_factory_, std::move(result));
165
+ }
166
+
167
+ ~OpHandlerImpl() {
168
+ switch (state_) {
169
+ case State::kDismissed:
170
+ break;
171
+ case State::kPromiseFactory:
172
+ Destruct(&promise_factory_);
173
+ break;
174
+ case State::kPromise:
175
+ Destruct(&promise_);
176
+ break;
177
+ }
178
+ }
179
+
180
+ OpHandlerImpl(const OpHandlerImpl&) = delete;
181
+ OpHandlerImpl& operator=(const OpHandlerImpl&) = delete;
182
+ OpHandlerImpl(OpHandlerImpl&& other) noexcept : state_(other.state_) {
183
+ switch (state_) {
184
+ case State::kDismissed:
185
+ break;
186
+ case State::kPromiseFactory:
187
+ Construct(&promise_factory_, std::move(other.promise_factory_));
188
+ break;
189
+ case State::kPromise:
190
+ Construct(&promise_, std::move(other.promise_));
191
+ break;
192
+ }
193
+ }
194
+ OpHandlerImpl& operator=(OpHandlerImpl&& other) noexcept = delete;
195
+
196
+ Poll<StatusFlag> operator()() {
197
+ switch (state_) {
198
+ case State::kDismissed:
199
+ return Success{};
200
+ case State::kPromiseFactory: {
201
+ auto promise = promise_factory_.Make();
202
+ Destruct(&promise_factory_);
203
+ Construct(&promise_, std::move(promise));
204
+ state_ = State::kPromise;
205
+ }
206
+ ABSL_FALLTHROUGH_INTENDED;
207
+ case State::kPromise: {
208
+ GRPC_TRACE_LOG(call, INFO)
209
+ << Activity::current()->DebugTag() << "BeginPoll " << OpName();
210
+ auto r = poll_cast<StatusFlag>(promise_());
211
+ GRPC_TRACE_LOG(call, INFO)
212
+ << Activity::current()->DebugTag() << "EndPoll " << OpName()
213
+ << " --> "
214
+ << (r.pending() ? "PENDING" : (r.value().ok() ? "OK" : "FAILURE"));
215
+ return r;
216
+ }
217
+ }
218
+ GPR_UNREACHABLE_CODE(return Pending{});
219
+ }
220
+
221
+ private:
222
+ enum class State {
223
+ kDismissed,
224
+ kPromiseFactory,
225
+ kPromise,
226
+ };
227
+
228
+ static const char* OpName() { return GrpcOpTypeName(kOp); }
229
+
230
+ // gcc-12 has problems with this being a variant
231
+ GPR_NO_UNIQUE_ADDRESS State state_;
232
+ union {
233
+ PromiseFactory promise_factory_;
234
+ Promise promise_;
235
+ };
236
+ };
237
+
238
+ template <grpc_op_type op_type, typename PromiseFactory>
239
+ auto OpHandler(PromiseFactory setup) {
240
+ return OpHandlerImpl<PromiseFactory, op_type>(std::move(setup));
241
+ }
242
+
243
+ class BatchOpIndex {
244
+ public:
245
+ BatchOpIndex(const grpc_op* ops, size_t nops) : ops_(ops) {
246
+ for (size_t i = 0; i < nops; i++) {
247
+ idxs_[ops[i].op] = static_cast<uint8_t>(i);
248
+ }
249
+ }
250
+
251
+ // 1. Check if op_type is in the batch
252
+ // 2. If it is, run the setup function in the context of the API call (NOT in
253
+ // the call party).
254
+ // 3. This setup function returns a promise factory which we'll then run *in*
255
+ // the party to do initial setup, and have it return the promise that we'll
256
+ // ultimately poll on til completion.
257
+ // Once we express our surface API in terms of core internal types this whole
258
+ // dance will go away.
259
+ template <grpc_op_type op_type, typename SetupFn>
260
+ auto OpHandler(SetupFn setup) {
261
+ using SetupResult = decltype(std::declval<SetupFn>()(grpc_op()));
262
+ using Impl = OpHandlerImpl<SetupResult, op_type>;
263
+ if (const grpc_op* op = this->op(op_type)) {
264
+ auto r = setup(*op);
265
+ return Impl(std::move(r));
266
+ } else {
267
+ return Impl();
268
+ }
269
+ }
270
+
271
+ const grpc_op* op(grpc_op_type op_type) const {
272
+ return idxs_[op_type] == 255 ? nullptr : &ops_[idxs_[op_type]];
273
+ }
274
+
275
+ private:
276
+ const grpc_op* const ops_;
277
+ std::array<uint8_t, 8> idxs_{255, 255, 255, 255, 255, 255, 255, 255};
278
+ };
279
+
280
+ // Defines a promise that calls grpc_cq_end_op() (on first poll) and then waits
281
+ // for the callback supplied to grpc_cq_end_op() to be called, before resolving
282
+ // to Empty{}
283
+ class WaitForCqEndOp {
284
+ public:
285
+ WaitForCqEndOp(bool is_closure, void* tag, grpc_error_handle error,
286
+ grpc_completion_queue* cq)
287
+ : state_{NotStarted{is_closure, tag, std::move(error), cq}} {}
288
+
289
+ Poll<Empty> operator()();
290
+
291
+ WaitForCqEndOp(const WaitForCqEndOp&) = delete;
292
+ WaitForCqEndOp& operator=(const WaitForCqEndOp&) = delete;
293
+ WaitForCqEndOp(WaitForCqEndOp&& other) noexcept
294
+ : state_(std::move(absl::get<NotStarted>(other.state_))) {
295
+ other.state_.emplace<Invalid>();
296
+ }
297
+ WaitForCqEndOp& operator=(WaitForCqEndOp&& other) noexcept {
298
+ state_ = std::move(absl::get<NotStarted>(other.state_));
299
+ other.state_.emplace<Invalid>();
300
+ return *this;
301
+ }
302
+
303
+ private:
304
+ struct NotStarted {
305
+ bool is_closure;
306
+ void* tag;
307
+ grpc_error_handle error;
308
+ grpc_completion_queue* cq;
309
+ };
310
+ struct Started {
311
+ explicit Started(Waker waker) : waker(std::move(waker)) {}
312
+ Waker waker;
313
+ grpc_cq_completion completion;
314
+ std::atomic<bool> done{false};
315
+ };
316
+ struct Invalid {};
317
+ using State = absl::variant<NotStarted, Started, Invalid>;
318
+
319
+ static std::string StateString(const State& state);
320
+
321
+ State state_{Invalid{}};
322
+ };
323
+
324
+ template <typename FalliblePart, typename FinalPart>
325
+ auto InfallibleBatch(FalliblePart fallible_part, FinalPart final_part,
326
+ bool is_notify_tag_closure, void* notify_tag,
327
+ grpc_completion_queue* cq) {
328
+ // Perform fallible_part, then final_part, then wait for the
329
+ // completion queue to be done.
330
+ // If cancelled, we'll ensure the completion queue is notified.
331
+ // There's a slight bug here in that if we cancel this promise after
332
+ // the WaitForCqEndOp we'll double post -- but we don't currently do that.
333
+ return OnCancelFactory(
334
+ [fallible_part = std::move(fallible_part),
335
+ final_part = std::move(final_part), is_notify_tag_closure, notify_tag,
336
+ cq]() mutable {
337
+ return LogPollBatch(notify_tag,
338
+ Seq(std::move(fallible_part), std::move(final_part),
339
+ [is_notify_tag_closure, notify_tag, cq]() {
340
+ return WaitForCqEndOp(is_notify_tag_closure,
341
+ notify_tag,
342
+ absl::OkStatus(), cq);
343
+ }));
344
+ },
345
+ [cq, notify_tag]() {
346
+ grpc_cq_end_op(
347
+ cq, notify_tag, absl::OkStatus(),
348
+ [](void*, grpc_cq_completion* completion) { delete completion; },
349
+ nullptr, new grpc_cq_completion);
350
+ });
351
+ }
352
+
353
+ template <typename FalliblePart>
354
+ auto FallibleBatch(FalliblePart fallible_part, bool is_notify_tag_closure,
355
+ void* notify_tag, grpc_completion_queue* cq) {
356
+ // Perform fallible_part, then wait for the completion queue to be done.
357
+ // If cancelled, we'll ensure the completion queue is notified.
358
+ // There's a slight bug here in that if we cancel this promise after
359
+ // the WaitForCqEndOp we'll double post -- but we don't currently do that.
360
+ return OnCancelFactory(
361
+ [fallible_part = std::move(fallible_part), is_notify_tag_closure,
362
+ notify_tag, cq]() mutable {
363
+ return LogPollBatch(
364
+ notify_tag,
365
+ Seq(std::move(fallible_part),
366
+ [is_notify_tag_closure, notify_tag, cq](StatusFlag r) {
367
+ return WaitForCqEndOp(is_notify_tag_closure, notify_tag,
368
+ StatusCast<absl::Status>(r), cq);
369
+ }));
370
+ },
371
+ [cq]() {
372
+ grpc_cq_end_op(
373
+ cq, nullptr, absl::CancelledError(),
374
+ [](void*, grpc_cq_completion* completion) { delete completion; },
375
+ nullptr, new grpc_cq_completion);
376
+ });
377
+ }
378
+
379
+ template <typename F>
380
+ class PollBatchLogger {
381
+ public:
382
+ PollBatchLogger(void* tag, F f) : tag_(tag), f_(std::move(f)) {}
383
+
384
+ auto operator()() {
385
+ GRPC_TRACE_LOG(call, INFO) << "Poll batch " << tag_;
386
+ auto r = f_();
387
+ GRPC_TRACE_LOG(call, INFO)
388
+ << "Poll batch " << tag_ << " --> " << ResultString(r);
389
+ return r;
390
+ }
391
+
392
+ private:
393
+ template <typename T>
394
+ static std::string ResultString(Poll<T> r) {
395
+ if (r.pending()) return "PENDING";
396
+ return ResultString(r.value());
397
+ }
398
+ static std::string ResultString(Empty) { return "DONE"; }
399
+
400
+ void* tag_;
401
+ F f_;
402
+ };
403
+
404
+ template <typename F>
405
+ PollBatchLogger<F> LogPollBatch(void* tag, F f) {
406
+ return PollBatchLogger<F>(tag, std::move(f));
407
+ }
408
+
409
+ class MessageReceiver {
410
+ public:
411
+ grpc_compression_algorithm incoming_compression_algorithm() const {
412
+ return incoming_compression_algorithm_;
413
+ }
414
+
415
+ void SetIncomingCompressionAlgorithm(
416
+ grpc_compression_algorithm incoming_compression_algorithm) {
417
+ incoming_compression_algorithm_ = incoming_compression_algorithm;
418
+ }
419
+
420
+ uint32_t last_message_flags() const { return test_only_last_message_flags_; }
421
+
422
+ template <typename Puller>
423
+ auto MakeBatchOp(const grpc_op& op, Puller* puller) {
424
+ CHECK_EQ(recv_message_, nullptr);
425
+ recv_message_ = op.data.recv_message.recv_message;
426
+ return [this, puller]() mutable {
427
+ return Map(puller->PullMessage(),
428
+ [this](ValueOrFailure<absl::optional<MessageHandle>> msg) {
429
+ return FinishRecvMessage(std::move(msg));
430
+ });
431
+ };
432
+ }
433
+
434
+ private:
435
+ StatusFlag FinishRecvMessage(
436
+ ValueOrFailure<absl::optional<MessageHandle>> result);
437
+
438
+ grpc_byte_buffer** recv_message_ = nullptr;
439
+ uint32_t test_only_last_message_flags_ = 0;
440
+ // Compression algorithm for incoming data
441
+ grpc_compression_algorithm incoming_compression_algorithm_ =
442
+ GRPC_COMPRESS_NONE;
443
+ };
444
+
445
+ std::string MakeErrorString(const ServerMetadata* trailing_metadata);
446
+
447
+ } // namespace grpc_core
448
+
449
+ #endif // GRPC_SRC_CORE_LIB_SURFACE_CALL_UTILS_H
@@ -29,11 +29,11 @@
29
29
  #include "src/core/channelz/channelz.h"
30
30
  #include "src/core/lib/channel/channel_args.h"
31
31
  #include "src/core/lib/compression/compression_internal.h"
32
- #include "src/core/lib/debug/stats.h"
33
- #include "src/core/lib/debug/stats_data.h"
34
32
  #include "src/core/lib/debug/trace.h"
35
33
  #include "src/core/lib/iomgr/exec_ctx.h"
36
34
  #include "src/core/lib/surface/api_trace.h"
35
+ #include "src/core/telemetry/stats.h"
36
+ #include "src/core/telemetry/stats_data.h"
37
37
 
38
38
  namespace grpc_core {
39
39
 
@@ -65,7 +65,12 @@ Channel::RegisteredCall::~RegisteredCall() {}
65
65
  Channel::Channel(std::string target, const ChannelArgs& channel_args)
66
66
  : target_(std::move(target)),
67
67
  channelz_node_(channel_args.GetObjectRef<channelz::ChannelNode>()),
68
- compression_options_(CompressionOptionsFromChannelArgs(channel_args)) {}
68
+ compression_options_(CompressionOptionsFromChannelArgs(channel_args)),
69
+ call_arena_allocator_(MakeRefCounted<CallArenaAllocator>(
70
+ channel_args.GetObject<ResourceQuota>()
71
+ ->memory_quota()
72
+ ->CreateMemoryOwner(),
73
+ 1024)) {}
69
74
 
70
75
  Channel::RegisteredCall* Channel::RegisterCall(const char* method,
71
76
  const char* host) {
@@ -40,8 +40,11 @@
40
40
  #include "src/core/lib/gprpp/time.h"
41
41
  #include "src/core/lib/iomgr/iomgr_fwd.h"
42
42
  #include "src/core/lib/resource_quota/arena.h"
43
+ #include "src/core/lib/resource_quota/resource_quota.h"
43
44
  #include "src/core/lib/slice/slice.h"
44
45
  #include "src/core/lib/surface/channel_stack_type.h"
46
+ #include "src/core/lib/transport/call_arena_allocator.h"
47
+ #include "src/core/lib/transport/call_destination.h"
45
48
  #include "src/core/lib/transport/connectivity_state.h"
46
49
 
47
50
  // Forward declaration to avoid dependency loop.
@@ -52,7 +55,7 @@ namespace grpc_core {
52
55
  // Forward declaration to avoid dependency loop.
53
56
  class Transport;
54
57
 
55
- class Channel : public RefCounted<Channel>,
58
+ class Channel : public UnstartedCallDestination,
56
59
  public CppImplOf<Channel, grpc_channel> {
57
60
  public:
58
61
  struct RegisteredCall {
@@ -66,11 +69,6 @@ class Channel : public RefCounted<Channel>,
66
69
  ~RegisteredCall();
67
70
  };
68
71
 
69
- virtual void Orphan() = 0;
70
-
71
- virtual Arena* CreateArena() = 0;
72
- virtual void DestroyArena(Arena* arena) = 0;
73
-
74
72
  virtual bool IsLame() const = 0;
75
73
 
76
74
  // TODO(roth): This should return a C++ type.
@@ -129,6 +127,10 @@ class Channel : public RefCounted<Channel>,
129
127
  virtual bool is_client() const { return true; }
130
128
  virtual bool is_promising() const { return true; }
131
129
 
130
+ CallArenaAllocator* call_arena_allocator() const {
131
+ return call_arena_allocator_.get();
132
+ }
133
+
132
134
  protected:
133
135
  Channel(std::string target, const ChannelArgs& channel_args);
134
136
 
@@ -143,6 +145,7 @@ class Channel : public RefCounted<Channel>,
143
145
  // the C++ or other wrapped language Channel that registered these calls).
144
146
  std::map<std::pair<std::string, std::string>, RegisteredCall>
145
147
  registration_table_ ABSL_GUARDED_BY(mu_);
148
+ const RefCountedPtr<CallArenaAllocator> call_arena_allocator_;
146
149
  };
147
150
 
148
151
  } // namespace grpc_core
@@ -150,7 +153,7 @@ class Channel : public RefCounted<Channel>,
150
153
  /// The same as grpc_channel_destroy, but doesn't create an ExecCtx, and so
151
154
  /// is safe to use from within core.
152
155
  inline void grpc_channel_destroy_internal(grpc_channel* channel) {
153
- grpc_core::Channel::FromC(channel)->Orphan();
156
+ grpc_core::Channel::FromC(channel)->Unref();
154
157
  }
155
158
 
156
159
  // Return the channel's compression options.
@@ -14,6 +14,8 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
+ #include "src/core/lib/surface/channel_create.h"
18
+
17
19
  #include "absl/log/check.h"
18
20
 
19
21
  #include <grpc/grpc.h>
@@ -22,17 +24,19 @@
22
24
  #include <grpc/support/port_platform.h>
23
25
 
24
26
  #include "src/core/channelz/channelz.h"
27
+ #include "src/core/client_channel/client_channel.h"
25
28
  #include "src/core/lib/channel/channel_args.h"
26
29
  #include "src/core/lib/config/core_configuration.h"
27
- #include "src/core/lib/debug/stats.h"
28
- #include "src/core/lib/debug/stats_data.h"
30
+ #include "src/core/lib/experiments/experiments.h"
29
31
  #include "src/core/lib/surface/channel.h"
30
32
  #include "src/core/lib/surface/lame_client.h"
31
33
  #include "src/core/lib/surface/legacy_channel.h"
34
+ #include "src/core/telemetry/stats.h"
35
+ #include "src/core/telemetry/stats_data.h"
32
36
 
33
37
  namespace grpc_core {
34
38
 
35
- absl::StatusOr<OrphanablePtr<Channel>> ChannelCreate(
39
+ absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
36
40
  std::string target, ChannelArgs args,
37
41
  grpc_channel_stack_type channel_stack_type, Transport* optional_transport) {
38
42
  global_stats().IncrementClientChannelsCreated();
@@ -77,9 +81,13 @@ absl::StatusOr<OrphanablePtr<Channel>> ChannelCreate(
77
81
  if (optional_transport != nullptr) {
78
82
  args = args.SetObject(optional_transport);
79
83
  }
80
- // Delegate to legacy channel impl.
81
- return LegacyChannel::Create(std::move(target), std::move(args),
82
- channel_stack_type);
84
+ // Delegate to appropriate channel impl.
85
+ if (!args.GetBool(GRPC_ARG_USE_V3_STACK).value_or(false)) {
86
+ return LegacyChannel::Create(std::move(target), std::move(args),
87
+ channel_stack_type);
88
+ }
89
+ CHECK_EQ(channel_stack_type, GRPC_CLIENT_CHANNEL);
90
+ return ClientChannel::Create(std::move(target), std::move(args));
83
91
  }
84
92
 
85
93
  } // namespace grpc_core
@@ -24,16 +24,17 @@
24
24
  #include <grpc/support/port_platform.h>
25
25
 
26
26
  #include "src/core/lib/channel/channel_args.h"
27
- #include "src/core/lib/gprpp/orphanable.h"
28
27
  #include "src/core/lib/surface/channel.h"
29
28
  #include "src/core/lib/surface/channel_stack_type.h"
30
29
 
30
+ #define GRPC_ARG_USE_V3_STACK "grpc.internal.use_v3_stack"
31
+
31
32
  namespace grpc_core {
32
33
 
33
34
  class Transport;
34
35
 
35
36
  // Creates a client channel.
36
- absl::StatusOr<OrphanablePtr<Channel>> ChannelCreate(
37
+ absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
37
38
  std::string target, ChannelArgs args,
38
39
  grpc_channel_stack_type channel_stack_type, Transport* optional_transport);
39
40