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
@@ -27,6 +27,7 @@
27
27
  #include <utility>
28
28
 
29
29
  #include "absl/log/check.h"
30
+ #include "absl/log/log.h"
30
31
  #include "absl/status/statusor.h"
31
32
  #include "absl/strings/cord.h"
32
33
  #include "absl/strings/str_cat.h"
@@ -40,6 +41,7 @@
40
41
 
41
42
  #include "src/core/channelz/channel_trace.h"
42
43
  #include "src/core/channelz/channelz.h"
44
+ #include "src/core/client_channel/client_channel_internal.h"
43
45
  #include "src/core/client_channel/subchannel_pool_interface.h"
44
46
  #include "src/core/handshaker/proxy_mapper_registry.h"
45
47
  #include "src/core/lib/address_utils/sockaddr_utils.h"
@@ -48,12 +50,11 @@
48
50
  #include "src/core/lib/channel/channel_stack.h"
49
51
  #include "src/core/lib/channel/channel_stack_builder_impl.h"
50
52
  #include "src/core/lib/config/core_configuration.h"
51
- #include "src/core/lib/debug/stats.h"
52
- #include "src/core/lib/debug/stats_data.h"
53
53
  #include "src/core/lib/debug/trace.h"
54
- #include "src/core/lib/gpr/alloc.h"
55
- #include "src/core/lib/gpr/useful.h"
54
+ #include "src/core/lib/experiments/experiments.h"
56
55
  #include "src/core/lib/gprpp/debug_location.h"
56
+ #include "src/core/lib/gprpp/orphanable.h"
57
+ #include "src/core/lib/gprpp/ref_counted.h"
57
58
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
58
59
  #include "src/core/lib/gprpp/status_helper.h"
59
60
  #include "src/core/lib/gprpp/sync.h"
@@ -67,7 +68,12 @@
67
68
  #include "src/core/lib/surface/init_internally.h"
68
69
  #include "src/core/lib/transport/connectivity_state.h"
69
70
  #include "src/core/lib/transport/error_utils.h"
71
+ #include "src/core/lib/transport/interception_chain.h"
70
72
  #include "src/core/lib/transport/transport.h"
73
+ #include "src/core/telemetry/stats.h"
74
+ #include "src/core/telemetry/stats_data.h"
75
+ #include "src/core/util/alloc.h"
76
+ #include "src/core/util/useful.h"
71
77
 
72
78
  // Backoff parameters.
73
79
  #define GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS 1
@@ -88,83 +94,138 @@ namespace grpc_core {
88
94
 
89
95
  using ::grpc_event_engine::experimental::EventEngine;
90
96
 
91
- TraceFlag grpc_trace_subchannel(false, "subchannel");
92
- DebugOnlyTraceFlag grpc_trace_subchannel_refcount(false, "subchannel_refcount");
93
-
94
97
  //
95
98
  // ConnectedSubchannel
96
99
  //
97
100
 
98
101
  ConnectedSubchannel::ConnectedSubchannel(
99
- grpc_channel_stack* channel_stack, const ChannelArgs& args,
102
+ const ChannelArgs& args,
100
103
  RefCountedPtr<channelz::SubchannelNode> channelz_subchannel)
101
104
  : RefCounted<ConnectedSubchannel>(
102
- GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel_refcount)
103
- ? "ConnectedSubchannel"
104
- : nullptr),
105
- channel_stack_(channel_stack),
105
+ GRPC_TRACE_FLAG_ENABLED(subchannel_refcount) ? "ConnectedSubchannel"
106
+ : nullptr),
106
107
  args_(args),
107
108
  channelz_subchannel_(std::move(channelz_subchannel)) {}
108
109
 
