grpc 1.73.0 → 1.75.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 (786) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +116 -53
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +18 -6
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/client_call.cc +4 -4
  11. data/src/core/call/filter_fusion.h +1230 -0
  12. data/src/core/call/interception_chain.h +7 -11
  13. data/src/core/call/metadata.cc +22 -0
  14. data/src/core/call/metadata.h +24 -2
  15. data/src/core/channelz/channel_trace.cc +213 -115
  16. data/src/core/channelz/channel_trace.h +380 -86
  17. data/src/core/channelz/channelz.cc +274 -192
  18. data/src/core/channelz/channelz.h +224 -72
  19. data/src/core/channelz/channelz_registry.cc +2 -163
  20. data/src/core/channelz/channelz_registry.h +37 -6
  21. data/src/core/channelz/property_list.cc +353 -0
  22. data/src/core/channelz/property_list.h +204 -0
  23. data/src/core/channelz/v2tov1/convert.cc +683 -0
  24. data/src/core/channelz/v2tov1/convert.h +58 -0
  25. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  26. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  27. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  28. data/src/core/channelz/v2tov1/property_list.h +52 -0
  29. data/src/core/channelz/ztrace_collector.h +3 -2
  30. data/src/core/client_channel/backup_poller.cc +17 -2
  31. data/src/core/client_channel/client_channel.cc +17 -28
  32. data/src/core/client_channel/client_channel_filter.cc +24 -33
  33. data/src/core/client_channel/client_channel_filter.h +2 -2
  34. data/src/core/client_channel/client_channel_internal.h +2 -1
  35. data/src/core/client_channel/config_selector.h +8 -2
  36. data/src/core/client_channel/dynamic_filters.cc +5 -6
  37. data/src/core/client_channel/dynamic_filters.h +1 -1
  38. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  39. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  40. data/src/core/client_channel/retry_filter.cc +21 -27
  41. data/src/core/client_channel/retry_filter.h +10 -7
  42. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  43. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  44. data/src/core/client_channel/retry_interceptor.cc +30 -44
  45. data/src/core/client_channel/retry_interceptor.h +18 -17
  46. data/src/core/client_channel/retry_throttle.cc +46 -61
  47. data/src/core/client_channel/retry_throttle.h +17 -39
  48. data/src/core/client_channel/subchannel.cc +57 -25
  49. data/src/core/client_channel/subchannel.h +10 -0
  50. data/src/core/config/config_vars.cc +2 -0
  51. data/src/core/config/core_configuration.cc +4 -1
  52. data/src/core/config/core_configuration.h +23 -0
  53. data/src/core/credentials/call/call_creds_registry.h +125 -0
  54. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  55. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  56. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  57. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  58. data/src/core/credentials/call/jwt_util.cc +70 -0
  59. data/src/core/credentials/call/jwt_util.h +32 -0
  60. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  61. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  62. data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
  63. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  64. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
  65. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  66. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  67. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  68. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  69. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  70. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  71. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  72. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  73. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  74. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  75. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  76. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  77. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  78. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  79. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  80. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  81. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  82. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  83. data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
  84. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  85. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  86. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  87. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  88. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  89. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  90. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  91. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  93. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +165 -117
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  95. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  96. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  97. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
  99. data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
  100. data/src/core/ext/transport/chttp2/transport/frame.h +40 -2
  101. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  104. data/src/core/ext/transport/chttp2/transport/header_assembler.h +290 -0
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  108. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  109. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1233 -0
  110. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
  111. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  112. data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
  113. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  114. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  115. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  116. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  117. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  118. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +121 -0
  119. data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -0
  120. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  121. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  122. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  123. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  124. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  125. data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -5
  126. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  127. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
  128. data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -0
  129. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  130. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  131. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  132. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  133. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  134. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  135. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
  137. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  138. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  139. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  140. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  141. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  142. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  143. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  144. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  145. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  146. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
  147. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
  148. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  149. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  150. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  151. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  152. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  153. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
  154. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  155. data/src/core/filter/auth/auth_filters.h +2 -27
  156. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  157. data/src/core/filter/filter_args.h +9 -23
  158. data/src/core/filter/fused_filters.cc +154 -0
  159. data/src/core/handshaker/handshaker.cc +23 -14
  160. data/src/core/handshaker/handshaker.h +3 -0
  161. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  162. data/src/core/handshaker/security/legacy_secure_endpoint.cc +7 -6
  163. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  164. data/src/core/handshaker/security/secure_endpoint.cc +98 -38
  165. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  166. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  167. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  168. data/src/core/lib/channel/channel_args.cc +15 -0
  169. data/src/core/lib/channel/channel_args.h +3 -0
  170. data/src/core/lib/channel/channel_stack.cc +22 -23
  171. data/src/core/lib/channel/channel_stack.h +9 -7
  172. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  173. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  174. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  175. data/src/core/lib/channel/promise_based_filter.h +11 -10
  176. data/src/core/lib/debug/trace_impl.h +0 -1
  177. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  178. data/src/core/lib/event_engine/ares_resolver.h +51 -3
  179. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
  180. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
  181. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  182. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  183. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  184. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
  185. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  186. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  187. data/src/core/lib/event_engine/event_engine.cc +7 -0
  188. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  189. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  190. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +139 -169
  191. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
  192. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
  193. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
  194. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
  195. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
  196. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  197. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  198. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  199. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +30 -19
  200. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  201. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  202. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  203. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  204. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
  205. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  206. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
  207. data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
  208. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
  209. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  210. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  211. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  212. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  213. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  214. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  215. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  216. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  217. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  218. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +11 -171
  219. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  220. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  221. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  222. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  223. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  224. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  225. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  226. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  227. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  228. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  229. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  230. data/src/core/lib/event_engine/shim.cc +9 -0
  231. data/src/core/lib/event_engine/shim.h +3 -0
  232. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  233. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  234. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  235. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  236. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +6 -1
  237. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  238. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  239. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  240. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  241. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  242. data/src/core/lib/experiments/experiments.cc +165 -99
  243. data/src/core/lib/experiments/experiments.h +65 -52
  244. data/src/core/lib/iomgr/combiner.cc +1 -1
  245. data/src/core/lib/iomgr/endpoint.cc +4 -3
  246. data/src/core/lib/iomgr/endpoint.h +7 -4
  247. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  248. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  249. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  250. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  251. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  252. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  253. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  254. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  255. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  256. data/src/core/lib/iomgr/tcp_posix.cc +15 -9
  257. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  258. data/src/core/lib/promise/activity.h +3 -2
  259. data/src/core/lib/promise/arena_promise.h +23 -7
  260. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  261. data/src/core/lib/promise/detail/promise_like.h +118 -11
  262. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  263. data/src/core/lib/promise/detail/seq_state.h +687 -548
  264. data/src/core/lib/promise/if.h +20 -0
  265. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  266. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  267. data/src/core/lib/promise/loop.h +65 -3
  268. data/src/core/lib/promise/map.h +24 -0
  269. data/src/core/lib/promise/match_promise.h +103 -0
  270. data/src/core/lib/promise/mpsc.cc +425 -0
  271. data/src/core/lib/promise/mpsc.h +490 -0
  272. data/src/core/lib/promise/party.cc +55 -6
  273. data/src/core/lib/promise/party.h +68 -3
  274. data/src/core/lib/promise/poll.h +10 -0
  275. data/src/core/lib/promise/race.h +31 -0
  276. data/src/core/lib/promise/seq.h +4 -1
  277. data/src/core/lib/promise/status_flag.h +7 -0
  278. data/src/core/lib/promise/try_seq.h +4 -1
  279. data/src/core/lib/promise/wait_set.cc +28 -0
  280. data/src/core/lib/promise/wait_set.h +86 -0
  281. data/src/core/lib/resource_quota/arena.h +19 -0
  282. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  283. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  284. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  285. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  286. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  287. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  288. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  289. data/src/core/lib/slice/slice.h +5 -0
  290. data/src/core/lib/surface/call.cc +5 -5
  291. data/src/core/lib/surface/call.h +6 -5
  292. data/src/core/lib/surface/channel_create.cc +88 -13
  293. data/src/core/lib/surface/channel_create.h +4 -0
  294. data/src/core/lib/surface/channel_init.cc +164 -47
  295. data/src/core/lib/surface/channel_init.h +64 -1
  296. data/src/core/lib/surface/completion_queue.cc +2 -4
  297. data/src/core/lib/surface/filter_stack_call.cc +19 -10
  298. data/src/core/lib/surface/init.cc +6 -15
  299. data/src/core/lib/surface/legacy_channel.cc +3 -5
  300. data/src/core/lib/surface/legacy_channel.h +3 -1
  301. data/src/core/lib/surface/version.cc +2 -2
  302. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  303. data/src/core/lib/transport/promise_endpoint.h +307 -0
  304. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  305. data/src/core/load_balancing/delegating_helper.h +2 -3
  306. data/src/core/load_balancing/endpoint_list.cc +29 -2
  307. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  308. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  309. data/src/core/load_balancing/health_check_client.cc +1 -5
  310. data/src/core/load_balancing/lb_policy.h +1 -3
  311. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  312. data/src/core/load_balancing/pick_first/pick_first.cc +15 -5
  313. data/src/core/load_balancing/xds/cds.cc +10 -1
  314. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  315. data/src/core/net/socket_mutator.cc +19 -0
  316. data/src/core/net/socket_mutator.h +25 -0
  317. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  318. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  319. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  320. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  321. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  322. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  323. data/src/core/resolver/xds/xds_config.cc +6 -3
  324. data/src/core/resolver/xds/xds_config.h +9 -4
  325. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -7
  326. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  327. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  328. data/src/core/server/server.cc +84 -13
  329. data/src/core/server/server.h +21 -2
  330. data/src/core/server/server_call_tracer_filter.cc +0 -66
  331. data/src/core/server/server_call_tracer_filter.h +64 -0
  332. data/src/core/server/server_config_selector_filter.cc +1 -1
  333. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  334. data/src/core/service_config/service_config.h +1 -1
  335. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  336. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  337. data/src/core/service_config/service_config_impl.h +1 -1
  338. data/src/core/telemetry/call_tracer.cc +20 -14
  339. data/src/core/telemetry/call_tracer.h +22 -17
  340. data/src/core/telemetry/context_list_entry.cc +38 -0
  341. data/src/core/telemetry/context_list_entry.h +42 -12
  342. data/src/core/telemetry/metrics.h +8 -8
  343. data/src/core/telemetry/stats_data.cc +369 -343
  344. data/src/core/telemetry/stats_data.h +341 -244
  345. data/src/core/telemetry/tcp_tracer.h +1 -1
  346. data/src/core/transport/auth_context.cc +20 -0
  347. data/src/core/transport/auth_context.h +4 -0
  348. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  349. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  350. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  351. data/src/core/tsi/fake_transport_security.cc +17 -0
  352. data/src/core/tsi/ssl_transport_security.cc +205 -32
  353. data/src/core/tsi/ssl_transport_security.h +19 -10
  354. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  355. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  356. data/src/core/tsi/transport_security_grpc.cc +8 -0
  357. data/src/core/tsi/transport_security_grpc.h +15 -0
  358. data/src/core/util/backoff.cc +1 -5
  359. data/src/core/util/backoff.h +1 -0
  360. data/src/core/util/down_cast.h +1 -1
  361. data/src/core/util/function_signature.h +15 -1
  362. data/src/core/util/http_client/httpcli.cc +12 -5
  363. data/src/core/util/http_client/httpcli.h +4 -1
  364. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  365. data/src/core/util/latent_see.cc +178 -146
  366. data/src/core/util/latent_see.h +249 -189
  367. data/src/core/util/log.cc +4 -0
  368. data/src/core/util/memory_usage.h +268 -0
  369. data/src/core/util/per_cpu.cc +2 -0
  370. data/src/core/util/per_cpu.h +7 -0
  371. data/src/core/util/shared_bit_gen.h +20 -0
  372. data/src/core/util/single_set_ptr.h +7 -4
  373. data/src/core/util/upb_utils.h +42 -0
  374. data/src/core/util/uri.cc +3 -2
  375. data/src/core/util/useful.h +144 -2
  376. data/src/core/util/wait_for_single_owner.cc +31 -0
  377. data/src/core/util/wait_for_single_owner.h +24 -0
  378. data/src/core/util/windows/directory_reader.cc +1 -0
  379. data/src/core/util/windows/thd.cc +1 -3
  380. data/src/core/util/work_serializer.cc +1 -1
  381. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  382. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  383. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  384. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  385. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  386. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  387. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  388. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  389. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  390. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  391. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  392. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  393. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  394. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  395. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  396. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  397. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  398. data/src/core/xds/xds_client/xds_client.cc +26 -5
  399. data/src/ruby/ext/grpc/extconf.rb +2 -0
  400. data/src/ruby/ext/grpc/rb_call.c +1 -8
  401. data/src/ruby/ext/grpc/rb_channel.c +70 -557
  402. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  403. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  404. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  405. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  406. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  407. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  408. data/src/ruby/ext/grpc/rb_server.c +31 -50
  409. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  410. data/src/ruby/lib/grpc/version.rb +1 -1
  411. data/src/ruby/spec/core_spec.rb +22 -0
  412. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  413. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  414. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  415. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  416. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  417. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  418. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  419. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  420. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  421. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  422. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  423. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  424. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  425. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  426. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  427. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  428. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  429. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  430. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  431. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  432. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  433. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  434. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  435. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  436. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  437. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  438. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  439. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  440. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  441. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  442. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  443. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  444. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  445. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  446. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  447. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  448. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  449. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  450. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  451. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  452. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  453. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  454. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  455. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  456. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  457. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  458. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  459. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  460. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  461. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  462. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  463. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  464. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  470. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  471. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  474. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  475. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  476. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  477. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  478. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  479. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  480. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  481. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  482. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  483. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  484. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  485. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  486. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  487. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  489. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  490. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  491. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  492. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  493. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  494. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  495. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  496. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  497. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  498. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  499. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  500. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  501. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  502. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  503. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  504. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  505. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  506. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  507. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  508. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  509. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  510. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  511. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  512. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  513. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  514. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  515. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  516. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  517. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  518. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  519. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  520. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  521. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  522. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  523. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  524. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  525. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  526. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  527. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  528. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  529. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  530. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  531. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  532. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  533. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  534. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  535. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  536. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  537. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  538. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  539. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  540. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  541. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  542. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  543. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  544. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  545. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  546. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  547. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  548. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  549. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  550. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  551. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  552. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  553. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  554. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  555. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  556. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  557. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  558. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  559. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  560. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  561. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  562. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  563. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  564. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  565. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  566. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  567. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  568. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  569. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  570. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  571. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  572. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  573. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  574. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  575. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  576. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  577. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  579. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  580. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  581. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  582. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  583. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  584. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  585. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  586. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  587. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  588. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  589. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  590. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  591. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  592. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  593. data/third_party/cares/cares/include/ares.h +925 -460
  594. data/third_party/cares/cares/include/ares_dns.h +86 -71
  595. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  596. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  597. data/third_party/cares/cares/include/ares_version.h +37 -14
  598. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  599. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  600. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  601. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  602. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  603. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  604. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  605. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  606. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  607. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  608. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  609. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  610. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  611. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  612. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  613. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  614. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  615. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  616. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  617. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  618. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  619. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  620. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  621. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  622. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  623. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  624. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  625. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  626. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  627. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  628. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  629. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  630. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  631. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  632. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  633. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  634. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  635. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  636. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  637. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  638. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  639. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  640. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  641. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  642. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  643. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  644. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  645. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  646. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  647. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  648. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  649. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  650. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  651. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  652. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  653. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  654. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  655. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  656. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  657. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  658. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  659. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  660. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  661. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  662. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  663. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  664. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  665. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  666. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  667. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  668. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  669. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  670. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  671. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  672. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  673. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  674. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  675. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  676. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  677. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  678. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  679. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  680. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  681. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  682. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  683. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  684. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  685. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  686. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  687. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  688. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  689. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  690. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  691. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  692. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  693. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  694. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  695. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  696. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  697. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  698. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  699. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  700. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  701. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  702. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  703. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  704. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  705. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  706. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  707. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  708. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  709. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  710. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  711. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  712. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  713. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  714. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  715. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  716. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  717. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  718. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  719. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  720. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  721. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  722. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  723. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  724. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  725. metadata +192 -68
  726. data/src/core/lib/event_engine/forkable.cc +0 -105
  727. data/src/core/lib/event_engine/forkable.h +0 -67
  728. data/src/core/lib/iomgr/python_util.h +0 -46
  729. data/src/core/util/ring_buffer.h +0 -122
  730. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  731. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  732. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  733. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  734. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  735. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  736. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  737. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  738. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  739. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
  740. data/third_party/cares/cares/include/ares_rules.h +0 -125
  741. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  742. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  743. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  744. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  745. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  746. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  747. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  748. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  749. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  750. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  751. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  752. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  753. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  754. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  755. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  756. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  757. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  758. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  759. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  760. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  761. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  762. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  763. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  764. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  765. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  766. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  767. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  768. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  769. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  770. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  771. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  772. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  773. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  774. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  775. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  776. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  777. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  778. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  779. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  780. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  781. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  782. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  783. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  784. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  785. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  786. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -30,16 +30,19 @@
