grpc 1.73.0 → 1.74.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 (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  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/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -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,6 +186,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
183
186
 
184
187
  absl::Status Unprotect(absl::Status read_status)
185
188
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(read_mu_) {
189
+ if (shutdown_) {
190
+ return absl::CancelledError("secure endpoint shutdown");
191
+ }
192
+
186
193
  GRPC_LATENT_SEE_INNER_SCOPE("unprotect");
187
194
  bool keep_looping = false;
188
195
  tsi_result result = TSI_OK;
@@ -312,6 +319,8 @@ class FrameProtector : public RefCounted<FrameProtector> {
312
319
 
313
320
  tsi_result Protect(grpc_slice_buffer* slices, int max_frame_size)
314
321
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_mu_) {
322
+ if (shutdown_) return TSI_FAILED_PRECONDITION;
323
+
315
324
  GRPC_LATENT_SEE_INNER_SCOPE("protect");
316
325
  uint8_t* cur = GRPC_SLICE_START_PTR(write_staging_buffer_);
317
326
  uint8_t* end = GRPC_SLICE_END_PTR(write_staging_buffer_);
@@ -414,7 +423,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
414
423
  return &output_buffer_;
415
424
  }
416
425
 
417
- void Shutdown() { memory_owner_.Reset(); }
426
+ void Shutdown() {
427
+ shutdown_ = true;
428
+ memory_owner_.Reset();
429
+ }
418
430
 
419
431
  private:
420
432
  struct tsi_frame_protector* const protector_;
@@ -436,6 +448,7 @@ class FrameProtector : public RefCounted<FrameProtector> {
436
448
  std::atomic<bool> has_posted_reclaimer_{false};
437
449
  int min_progress_size_ = 1;
438
450
  SliceBuffer protector_staging_buffer_;
451
+ bool shutdown_ = false;
439
452
  };
440
453
  } // namespace
441
454
  } // namespace grpc_core
@@ -567,14 +580,15 @@ static void on_write(void* user_data, grpc_error_handle error) {
567
580
  });
568
581
  }
569
582
 
570
- static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
571
- grpc_closure* cb, void* arg, int max_frame_size) {
583
+ static void endpoint_write(
584
+ grpc_endpoint* secure_ep, grpc_slice_buffer* slices, grpc_closure* cb,
585
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
572
586
  GRPC_LATENT_SEE_INNER_SCOPE("secure_endpoint write");
573
587
  secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
574
588
  tsi_result result;
575
589
  {
576
590
  grpc_core::MutexLock lock(ep->frame_protector.write_mu());
577
- result = ep->frame_protector.Protect(slices, max_frame_size);
591
+ result = ep->frame_protector.Protect(slices, args.max_frame_size());
578
592
  }
579
593
 
580
594
  if (result != TSI_OK) {
@@ -591,7 +605,7 @@ static void endpoint_write(grpc_endpoint* secure_ep, grpc_slice_buffer* slices,
591
605
  ep->write_cb = cb;
592
606
  grpc_endpoint_write(ep->wrapped_ep.get(),
593
607
  ep->frame_protector.output_buffer()->c_slice_buffer(),
594
- &ep->on_write, arg, max_frame_size);
608
+ &ep->on_write, std::move(args));
595
609
  }
596
610
 
597
611
  static void endpoint_destroy(grpc_endpoint* secure_ep) {
@@ -692,21 +706,59 @@ class SecureEndpoint final : public EventEngine::Endpoint {
692
706
  return impl_->QueryExtension(id);
693
707
  }
694
708
 
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);
709
+ std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const override {
710
+ return std::make_shared<Impl::TelemetryInfo>(impl_->GetTelemetryInfo());
705
711
  }
706
712
 
707
713
  private:
708
714
  class Impl : public grpc_core::RefCounted<Impl> {
709
715
  public:
716
+ class TelemetryInfo : public EventEngine::Endpoint::TelemetryInfo {
717
+ public:
718
+ explicit TelemetryInfo(
719
+ std::shared_ptr<EventEngine::Endpoint::TelemetryInfo>
720
+ wrapped_telemetry_info)
721
+ : wrapped_telemetry_info_(std::move(wrapped_telemetry_info)) {}
722
+
723
+ std::vector<size_t> AllWriteMetrics() const override {
724
+ return wrapped_telemetry_info_
725
+ ? wrapped_telemetry_info_->AllWriteMetrics()
726
+ : std::vector<size_t>{};
727
+ }
728
+
729
+ std::optional<absl::string_view> GetMetricName(
730
+ size_t key) const override {
731
+ return wrapped_telemetry_info_
732
+ ? wrapped_telemetry_info_->GetMetricName(key)
733
+ : std::nullopt;
734
+ }
735
+
736
+ std::optional<size_t> GetMetricKey(
737
+ absl::string_view name) const override {
738
+ return wrapped_telemetry_info_
739
+ ? wrapped_telemetry_info_->GetMetricKey(name)
740
+ : std::nullopt;
741
+ }
742
+
743
+ std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetMetricsSet(
744
+ absl::Span<const size_t> keys) const override {
745
+ return wrapped_telemetry_info_
746
+ ? wrapped_telemetry_info_->GetMetricsSet(keys)
747
+ : nullptr;
748
+ }
749
+
750
+ std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetFullMetricsSet()
751
+ const override {
752
+ return wrapped_telemetry_info_
753
+ ? wrapped_telemetry_info_->GetFullMetricsSet()
754
+ : nullptr;
755
+ }
756
+
757
+ private:
758
+ std::shared_ptr<EventEngine::Endpoint::TelemetryInfo>
759
+ wrapped_telemetry_info_;
760
+ };
761
+
710
762
  Impl(std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
711
763
  wrapped_ep,
712
764
  struct tsi_frame_protector* protector,
@@ -837,16 +889,9 @@ class SecureEndpoint final : public EventEngine::Endpoint {
837
889
  frame_protector_.Shutdown();
838
890
  }
839
891
 
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);
892
+ std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const {
893
+ return std::make_shared<Impl::TelemetryInfo>(
894
+ wrapped_ep_->GetTelemetryInfo());
850
895
  }
851
896
 
852
897
  private:
@@ -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
@@ -1979,11 +1979,11 @@ struct ChannelFilterWithFlagsMethods {
1979
1979
  static absl::Status InitChannelElem(grpc_channel_element* elem,
1980
1980
  grpc_channel_element_args* args) {
1981
1981
  CHECK(args->is_last == ((kFlags & kFilterIsLast) != 0));
1982
- auto status = F::Create(
1983
- args->channel_args,
1984
- ChannelFilter::Args(args->channel_stack, elem,
1985
- grpc_channel_stack_filter_instance_number,
1986
- args->old_blackboard, args->new_blackboard));
1982
+ auto status =
1983
+ F::Create(args->channel_args,
1984
+ ChannelFilter::Args(args->channel_stack, elem,
1985
+ grpc_channel_stack_filter_instance_number,
1986
+ args->blackboard));
1987
1987
  if (!status.ok()) {
1988
1988
  new (elem->channel_data) F*(nullptr);
1989
1989
  return absl_status_to_grpc_error(status.status());
@@ -75,7 +75,6 @@ class TraceFlag {
75
75
  value_.store(enabled, std::memory_order_relaxed);
76
76
  }
77
77
 
78
- TraceFlag* next_tracer_;
79
78
  const char* const name_;
80
79
  std::atomic<bool> value_;
81
80
  };