109
- ConnectedSubchannel::~ConnectedSubchannel() {
110
- GRPC_CHANNEL_STACK_UNREF(channel_stack_, "connected_subchannel_dtor");
111
- }
112
-
113
- void ConnectedSubchannel::StartWatch(
114
- grpc_pollset_set* interested_parties,
115
- OrphanablePtr<ConnectivityStateWatcherInterface> watcher) {
116
- grpc_transport_op* op = grpc_make_transport_op(nullptr);
117
- op->start_connectivity_watch = std::move(watcher);
118
- op->start_connectivity_watch_state = GRPC_CHANNEL_READY;
119
- op->bind_pollset_set = interested_parties;
120
- grpc_channel_element* elem = grpc_channel_stack_element(channel_stack_, 0);
121
- elem->filter->start_transport_op(elem, op);
122
- }
123
-
124
- void ConnectedSubchannel::Ping(grpc_closure* on_initiate,
125
- grpc_closure* on_ack) {
126
- grpc_transport_op* op = grpc_make_transport_op(nullptr);
127
- grpc_channel_element* elem;
128
- op->send_ping.on_initiate = on_initiate;
129
- op->send_ping.on_ack = on_ack;
130
- elem = grpc_channel_stack_element(channel_stack_, 0);
131
- elem->filter->start_transport_op(elem, op);
132
- }
133
-
134
- size_t ConnectedSubchannel::GetInitialCallSizeEstimate() const {
135
- return GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(SubchannelCall)) +
136
- channel_stack_->call_stack_size;
137
- }
138
-
139
- ArenaPromise<ServerMetadataHandle> ConnectedSubchannel::MakeCallPromise(
140
- CallArgs call_args) {
141
- // If not using channelz, we just need to call the channel stack.
142
- if (channelz_subchannel() == nullptr) {
143
- return channel_stack_->MakeClientCallPromise(std::move(call_args));
144
- }
145
- // Otherwise, we need to wrap the channel stack promise with code that
146
- // handles the channelz updates.
147
- return OnCancel(
148
- Seq(channel_stack_->MakeClientCallPromise(std::move(call_args)),
149
- [self = Ref()](ServerMetadataHandle metadata) {
150
- channelz::SubchannelNode* channelz_subchannel =
151
- self->channelz_subchannel();
152
- CHECK_NE(channelz_subchannel, nullptr);
153
- if (metadata->get(GrpcStatusMetadata())
154
- .value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
155
- channelz_subchannel->RecordCallFailed();
156
- } else {
157
- channelz_subchannel->RecordCallSucceeded();
158
- }
159
- return metadata;
160
- }),
161
- [self = Ref()]() {
162
- channelz::SubchannelNode* channelz_subchannel =
163
- self->channelz_subchannel();
164
- CHECK_NE(channelz_subchannel, nullptr);
165
- channelz_subchannel->RecordCallFailed();
166
- });
167
- }
110
+ //
111
+ // LegacyConnectedSubchannel
112
+ //
113
+
114
+ class LegacyConnectedSubchannel : public ConnectedSubchannel {
115
+ public:
116
+ LegacyConnectedSubchannel(
117
+ RefCountedPtr<grpc_channel_stack> channel_stack, const ChannelArgs& args,
118
+ RefCountedPtr<channelz::SubchannelNode> channelz_subchannel)
119
+ : ConnectedSubchannel(args, std::move(channelz_subchannel)),
120
+ channel_stack_(std::move(channel_stack)) {}
121
+
122
+ ~LegacyConnectedSubchannel() override {
123
+ channel_stack_.reset(DEBUG_LOCATION, "ConnectedSubchannel");
124
+ }
125
+
126
+ void StartWatch(
127
+ grpc_pollset_set* interested_parties,
128
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher) override {
129
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
130
+ op->start_connectivity_watch = std::move(watcher);
131
+ op->start_connectivity_watch_state = GRPC_CHANNEL_READY;
132
+ op->bind_pollset_set = interested_parties;
133
+ grpc_channel_element* elem =
134
+ grpc_channel_stack_element(channel_stack_.get(), 0);
135
+ elem->filter->start_transport_op(elem, op);
136
+ }
137
+
138
+ void Ping(absl::AnyInvocable<void(absl::Status)>) override {
139
+ Crash("call v3 ping method called in legacy impl");
140
+ }
141
+
142
+ RefCountedPtr<UnstartedCallDestination> unstarted_call_destination()
143
+ const override {
144
+ Crash("call v3 unstarted_call_destination method called in legacy impl");
145
+ }
146
+
147
+ grpc_channel_stack* channel_stack() const override {
148
+ return channel_stack_.get();
149
+ }
150
+
151
+ size_t GetInitialCallSizeEstimate() const override {
152
+ return GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(SubchannelCall)) +
153
+ channel_stack_->call_stack_size;
154
+ }
155
+
156
+ void Ping(grpc_closure* on_initiate, grpc_closure* on_ack) override {
157
+ grpc_transport_op* op = grpc_make_transport_op(nullptr);
158
+ op->send_ping.on_initiate = on_initiate;
159
+ op->send_ping.on_ack = on_ack;
160
+ grpc_channel_element* elem =
161
+ grpc_channel_stack_element(channel_stack_.get(), 0);
162
+ elem->filter->start_transport_op(elem, op);
163
+ }
164
+
165
+ private:
166
+ RefCountedPtr<grpc_channel_stack> channel_stack_;
167
+ };
168
+
169
+ //
170
+ // NewConnectedSubchannel
171
+ //
172
+
173
+ class NewConnectedSubchannel : public ConnectedSubchannel {
174
+ public:
175
+ class TransportCallDestination final : public CallDestination {
176
+ public:
177
+ explicit TransportCallDestination(OrphanablePtr<ClientTransport> transport)
178
+ : transport_(std::move(transport)) {}
179
+
180
+ ClientTransport* transport() { return transport_.get(); }
181
+
182
+ void HandleCall(CallHandler handler) override {
183
+ transport_->StartCall(std::move(handler));
184
+ }
185
+
186
+ void Orphaned() override { transport_.reset(); }
187
+
188
+ private:
189
+ OrphanablePtr<ClientTransport> transport_;
190
+ };
191
+
192
+ NewConnectedSubchannel(
193
+ RefCountedPtr<UnstartedCallDestination> call_destination,
194
+ RefCountedPtr<TransportCallDestination> transport,
195
+ const ChannelArgs& args,
196
+ RefCountedPtr<channelz::SubchannelNode> channelz_subchannel)
197
+ : ConnectedSubchannel(args, std::move(channelz_subchannel)),
198
+ call_destination_(std::move(call_destination)),
199
+ transport_(std::move(transport)) {}
200
+
201
+ void StartWatch(
202
+ grpc_pollset_set*,
203
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher) override {
204
+ transport_->transport()->StartConnectivityWatch(std::move(watcher));
205
+ }
206
+
207
+ void Ping(absl::AnyInvocable<void(absl::Status)>) override {
208
+ // TODO(ctiller): add new transport API for this in v3 stack
209
+ Crash("not implemented");
210
+ }
211
+
212
+ RefCountedPtr<UnstartedCallDestination> unstarted_call_destination()
213
+ const override {
214
+ return call_destination_;
215
+ }
216
+
217
+ grpc_channel_stack* channel_stack() const override { return nullptr; }
218
+
219
+ size_t GetInitialCallSizeEstimate() const override { return 0; }
220
+
221
+ void Ping(grpc_closure*, grpc_closure*) override {
222
+ Crash("legacy ping method called in call v3 impl");
223
+ }
224
+
225
+ private:
226
+ RefCountedPtr<UnstartedCallDestination> call_destination_;
227
+ RefCountedPtr<TransportCallDestination> transport_;
228
+ };
168
229
 