30
30
 
31
31
  #include <algorithm>
32
32
  #include <atomic>
33
+ #include <cstddef>
33
34
  #include <memory>
34
35
  #include <optional>
35
36
  #include <regex>
36
37
  #include <utility>
38
+ #include <vector>
37
39
 
38
40
  #include "absl/base/thread_annotations.h"
39
41
  #include "absl/log/check.h"
40
42
  #include "absl/log/log.h"
41
43
  #include "absl/status/status.h"
42
44
  #include "absl/strings/string_view.h"
45
+ #include "absl/types/span.h"
43
46
  #include "src/core/lib/debug/trace.h"
44
47
  #include "src/core/lib/experiments/experiments.h"
45
48
  #include "src/core/lib/iomgr/closure.h"
@@ -183,7 +186,13 @@ class FrameProtector : public RefCounted<FrameProtector> {
183
186
 
184
187
  absl::Status Unprotect(absl::Status read_status)
185
188
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(read_mu_) {
186
- GRPC_LATENT_SEE_INNER_SCOPE("unprotect");
189
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("unprotect");
190
+
191
+ if (shutdown_) {
192
+ return absl::CancelledError("secure endpoint shutdown");
193
+ }
194
+
195
+ GRPC_TRACE_LOG(secure_endpoint, INFO) << "Starting unprotect for " << this;
187
196
  bool keep_looping = false;
188
197
  tsi_result result = TSI_OK;
189
198
 
@@ -312,7 +321,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
312
321
 
313
322
  tsi_result Protect(grpc_slice_buffer* slices, int max_frame_size)
314
323
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_mu_) {
315
- GRPC_LATENT_SEE_INNER_SCOPE("protect");
324
+ if (shutdown_) return TSI_FAILED_PRECONDITION;
325
+
326
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("protect");
327
+ GRPC_TRACE_LOG(secure_endpoint, INFO) << "Starting protect for " << this;
316
328
  uint8_t* cur = GRPC_SLICE_START_PTR(write_staging_buffer_);
317
329
  uint8_t* end = GRPC_SLICE_END_PTR(write_staging_buffer_);
318
330
 
@@ -407,6 +419,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
407
419
  }
408
420
  // TODO(yangg) do different things according to the error type?
409
421
  if (result != TSI_OK) output_buffer_.Clear();
422
+
423
+ GRPC_TRACE_LOG(secure_endpoint, INFO)
424
+ << "Protect: " << this << " result: " << result;
425
+
410
426
  return result;
411
427
  }
412
428
 
@@ -414,7 +430,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
414
430
  return &output_buffer_;
415
431
  }
416
432
 
417
- void Shutdown() { memory_owner_.Reset(); }
433
+ void Shutdown() {
434
+ shutdown_ = true;
435
+ memory_owner_.Reset();
436
+ }
418
437
 
419
438
  private:
420
439
  struct tsi_frame_protector* const protector_;
@@ -436,6 +455,7 @@ class FrameProtector : public RefCounted<FrameProtector> {
436
455
  std::atomic<bool> has_posted_reclaimer_{false};
437
456
  int min_progress_size_ = 1;
438
457
  SliceBuffer protector_staging_buffer_;
458
+ bool shutdown_ = false;
439
459
  };
440
460
  } // namespace
441
461
  } // namespace grpc_core
@@ -567,14 +587,15 @@ static void on_write(void* user_data, grpc_error_handle error) {
567
587
  });
568
588
  }
569
589
 
570
- static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
571
- grpc_closure* cb, void* arg, int max_frame_size) {
572
- GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
590
+ static void endpoint_write(
591
+ grpc_endpoint* secure_ep, grpc_slice_buffer* slices, grpc_closure* cb,
592
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
593
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint write");
573
594
  secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
574
595
  tsi_result result;
575
596
  {
576
597
  grpc_core::MutexLock lock(ep->frame_protector.write_mu());
577
- result = ep->frame_protector.Protect(slices, max_frame_size);
598
+ result = ep->frame_protector.Protect(slices, args.max_frame_size());
578
599
  }
579
600
 
580
601
  if (result != TSI_OK) {
@@ -591,7 +612,7 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
591
612
  ep->write_cb = cb;
592
613
  grpc_endpoint_write(ep->wrapped_ep.get(),
593
614
  ep->frame_protector.output_buffer()->c_slice_buffer(),
594
- &ep->on_write, arg, max_frame_size);
615
+ &ep->on_write, std::move(args));
595
616
  }
596
617
 
597
618
  static void endpoint_destroy(grpc_endpoint* secure_ep) {
@@ -692,21 +713,59 @@ class SecureEndpoint final : public EventEngine::Endpoint {
692
713
  return impl_->QueryExtension(id);
693
714
  }
694
715
 
695
- std::vector<size_t> AllWriteMetrics() override {
696
- return impl_->AllWriteMetrics();
697
- }
698
-
699
- std::optional<absl::string_view> GetMetricName(size_t key) override {
700
- return impl_->GetMetricName(key);
701
- }
702
-
703
- std::optional<size_t> GetMetricKey(absl::string_view name) override {
704
- return impl_->GetMetricKey(name);
716
+ std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const override {
717
+ return std::make_shared<Impl::TelemetryInfo>(impl_->GetTelemetryInfo());
705
718
  }
706
719
 
707
720
  private:
708
721
  class Impl : public grpc_core::RefCounted<Impl> {
709
722
  public:
723
+ class TelemetryInfo : public EventEngine::Endpoint::TelemetryInfo {
724
+ public:
725
+ explicit TelemetryInfo(
726
+ std::shared_ptr<EventEngine::Endpoint::TelemetryInfo>
727
+ wrapped_telemetry_info)
728
+ : wrapped_telemetry_info_(std::move(wrapped_telemetry_info)) {}
729
+
730
+ std::vector<size_t> AllWriteMetrics() const override {
731
+ return wrapped_telemetry_info_
732
+ ? wrapped_telemetry_info_->AllWriteMetrics()
733
+ : std::vector<size_t>{};
734
+ }
735
+
736
+ std::optional<absl::string_view> GetMetricName(
737
+ size_t key) const override {
738
+ return wrapped_telemetry_info_
739
+ ? wrapped_telemetry_info_->GetMetricName(key)
740
+ : std::nullopt;
741
+ }
742
+
743
+ std::optional<size_t> GetMetricKey(
744
+ absl::string_view name) const override {
745
+ return wrapped_telemetry_info_
746
+ ? wrapped_telemetry_info_->GetMetricKey(name)
747
+ : std::nullopt;
748
+ }
749
+
750
+ std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetMetricsSet(
751
+ absl::Span<const size_t> keys) const override {
752
+ return wrapped_telemetry_info_
753
+ ? wrapped_telemetry_info_->GetMetricsSet(keys)
754
+ : nullptr;
755
+ }
756
+
757
+ std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetFullMetricsSet()
758
+ const override {
759
+ return wrapped_telemetry_info_
760
+ ? wrapped_telemetry_info_->GetFullMetricsSet()
761
+ : nullptr;
762
+ }
763
+
764
+ private:
765
+ std::shared_ptr<EventEngine::Endpoint::TelemetryInfo>
766
+ wrapped_telemetry_info_;
767
+ };
768
+
710
769
  Impl(std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
711
770
  wrapped_ep,
712
771
  struct tsi_frame_protector* protector,
@@ -748,7 +807,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
748
807
 
749
808
  bool Write(absl::AnyInvocable<void(absl::Status)> on_writable,
750
809
  SliceBuffer* data, WriteArgs args) {
751
- GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
810
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint write");
752
811
  tsi_result result;
753
812
  frame_protector_.TraceOp("Write", data->c_slice_buffer());
754
813
  if (grpc_core::IsSecureEndpointOffloadLargeWritesEnabled()) {
@@ -835,23 +894,18 @@ class SecureEndpoint final : public EventEngine::Endpoint {
835
894
  grpc_core::MutexLock read_lock(frame_protector_.read_mu());
836
895
  wrapped_ep = std::move(wrapped_ep_);
837
896
  frame_protector_.Shutdown();
897
+ GRPC_TRACE_LOG(secure_endpoint, INFO)
898
+ << "Shutdown for secure endpoint: " << this;
838
899
  }
839
900
 
840
- virtual std::vector<size_t> AllWriteMetrics() {
841
- return wrapped_ep_->AllWriteMetrics();
842
- }
843
-
844
- virtual std::optional<absl::string_view> GetMetricName(size_t key) {
845
- return wrapped_ep_->GetMetricName(key);
846
- }
847
-
848
- virtual std::optional<size_t> GetMetricKey(absl::string_view name) {
849
- return wrapped_ep_->GetMetricKey(name);
901
+ std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const {
902
+ return std::make_shared<Impl::TelemetryInfo>(
903
+ wrapped_ep_->GetTelemetryInfo());
850
904
  }
851
905
 
852
906
  private:
853
907
  bool MaybeFinishReadImmediately() {
854
- GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint maybe finish read");
908
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint maybe finish read");
855
909
  grpc_core::MutexLock lock(frame_protector_.read_mu());
856
910
  // If the read is large, since we got the bytes whilst still calling read,
857
911
  // offload the decryption to event engine.
@@ -882,7 +936,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
882
936
 
883
937
  static void FinishAsyncRead(grpc_core::RefCountedPtr<Impl> impl,
884
938
  absl::Status status) {
885
- GRPC_LATENT_SEE_PARENT_SCOPE("secure endpoint finish async read");
939
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure endpoint finish async read");
886
940
  {
887
941
  grpc_core::MutexLock lock(impl->frame_protector_.read_mu());
888
942
  if (status.ok() && impl->wrapped_ep_ == nullptr) {
@@ -917,7 +971,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
917
971
  };
918
972
 
919
973
  static void FinishAsyncWrite(grpc_core::RefCountedPtr<Impl> impl) {
920
- GRPC_LATENT_SEE_PARENT_SCOPE("secure endpoint finish async write");
974
+ GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure endpoint finish async write");
921
975
  tsi_result result;
922
976
  std::unique_ptr<SliceBuffer> data;
923
977
  WriteArgs args;
@@ -1022,12 +1076,18 @@ grpc_core::OrphanablePtr<grpc_endpoint> grpc_secure_endpoint_create(
1022
1076
  event_engine_endpoint = grpc_event_engine::experimental::
1023
1077
  grpc_take_wrapped_event_engine_endpoint(to_wrap.release());
1024
1078
  CHECK(event_engine_endpoint != nullptr);
1025
- return grpc_core::OrphanablePtr<grpc_endpoint>(
1026
- grpc_event_engine::experimental::grpc_event_engine_endpoint_create(
1027
- std::make_unique<grpc_event_engine::experimental::SecureEndpoint>(
1028
- std::move(event_engine_endpoint), protector,
1029
- zero_copy_protector, leftover_slices, leftover_nslices,
1030
- channel_args)));
1079
+ if (grpc_core::IsPipelinedReadSecureEndpointEnabled()) {
1080
+ return grpc_pipelined_secure_endpoint_create(
1081
+ protector, zero_copy_protector, std::move(event_engine_endpoint),
1082
+ leftover_slices, channel_args, leftover_nslices);
1083
+ } else {
1084
+ return grpc_core::OrphanablePtr<grpc_endpoint>(
1085
+ grpc_event_engine::experimental::grpc_event_engine_endpoint_create(
1086
+ std::make_unique<grpc_event_engine::experimental::SecureEndpoint>(
1087
+ std::move(event_engine_endpoint), protector,
1088
+ zero_copy_protector, leftover_slices, leftover_nslices,
1089
+ channel_args)));
1090
+ }
1031
1091
  }
1032
1092
  return grpc_core::MakeOrphanable<secure_endpoint>(
1033
1093
  &vtable, protector, zero_copy_protector, std::move(to_wrap),
@@ -55,4 +55,12 @@ grpc_core::OrphanablePtr<grpc_endpoint> grpc_legacy_secure_endpoint_create(
55
55
  grpc_slice* leftover_slices, const grpc_channel_args* channel_args,
56
56
  size_t leftover_nslices);
57
57
 
58
+ grpc_core::OrphanablePtr<grpc_endpoint> grpc_pipelined_secure_endpoint_create(
59
+ struct tsi_frame_protector* protector,
60
+ struct tsi_zero_copy_grpc_protector* zero_copy_protector,
61
+ std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
62
+ to_wrap,
63
+ grpc_slice* leftover_slices, const grpc_core::ChannelArgs& channel_args,
64
+ size_t leftover_nslices);
65
+
58
66
  #endif // GRPC_SRC_CORE_HANDSHAKER_SECURITY_SECURE_ENDPOINT_H
@@ -373,13 +373,16 @@ grpc_error_handle SecurityHandshaker::OnHandshakeNextDoneLocked(
373
373
  outgoing_.Clear();
374
374
  outgoing_.Append(Slice::FromCopiedBuffer(
375
375
  reinterpret_cast<const char*>(bytes_to_send), bytes_to_send_size));
376
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs
377
+ write_args;
378
+ write_args.set_max_frame_size(INT_MAX);
376
379
  grpc_endpoint_write(
377
380
  args_->endpoint.get(), outgoing_.c_slice_buffer(),
378
381
  NewClosure(
379
382
  [self = RefAsSubclass<SecurityHandshaker>()](absl::Status status) {
380
383
  self->OnHandshakeDataSentToPeerFnScheduler(std::move(status));
381
384
  }),
382
- nullptr, /*max_frame_size=*/INT_MAX);
385
+ std::move(write_args));
383
386
  } else if (handshaker_result == nullptr) {
384
387
  // There is nothing to send, but need to read from peer.
385
388
  grpc_endpoint_read(
@@ -119,11 +119,17 @@ void TCPConnectHandshaker::Shutdown(absl::Status /*error*/) {
119
119
  void TCPConnectHandshaker::DoHandshake(
120
120
  HandshakerArgs* args,
121
121
  absl::AnyInvocable<void(absl::Status)> on_handshake_done) {
122
+ // If the endpoint already exists, skip the TCP connection step.
123
+ // In this case, the handshaker becomes a no-op, it simply completes the
124
+ // handshake successfully without performing any action.
125
+ if (args->endpoint != nullptr) {
126
+ InvokeOnHandshakeDone(args, std::move(on_handshake_done), absl::OkStatus());
127
+ return;
128
+ }
122
129
  {
123
130
  MutexLock lock(&mu_);
124
131
  on_handshake_done_ = std::move(on_handshake_done);
125
132
  }
126
- CHECK_EQ(args->endpoint.get(), nullptr);
127
133
  args_ = args;
128
134
  absl::string_view resolved_address_text =
129
135
  args->args.GetString(GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS).value();
@@ -291,6 +291,21 @@ absl::string_view ChannelArgs::Value::ToString(
291
291
  return backing_strings.back();
292
292
  }
293
293
 
294
+ channelz::PropertyList ChannelArgs::ToPropertyList() const {
295
+ channelz::PropertyList result;
296
+ args_.ForEach(
297
+ [&result](const RefCountedStringValue& key, const Value& value) {
298
+ if (auto i = value.GetIfInt(); i.has_value()) {
299
+ result.Set(key.as_string_view(), *i);
300
+ } else if (auto s = value.GetIfString(); s != nullptr) {
301
+ result.Set(key.as_string_view(), s->as_string_view());
302
+ } else if (auto p = value.GetIfPointer(); p != nullptr) {
303
+ result.Set(key.as_string_view(), "POINTER");
304
+ }
305
+ });
306
+ return result;
307
+ }
308
+
294
309
  std::string ChannelArgs::ToString() const {
295
310
  std::vector<absl::string_view> strings;
296
311
  std::list<std::string> backing_strings;
@@ -35,6 +35,7 @@
35
35
 
36
36
  #include "absl/meta/type_traits.h"
37
37
  #include "absl/strings/string_view.h"
38
+ #include "src/core/channelz/property_list.h"
38
39
  #include "src/core/lib/surface/channel_stack_type.h"
39
40
  #include "src/core/util/avl.h"
40
41
  #include "src/core/util/debug_location.h"
@@ -507,6 +508,8 @@ class ChannelArgs {
507
508
  GRPC_MUST_USE_RESULT ChannelArgs Remove(absl::string_view name) const;
508
509
  bool Contains(absl::string_view name) const;
509
510
 
511
+ channelz::PropertyList ToPropertyList() const;
512
+
510
513
  GRPC_MUST_USE_RESULT ChannelArgs
511
514
  RemoveAllKeysWithPrefix(absl::string_view prefix) const;
512
515
 
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include "absl/log/check.h"
28
28
  #include "absl/log/log.h"
29
+ #include "src/core/channelz/property_list.h"
29
30
  #include "src/core/lib/channel/channel_args.h"
30
31
  #include "src/core/lib/channel/channel_fwd.h"
31
32
  #include "src/core/lib/surface/channel_init.h"
@@ -114,8 +115,7 @@ grpc_error_handle grpc_channel_stack_init(
114
115
  int initial_refs, grpc_iomgr_cb_func destroy, void* destroy_arg,
115
116
  const grpc_channel_filter** filters, size_t filter_count,
116
117
  const grpc_core::ChannelArgs& channel_args, const char* name,
117
- grpc_channel_stack* stack, const grpc_core::Blackboard* old_blackboard,
118
- grpc_core::Blackboard* new_blackboard) {
118
+ grpc_channel_stack* stack, const grpc_core::Blackboard* blackboard) {
119
119
  if (GRPC_TRACE_FLAG_ENABLED(channel_stack)) {
120
120
  LOG(INFO) << "CHANNEL_STACK: init " << name;
121
121
  for (size_t i = 0; i < filter_count; i++) {
@@ -144,8 +144,7 @@ grpc_error_handle grpc_channel_stack_init(
144
144
  sizeof(grpc_channel_element));
145
145
 
146
146
  // init per-filter data
147
- args.old_blackboard = old_blackboard;
148
- args.new_blackboard = new_blackboard;
147
+ args.blackboard = blackboard;
149
148
  grpc_error_handle first_error;
150
149
  for (i = 0; i < filter_count; i++) {
151
150
  args.channel_stack = stack;
@@ -177,28 +176,28 @@ grpc_error_handle grpc_channel_stack_init(
177
176
  }
178
177
 
179
178
  void grpc_channel_stack::ChannelStackDataSource::AddData(
180
- grpc_core::channelz::DataSink& sink) {
181
- using grpc_core::Json;
182
- Json::Object output;
183
- output["type"] = Json::FromString("v1");
184
- Json::Array elements;
179
+ grpc_core::channelz::DataSink sink) {
185
180
  grpc_channel_stack* channel_stack = reinterpret_cast<grpc_channel_stack*>(
186
181
  reinterpret_cast<char*>(this) -
187
182
  offsetof(grpc_channel_stack, channelz_data_source));
188
- output["call_stack_size"] = Json::FromNumber(channel_stack->call_stack_size);
189
- grpc_channel_element* elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
190
- elements.reserve(channel_stack->count);
191
- for (size_t i = 0; i < channel_stack->count; i++) {
192
- grpc_channel_element& e = elems[i];
193
- Json::Object element;
194
- element["type"] = Json::FromString(std::string(e.filter->name.name()));
195
- element["call_data_size"] = Json::FromNumber(e.filter->sizeof_call_data);
196
- element["channel_data_size"] =
197
- Json::FromNumber(e.filter->sizeof_channel_data);
198
- elements.emplace_back(Json::FromObject(std::move(element)));
199
- }
200
- output["elements"] = Json::FromArray(std::move(elements));
201
- sink.AddAdditionalInfo("channelStack", std::move(output));
183
+ sink.AddData(
184
+ "channel_stack",
185
+ grpc_core::channelz::PropertyList()
186
+ .Set("type", "v1")
187
+ .Set("elements", [channel_stack]() {
188
+ grpc_core::channelz::PropertyTable elements;
189
+ grpc_channel_element* elems =
190
+ CHANNEL_ELEMS_FROM_STACK(channel_stack);
191
+ for (size_t i = 0; i < channel_stack->count; i++) {
192
+ grpc_channel_element& e = elems[i];
193
+ elements.AppendRow(
194
+ grpc_core::channelz::PropertyList()
195
+ .Set("type", e.filter->name.name())
196
+ .Set("call_data_size", e.filter->sizeof_call_data)
197
+ .Set("channel_data_size", e.filter->sizeof_channel_data));
198
+ }
199
+ return elements;
200
+ }()));
202
201
  }
203
202
 
204
203
  void grpc_channel_stack_destroy(grpc_channel_stack* stack) {
@@ -75,8 +75,7 @@ struct grpc_channel_element_args {
75
75
  grpc_core::ChannelArgs channel_args;
76
76
  int is_first;
77
77
  int is_last;
78
- const grpc_core::Blackboard* old_blackboard;
79
- grpc_core::Blackboard* new_blackboard;
78
+ const grpc_core::Blackboard* blackboard;
80
79
  };
81
80
  struct grpc_call_element_args {
82
81
  grpc_call_stack* call_stack;
@@ -190,9 +189,13 @@ struct grpc_channel_stack {
190
189
 
191
190
  class ChannelStackDataSource final : public grpc_core::channelz::DataSource {
192
191
  public:
193
- using grpc_core::channelz::DataSource::DataSource;
194
- ~ChannelStackDataSource() { ResetDataSource(); }
195
- void AddData(grpc_core::channelz::DataSink& sink) override;
192
+ explicit ChannelStackDataSource(
193
+ grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode> node)
194
+ : DataSource(std::move(node)) {
195
+ SourceConstructed();
196
+ }
197
+ ~ChannelStackDataSource() { SourceDestructing(); }
198
+ void AddData(grpc_core::channelz::DataSink sink) override;
196
199
  };
197
200
 
198
201
  grpc_core::ManualConstructor<ChannelStackDataSource> channelz_data_source;
@@ -269,8 +272,7 @@ grpc_error_handle grpc_channel_stack_init(
269
272
  const grpc_channel_filter** filters, size_t filter_count,
270
273
  const grpc_core::ChannelArgs& args, const char* name,
271
274
  grpc_channel_stack* stack,
272
- const grpc_core::Blackboard* old_blackboard = nullptr,
273
- grpc_core::Blackboard* new_blackboard = nullptr);
275
+ const grpc_core::Blackboard* blackboard = nullptr);
274
276
  // Destroy a channel stack
275
277
  void grpc_channel_stack_destroy(grpc_channel_stack* stack);
276
278
 
@@ -75,7 +75,7 @@ ChannelStackBuilderImpl::Build() {
75
75
  gpr_free(stk);
76
76
  },
77
77
  channel_stack, stack.data(), stack.size(), channel_args(), name(),
78
- channel_stack, old_blackboard_, new_blackboard_);
78
+ channel_stack, blackboard_);
79
79
 
80
80
  if (!error.ok()) {
81
81
  grpc_channel_stack_destroy(channel_stack);
@@ -35,11 +35,7 @@ class ChannelStackBuilderImpl final : public ChannelStackBuilder {
35
35
  public:
36
36
  using ChannelStackBuilder::ChannelStackBuilder;
37
37
 
38
- void SetBlackboards(const Blackboard* old_blackboard,
39
- Blackboard* new_blackboard) {
40
- old_blackboard_ = old_blackboard;
41
- new_blackboard_ = new_blackboard;
42
- }
38
+ void SetBlackboard(const Blackboard* blackboard) { blackboard_ = blackboard; }
43
39
 
44
40
  // Build the channel stack.
45
41
  // After success, *result holds the new channel stack,
@@ -49,8 +45,7 @@ class ChannelStackBuilderImpl final : public ChannelStackBuilder {
49
45
  absl::StatusOr<RefCountedPtr<grpc_channel_stack>> Build() override;
50
46
 
51
47
  private:
52
- const Blackboard* old_blackboard_ = nullptr;
53
- Blackboard* new_blackboard_ = nullptr;
48
+ const Blackboard* blackboard_ = nullptr;
54
49
  };
55
50
 
56
51
  } // namespace grpc_core
@@ -242,8 +242,7 @@ void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
242
242
  ///////////////////////////////////////////////////////////////////////////////
243
243
  // BaseCallData::Flusher
244
244
 
245
- BaseCallData::Flusher::Flusher(BaseCallData* call, latent_see::Metadata* desc)
246
- : latent_see::InnerScope(desc), call_(call) {
245
+ BaseCallData::Flusher::Flusher(BaseCallData* call) : call_(call) {
247
246
  GRPC_CALL_STACK_REF(call_->call_stack(), "flusher");
248
247
  }
249
248
 
@@ -395,7 +394,7 @@ bool BaseCallData::SendMessage::IsIdle() const {
395
394
  }
396
395
 
397
396
  void BaseCallData::SendMessage::OnComplete(absl::Status status) {
398
- Flusher flusher(base_, GRPC_LATENT_SEE_METADATA("SendMessage::OnComplete"));
397
+ Flusher flusher(base_);
399
398
  GRPC_TRACE_LOG(channel, INFO)
400
399
  << base_->LogTag() << " SendMessage.OnComplete st=" << StateString(state_)
401
400
  << " status=" << status;
@@ -705,8 +704,7 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
705
704
  break;
706
705
  }
707
706
  completed_status_ = status;
708
- Flusher flusher(base_,
709
- GRPC_LATENT_SEE_METADATA("ReceiveMessage::OnComplete"));
707
+ Flusher flusher(base_);
710
708
  ScopedContext ctx(base_);
711
709
  base_->WakeInsideCombiner(&flusher);
712
710
  }
@@ -1220,9 +1218,7 @@ class ClientCallData::PollContext {
1220
1218
  auto* next_poll = static_cast<NextPoll*>(p);
1221
1219
  {
1222
1220
  ScopedContext ctx(next_poll->call_data);
1223
- Flusher flusher(next_poll->call_data,
1224
- GRPC_LATENT_SEE_METADATA(
1225
- "ClientCallData::PollContext::~PollContext"));
1221
+ Flusher flusher(next_poll->call_data);
1226
1222
  next_poll->call_data->WakeInsideCombiner(&flusher);
1227
1223
  }
1228
1224
  GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
@@ -1351,7 +1347,7 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1351
1347
  // Fake out the activity based context.
1352
1348
  ScopedContext context(this);
1353
1349
  CapturedBatch batch(b);
1354
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA("ClientCallData::StartBatch"));
1350
+ Flusher flusher(this);
1355
1351
 
1356
1352
  GRPC_TRACE_LOG(channel, INFO) << LogTag() << " StartBatch " << DebugString();
1357
1353
 
@@ -1557,8 +1553,7 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1557
1553
  << DebugString() << " error:" << error.ToString()
1558
1554
  << " md:" << recv_initial_metadata_->metadata->DebugString();
1559
1555
  ScopedContext context(this);
1560
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA(
1561
- "ClientCallData::RecvInitialMetadataReady"));
1556
+ Flusher flusher(this);
1562
1557
  if (!error.ok()) {
1563
1558
  switch (recv_initial_metadata_->state) {
1564
1559
  case RecvInitialMetadata::kHookedWaitingForPipe:
@@ -1744,8 +1739,7 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
1744
1739
  }
1745
1740
 
1746
1741
  void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
1747
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA(
1748
- "ClientCallData::RecvTrailingMetadataReady"));
1742
+ Flusher flusher(this);
1749
1743
  GRPC_TRACE_LOG(channel, INFO)
1750
1744
  << LogTag() << " ClientCallData.RecvTrailingMetadataReady "
1751
1745
  << "recv_trailing_state=" << StateString(recv_trailing_state_)
@@ -1796,12 +1790,12 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
1796
1790
 
1797
1791
  // Wakeup and poll the promise if appropriate.
1798
1792
  void ClientCallData::WakeInsideCombiner(Flusher* flusher) {
1799
- GRPC_LATENT_SEE_INNER_SCOPE("ClientCallData::WakeInsideCombiner");
1793
+ GRPC_LATENT_SEE_SCOPE("ClientCallData::WakeInsideCombiner");
1800
1794
  PollContext(this, flusher).Run();
1801
1795
  }
1802
1796
 
1803
1797
  void ClientCallData::OnWakeup() {
1804
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA("ClientCallData::OnWakeup"));
1798
+ Flusher flusher(this);
1805
1799
  ScopedContext context(this);
1806
1800
  WakeInsideCombiner(&flusher);
1807
1801
  }
@@ -1877,9 +1871,7 @@ class ServerCallData::PollContext {
1877
1871
  auto run = [](void* p, grpc_error_handle) {
1878
1872
  auto* next_poll = static_cast<NextPoll*>(p);
1879
1873
  {
1880
- Flusher flusher(next_poll->call_data,
1881
- GRPC_LATENT_SEE_METADATA(
1882
- "ServerCallData::PollContext::~PollContext"));
1874
+ Flusher flusher(next_poll->call_data);
1883
1875
  ScopedContext context(next_poll->call_data);
1884
1876
  next_poll->call_data->WakeInsideCombiner(&flusher);
1885
1877
  }
@@ -1983,7 +1975,7 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1983
1975
  // Fake out the activity based context.
1984
1976
  ScopedContext context(this);
1985
1977
  CapturedBatch batch(b);
1986
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA("ServerCallData::StartBatch"));
1978
+ Flusher flusher(this);
1987
1979
  bool wake = false;
1988
1980
 
1989
1981
  GRPC_TRACE_LOG(channel, INFO) << LogTag() << " StartBatch: " << DebugString();
@@ -2272,8 +2264,7 @@ void ServerCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
2272
2264
  GRPC_TRACE_LOG(channel, INFO)
2273
2265
  << LogTag() << ": RecvTrailingMetadataReady error=" << error
2274
2266
  << " md=" << recv_trailing_metadata_->DebugString();
2275
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA(
2276
- "ServerCallData::RecvTrailingMetadataReady"));
2267
+ Flusher flusher(this);
2277
2268
  PollContext poll_ctx(this, &flusher);
2278
2269
  Completed(error, recv_trailing_metadata_->get(GrpcTarPit()).has_value(),
2279
2270
  &flusher);
@@ -2287,8 +2278,7 @@ void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
2287
2278
  }
2288
2279
 
2289
2280
  void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
2290
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA(
2291
- "ServerCallData::RecvInitialMetadataReady"));
2281
+ Flusher flusher(this);
2292
2282
  GRPC_TRACE_LOG(channel, INFO)
2293
2283
  << LogTag() << ": RecvInitialMetadataReady " << error;
2294
2284
  CHECK(recv_initial_state_ == RecvInitialState::kForwarded);
@@ -2351,7 +2341,7 @@ std::string ServerCallData::DebugString() const {
2351
2341
 
2352
2342
  // Wakeup and poll the promise if appropriate.
2353
2343
  void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2354
- GRPC_LATENT_SEE_INNER_SCOPE("ServerCallData::WakeInsideCombiner");
2344
+ GRPC_LATENT_SEE_SCOPE("ServerCallData::WakeInsideCombiner");
2355
2345
  PollContext poll_ctx(this, flusher);
2356
2346
  GRPC_TRACE_LOG(channel, INFO)
2357
2347
  << LogTag() << ": WakeInsideCombiner " << DebugString();
@@ -2503,7 +2493,7 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2503
2493
  }
2504
2494
 
2505
2495
  void ServerCallData::OnWakeup() {
2506
- Flusher flusher(this, GRPC_LATENT_SEE_METADATA("ServerCallData::OnWakeup"));
2496
+ Flusher flusher(this);
2507
2497
  ScopedContext context(this);
2508
2498
  WakeInsideCombiner(&flusher);
2509
2499
  }