169
230
  //
170
231
  // SubchannelCall
@@ -186,7 +247,6 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
186
247
  const grpc_call_element_args call_args = {
187
248
  callstk, // call_stack
188
249
  nullptr, // server_transport_data
189
- args.context, // context
190
250
  args.path.c_slice(), // path
191
251
  args.start_time, // start_time
192
252
  args.deadline, // deadline
@@ -196,7 +256,7 @@ SubchannelCall::SubchannelCall(Args args, grpc_error_handle* error)
196
256
  *error = grpc_call_stack_init(connected_subchannel_->channel_stack(), 1,
197
257
  SubchannelCall::Destroy, this, &call_args);
198
258
  if (GPR_UNLIKELY(!error->ok())) {
199
- gpr_log(GPR_ERROR, "error: %s", StatusToString(*error).c_str());
259
+ LOG(ERROR) << "error: " << StatusToString(*error);
200
260
  return;
201
261
  }
202
262
  grpc_call_stack_set_pollset_or_pollset_set(callstk, args.pollent);
@@ -254,8 +314,8 @@ void SubchannelCall::Destroy(void* arg, grpc_error_handle /*error*/) {
254
314
  // Destroy the subchannel call.
255
315
  self->~SubchannelCall();
256
316
  // Destroy the call stack. This should be after destroying the subchannel
257
- // call, because call->after_call_stack_destroy(), if not null, will free the
258
- // call arena.
317
+ // call, because call->after_call_stack_destroy(), if not null, will free
318
+ // the call arena.
259
319
  grpc_call_stack_destroy(SUBCHANNEL_CALL_TO_CALL_STACK(self), nullptr,
260
320
  after_call_stack_destroy);
261
321
  // Automatically reset connected_subchannel. This should be after destroying
@@ -357,7 +417,7 @@ class Subchannel::ConnectedSubchannelStateWatcher final
357
417
  if (c->connected_subchannel_ == nullptr) return;
358
418
  if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
359
419
  new_state == GRPC_CHANNEL_SHUTDOWN) {
360
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
420
+ if (GRPC_TRACE_FLAG_ENABLED(subchannel)) {
361
421
  gpr_log(GPR_INFO,
362
422
  "subchannel %p %s: Connected subchannel %p reports %s: %s", c,
363
423
  c->key_.ToString().c_str(), c->connected_subchannel_.get(),
@@ -456,9 +516,9 @@ BackOff::Options ParseArgsForBackoffValues(const ChannelArgs& args,
456
516
  Subchannel::Subchannel(SubchannelKey key,
457
517
  OrphanablePtr<SubchannelConnector> connector,
458
518
  const ChannelArgs& args)
459
- : DualRefCounted<Subchannel>(
460
- GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel_refcount) ? "Subchannel"
461
- : nullptr),
519
+ : DualRefCounted<Subchannel>(GRPC_TRACE_FLAG_ENABLED(subchannel_refcount)
520
+ ? "Subchannel"
521
+ : nullptr),
462
522
  key_(std::move(key)),
463
523
  args_(args),
464
524
  pollset_set_(grpc_pollset_set_create()),
@@ -473,8 +533,8 @@ Subchannel::Subchannel(SubchannelKey key,
473
533
  // result the subchannel destruction happens asynchronously to channel
474
534
  // destruction. If the last channel destruction triggers a grpc_shutdown
475
535
  // before the last subchannel destruction, then there maybe race conditions
476
- // triggering segmentation faults. To prevent this issue, we call a grpc_init
477
- // here and a grpc_shutdown in the subchannel destructor.
536
+ // triggering segmentation faults. To prevent this issue, we call a
537
+ // grpc_init here and a grpc_shutdown in the subchannel destructor.
478
538
  InitInternally();
479
539
  global_stats().IncrementClientSubchannelsCreated();
480
540
  GRPC_CLOSURE_INIT(&on_connecting_finished_, OnConnectingFinished, this,
@@ -542,7 +602,7 @@ void Subchannel::ThrottleKeepaliveTime(int new_keepalive_time) {
542
602
  // Only update the value if the new keepalive time is larger.
543
603
  if (new_keepalive_time > keepalive_time_) {
544
604
  keepalive_time_ = new_keepalive_time;
545
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
605
+ if (GRPC_TRACE_FLAG_ENABLED(subchannel)) {
546
606
  gpr_log(GPR_INFO, "subchannel %p %s: throttling keepalive time to %d",
547
607
  this, key_.ToString().c_str(), new_keepalive_time);
548
608
  }
@@ -586,7 +646,8 @@ void Subchannel::CancelConnectivityStateWatch(
586
646
  watcher_list_.RemoveWatcherLocked(watcher);
587
647
  }
588
648
  // Drain any connectivity state notifications after releasing the mutex.
589
- // (Shouldn't actually be necessary in this case, but better safe than sorry.)
649
+ // (Shouldn't actually be necessary in this case, but better safe than
650
+ // sorry.)
590
651
  work_serializer_.DrainQueue();
591
652
  }
592
653
 
@@ -757,11 +818,11 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
757
818
  ExecCtx exec_ctx;
758
819
  self->OnRetryTimer();
759
820
  // Subchannel deletion might require an active ExecCtx. So if
760
- // self.reset() is not called here, the WeakRefCountedPtr destructor
761
- // may run after the ExecCtx declared in the callback is destroyed.
762
- // Since subchannel may get destroyed when the WeakRefCountedPtr
763
- // destructor runs, it may not have an active ExecCtx - thus leading
764
- // to crashes.
821
+ // self.reset() is not called here, the WeakRefCountedPtr
822
+ // destructor may run after the ExecCtx declared in the callback
823
+ // is destroyed. Since subchannel may get destroyed when the
824
+ // WeakRefCountedPtr destructor runs, it may not have an active
825
+ // ExecCtx - thus leading to crashes.
765
826
  self.reset();
766
827
  }
767
828
  });
@@ -769,37 +830,59 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
769
830
  }
770
831
 
771
832
  bool Subchannel::PublishTransportLocked() {
772
- // Construct channel stack.
773
- // Builder takes ownership of transport.
774
- ChannelStackBuilderImpl builder(
775
- "subchannel", GRPC_CLIENT_SUBCHANNEL,
776
- connecting_result_.channel_args.SetObject(
777
- std::exchange(connecting_result_.transport, nullptr)));
778
- if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
779
- return false;
780
- }
781
- absl::StatusOr<RefCountedPtr<grpc_channel_stack>> stk = builder.Build();
782
- if (!stk.ok()) {
783
- auto error = absl_status_to_grpc_error(stk.status());
784
- connecting_result_.Reset();
785
- gpr_log(GPR_ERROR,
786
- "subchannel %p %s: error initializing subchannel stack: %s", this,
787
- key_.ToString().c_str(), StatusToString(error).c_str());
788
- return false;
833
+ auto socket_node = std::move(connecting_result_.socket_node);
834
+ if (connecting_result_.transport->filter_stack_transport() != nullptr) {
835
+ // Construct channel stack.
836
+ // Builder takes ownership of transport.
837
+ ChannelStackBuilderImpl builder(
838
+ "subchannel", GRPC_CLIENT_SUBCHANNEL,
839
+ connecting_result_.channel_args.SetObject(
840
+ std::exchange(connecting_result_.transport, nullptr)));
841
+ if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
842
+ return false;
843
+ }
844
+ absl::StatusOr<RefCountedPtr<grpc_channel_stack>> stack = builder.Build();
845
+ if (!stack.ok()) {
846
+ connecting_result_.Reset();
847
+ gpr_log(GPR_ERROR,
848
+ "subchannel %p %s: error initializing subchannel stack: %s", this,
849
+ key_.ToString().c_str(), stack.status().ToString().c_str());
850
+ return false;
851
+ }
852
+ connected_subchannel_ = MakeRefCounted<LegacyConnectedSubchannel>(
853
+ std::move(*stack), args_, channelz_node_);
854
+ } else {
855
+ OrphanablePtr<ClientTransport> transport(
856
+ std::exchange(connecting_result_.transport, nullptr)
857
+ ->client_transport());
858
+ InterceptionChainBuilder builder(
859
+ connecting_result_.channel_args.SetObject(transport.get()));
860
+ CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder(
861
+ GRPC_CLIENT_SUBCHANNEL, builder);
862
+ auto transport_destination =
863
+ MakeRefCounted<NewConnectedSubchannel::TransportCallDestination>(
864
+ std::move(transport));
865
+ auto call_destination = builder.Build(transport_destination);
866
+ if (!call_destination.ok()) {
867
+ connecting_result_.Reset();
868
+ gpr_log(GPR_ERROR,
869
+ "subchannel %p %s: error initializing subchannel stack: %s", this,
870
+ key_.ToString().c_str(),
871
+ call_destination.status().ToString().c_str());
872
+ return false;
873
+ }
874
+ connected_subchannel_ = MakeRefCounted<NewConnectedSubchannel>(
875
+ std::move(*call_destination), std::move(transport_destination), args_,
876
+ channelz_node_);
789
877
  }
790
- RefCountedPtr<channelz::SocketNode> socket =
791
- std::move(connecting_result_.socket_node);
792
878
  connecting_result_.Reset();
793
- if (shutdown_) return false;
794
879
  // Publish.
795
- connected_subchannel_.reset(
796
- new ConnectedSubchannel(stk->release(), args_, channelz_node_));
797
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_subchannel)) {
880
+ if (GRPC_TRACE_FLAG_ENABLED(subchannel)) {
798
881
  gpr_log(GPR_INFO, "subchannel %p %s: new connected subchannel at %p", this,
799
882
  key_.ToString().c_str(), connected_subchannel_.get());
800
883
  }
801
884
  if (channelz_node_ != nullptr) {
802
- channelz_node_->SetChildSocket(std::move(socket));
885
+ channelz_node_->SetChildSocket(std::move(socket_node));
803
886
  }
804
887
  // Start watching connected subchannel.
805
888
  connected_subchannel_->StartWatch(
@@ -810,4 +893,29 @@ bool Subchannel::PublishTransportLocked() {
810
893
  return true;
811
894
  }
812
895
 
896
+ ChannelArgs Subchannel::MakeSubchannelArgs(
897
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
898
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
899
+ const std::string& channel_default_authority) {
900
+ // Note that we start with the channel-level args and then apply the
901
+ // per-address args, so that if a value is present in both, the one
902
+ // in the channel-level args is used. This is particularly important
903
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
904
+ // resolvers to set on a per-address basis only if the application
905
+ // did not explicitly set it at the channel level.
906
+ return channel_args.UnionWith(address_args)
907
+ .SetObject(subchannel_pool)
908
+ // If we haven't already set the default authority arg (i.e., it
909
+ // was not explicitly set by the application nor overridden by
910
+ // the resolver), add it from the channel's default.
911
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
912
+ // Remove channel args that should not affect subchannel
913
+ // uniqueness.
914
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
915
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
916
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
917
+ // Remove all keys with the no-subchannel prefix.
918
+ .RemoveAllKeysWithPrefix(GRPC_ARG_NO_SUBCHANNEL_PREFIX);
919
+ }
920
+
813
921
  } // namespace grpc_core
@@ -36,8 +36,6 @@
36
36
  #include "src/core/lib/backoff/backoff.h"
37
37
  #include "src/core/lib/channel/channel_args.h"
38
38
  #include "src/core/lib/channel/channel_fwd.h"
39
- #include "src/core/lib/channel/context.h"
40
- #include "src/core/lib/gpr/time_precise.h"
41
39
  #include "src/core/lib/gprpp/debug_location.h"
42
40
  #include "src/core/lib/gprpp/dual_ref_counted.h"
43
41
  #include "src/core/lib/gprpp/orphanable.h"
@@ -59,35 +57,39 @@
59
57
  #include "src/core/lib/transport/connectivity_state.h"
60
58
  #include "src/core/lib/transport/metadata_batch.h"
61
59
  #include "src/core/lib/transport/transport.h"
60
+ #include "src/core/util/time_precise.h"
62
61
 
63
62
  namespace grpc_core {
64
63
 
65
64
  class SubchannelCall;
66
65
 
67
- class ConnectedSubchannel final : public RefCounted<ConnectedSubchannel> {
66
+ class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
68
67
  public:
69
- ConnectedSubchannel(
70
- grpc_channel_stack* channel_stack, const ChannelArgs& args,
71
- RefCountedPtr<channelz::SubchannelNode> channelz_subchannel);
72
- ~ConnectedSubchannel() override;
73
-
74
- void StartWatch(grpc_pollset_set* interested_parties,
75
- OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
76
-
77
- void Ping(grpc_closure* on_initiate, grpc_closure* on_ack);
78
-
79
- grpc_channel_stack* channel_stack() const { return channel_stack_; }
80
68
  const ChannelArgs& args() const { return args_; }
81
69
  channelz::SubchannelNode* channelz_subchannel() const {
82
70
  return channelz_subchannel_.get();
83
71
  }
84
72
 
85
- size_t GetInitialCallSizeEstimate() const;
73
+ virtual void StartWatch(
74
+ grpc_pollset_set* interested_parties,
75
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher) = 0;
76
+
77
+ // Methods for v3 stack.
78
+ virtual void Ping(absl::AnyInvocable<void(absl::Status)> on_ack) = 0;
79
+ virtual RefCountedPtr<UnstartedCallDestination> unstarted_call_destination()
80
+ const = 0;
86
81
 
87
- ArenaPromise<ServerMetadataHandle> MakeCallPromise(CallArgs call_args);
82
+ // Methods for legacy stack.
83
+ virtual grpc_channel_stack* channel_stack() const = 0;
84
+ virtual size_t GetInitialCallSizeEstimate() const = 0;
85
+ virtual void Ping(grpc_closure* on_initiate, grpc_closure* on_ack) = 0;
86
+
87
+ protected:
88
+ ConnectedSubchannel(
89
+ const ChannelArgs& args,
90
+ RefCountedPtr<channelz::SubchannelNode> channelz_subchannel);
88
91
 
89
92
  private:
90
- grpc_channel_stack* channel_stack_;
91
93
  ChannelArgs args_;
92
94
  // ref counted pointer to the channelz node in this connected subchannel's
93
95
  // owning subchannel.
@@ -104,7 +106,6 @@ class SubchannelCall final {
104
106
  gpr_cycle_counter start_time;
105
107
  Timestamp deadline;
106
108
  Arena* arena;
107
- grpc_call_context_element* context;
108
109
  CallCombiner* call_combiner;
109
110
  };
110
111
  static RefCountedPtr<SubchannelCall> Create(Args args,
@@ -243,6 +244,12 @@ class Subchannel final : public DualRefCounted<Subchannel> {
243
244
  return connected_subchannel_;
244
245
  }
245
246
 
247
+ RefCountedPtr<UnstartedCallDestination> call_destination() {
248
+ MutexLock lock(&mu_);
249
+ if (connected_subchannel_ == nullptr) return nullptr;
250
+ return connected_subchannel_->unstarted_call_destination();
251
+ }
252
+
246
253
  // Attempt to connect to the backend. Has no effect if already connected.
247
254
  void RequestConnection() ABSL_LOCKS_EXCLUDED(mu_);
248
255
 
@@ -272,6 +279,12 @@ class Subchannel final : public DualRefCounted<Subchannel> {
272
279
  return event_engine_;
273
280
  }
274
281
 
282
+ // Exposed for testing purposes only.
283
+ static ChannelArgs MakeSubchannelArgs(
284
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
285
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
286
+ const std::string& channel_default_authority);
287
+
275
288
  private:
276
289
  // Tears down any existing connection, and arranges for destruction
277
290
  void Orphaned() override ABSL_LOCKS_EXCLUDED(mu_);
@@ -36,8 +36,6 @@
36
36
 
37
37
  namespace grpc_core {
38
38
 
39
- TraceFlag grpc_subchannel_pool_trace(false, "subchannel_pool");
40
-
41
39
  SubchannelKey::SubchannelKey(const grpc_resolved_address& address,
42
40
  const ChannelArgs& args)
43
41
  : address_(address), args_(args) {}
@@ -27,17 +27,15 @@
27
27
 
28
28
  #include "src/core/lib/channel/channel_args.h"
29
29
  #include "src/core/lib/debug/trace.h"
30
- #include "src/core/lib/gpr/useful.h"
31
30
  #include "src/core/lib/gprpp/ref_counted.h"
32
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
33
32
  #include "src/core/lib/iomgr/resolved_address.h"
33
+ #include "src/core/util/useful.h"
34
34
 
35
35
  namespace grpc_core {
36
36
 
37
37
  class Subchannel;
38
38
 
39
- extern TraceFlag grpc_subchannel_pool_trace;
40
-
41
39
  // A key that can uniquely identify a subchannel.
42
40
  class SubchannelKey final {
43
41
  public:
@@ -68,7 +66,7 @@ class SubchannelKey final {
68
66
  class SubchannelPoolInterface : public RefCounted<SubchannelPoolInterface> {
69
67
  public:
70
68
  SubchannelPoolInterface()
71
- : RefCounted(GRPC_TRACE_FLAG_ENABLED(grpc_subchannel_pool_trace)
69
+ : RefCounted(GRPC_TRACE_FLAG_ENABLED(subchannel_pool)
72
70
  ? "SubchannelPoolInterface"
73
71
  : nullptr) {}
74
72
  ~SubchannelPoolInterface() override {}