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
@@ -16,6 +16,7 @@
16
16
 
17
17
  #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
18
18
 
19
+ #include <grpc/credentials.h>
19
20
  #include <grpc/event_engine/event_engine.h>
20
21
  #include <grpc/grpc.h>
21
22
  #include <grpc/impl/channel_arg_names.h>
@@ -55,8 +56,10 @@
55
56
  #include "absl/strings/str_cat.h"
56
57
  #include "absl/strings/str_format.h"
57
58
  #include "absl/strings/string_view.h"
59
+ #include "absl/time/time.h"
58
60
  #include "src/core/call/metadata_batch.h"
59
61
  #include "src/core/call/metadata_info.h"
62
+ #include "src/core/channelz/property_list.h"
60
63
  #include "src/core/config/config_vars.h"
61
64
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
62
65
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
@@ -66,6 +69,7 @@
66
69
  #include "src/core/ext/transport/chttp2/transport/frame_security.h"
67
70
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
68
71
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
72
+ #include "src/core/ext/transport/chttp2/transport/http2_stats_collector.h"
69
73
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
70
74
  #include "src/core/ext/transport/chttp2/transport/internal.h"
71
75
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
@@ -106,6 +110,8 @@
106
110
  #include "src/core/telemetry/default_tcp_tracer.h"
107
111
  #include "src/core/telemetry/stats.h"
108
112
  #include "src/core/telemetry/stats_data.h"
113
+ #include "src/core/telemetry/tcp_tracer.h"
114
+ #include "src/core/transport/auth_context.h"
109
115
  #include "src/core/util/bitset.h"
110
116
  #include "src/core/util/crash.h"
111
117
  #include "src/core/util/debug_location.h"
@@ -152,7 +158,8 @@ static bool g_default_server_keepalive_permit_without_calls = false;
152
158
  // forward declarations of various callbacks that we'll build closures around
153
159
  static void write_action_begin_locked(
154
160
  grpc_core::RefCountedPtr<grpc_chttp2_transport>, grpc_error_handle error);
155
- static void write_action(grpc_chttp2_transport* t);
161
+ static void write_action(grpc_chttp2_transport* t,
162
+ std::vector<TcpCallTracerWithOffset> tcp_call_tracers);
156
163
  static void write_action_end(grpc_core::RefCountedPtr<grpc_chttp2_transport>,
157
164
  grpc_error_handle error);
158
165
  static void write_action_end_locked(
@@ -232,9 +239,14 @@ namespace {
232
239
  using EventEngine = ::grpc_event_engine::experimental::EventEngine;
233
240
  using TaskHandle = ::grpc_event_engine::experimental::EventEngine::TaskHandle;
234
241
  using grpc_core::http2::Http2ErrorCode;
242
+ using WriteMetric =
243
+ ::grpc_event_engine::experimental::EventEngine::Endpoint::WriteMetric;
244
+ using WriteEventSink =
245
+ ::grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink;
246
+ using WriteEvent =
247
+ ::grpc_event_engine::experimental::EventEngine::Endpoint::WriteEvent;
235
248
 
236
249
  grpc_core::WriteTimestampsCallback g_write_timestamps_callback = nullptr;
237
- grpc_core::CopyContextFn g_get_copied_context_fn = nullptr;
238
250
  } // namespace
239
251
 
240
252
  namespace grpc_core {
@@ -283,16 +295,10 @@ void GrpcHttp2SetWriteTimestampsCallback(WriteTimestampsCallback fn) {
283
295
  g_write_timestamps_callback = fn;
284
296
  }
285
297
 
286
- void GrpcHttp2SetCopyContextFn(CopyContextFn fn) {
287
- g_get_copied_context_fn = fn;
288
- }
289
-
290
298
  WriteTimestampsCallback GrpcHttp2GetWriteTimestampsCallback() {
291
299
  return g_write_timestamps_callback;
292
300
  }
293
301
 
294
- CopyContextFn GrpcHttp2GetCopyContextFn() { return g_get_copied_context_fn; }
295
-
296
302
  // For each entry in the passed ContextList, it executes the function set using
297
303
  // GrpcHttp2SetWriteTimestampsCallback method with each context in the list
298
304
  // and \a ts. It also deletes/frees up the passed ContextList after this
@@ -355,20 +361,15 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
355
361
 
356
362
  cancel_pings(this, GRPC_ERROR_CREATE("Transport destroyed"));
357
363
 
358
- event_engine.reset();
359
-
360
364
  if (channelz_socket != nullptr) {
361
365
  channelz_socket.reset();
362
366
  }
363
367
 
368
+ event_engine.reset();
369
+
364
370
  grpc_slice_buffer_destroy(&qbuf);
365
371
 
366
- grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
367
- // ContextList::Execute follows semantics of a callback function and does not
368
- // take a ref on error
369
- if (context_list != nullptr) {
370
- grpc_core::ForEachContextListEntryExecute(context_list, nullptr, error);
371
- }
372
+ delete context_list;
372
373
  context_list = nullptr;
373
374
 
374
375
  grpc_slice_buffer_destroy(&read_buffer);
@@ -472,27 +473,6 @@ static void read_channel_args(grpc_chttp2_transport* t,
472
473
  t->max_requests_per_read = 32;
473
474
  }
474
475
 
475
- if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
476
- .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
477
- t->channelz_socket =
478
- grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
479
- std::string(grpc_endpoint_get_local_address(t->ep.get())),
480
- std::string(t->peer_string.as_string_view()),
481
- absl::StrCat(t->GetTransportName(), " ",
482
- t->peer_string.as_string_view()),
483
- channel_args
484
- .GetObjectRef<grpc_core::channelz::SocketNode::Security>());
485
- // Checks channelz_socket, so must be initialized after.
486
- t->channelz_data_source =
487
- std::make_unique<grpc_chttp2_transport::ChannelzDataSource>(t);
488
- auto epte = QueryExtension<ChannelzExtension>(
489
- grpc_event_engine::experimental::grpc_get_wrapped_event_engine_endpoint(
490
- t->ep.get()));
491
- if (epte != nullptr) {
492
- epte->SetSocketNode(t->channelz_socket);
493
- }
494
- }
495
-
496
476
  t->ack_pings = channel_args.GetBool("grpc.http2.ack_pings").value_or(true);
497
477
 
498
478
  t->allow_tarpit =
@@ -535,6 +515,7 @@ static void read_channel_args(grpc_chttp2_transport* t,
535
515
  channel_args.GetInt(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES).value_or(-1);
536
516
  if (value >= 0) {
537
517
  t->settings.mutable_local().SetInitialWindowSize(value);
518
+ t->flow_control.set_target_initial_window_size(value);
538
519
  }
539
520
  value = channel_args.GetInt(GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY).value_or(-1);
540
521
  if (value >= 0) {
@@ -581,84 +562,87 @@ static void init_keepalive_pings_if_enabled_locked(
581
562
  }
582
563
 
583
564
  void grpc_chttp2_transport::ChannelzDataSource::AddData(
584
- grpc_core::channelz::DataSink& sink) {
585
- grpc_core::Notification n;
586
- transport_->event_engine->Run([t = transport_->Ref(), &n, &sink]() {
565
+ grpc_core::channelz::DataSink sink) {
566
+ transport_->event_engine->Run([t = transport_->Ref(),
567
+ sink = std::move(sink)]() mutable {
587
568
  grpc_core::ExecCtx exec_ctx;
588
569
  t->combiner->Run(
589
- grpc_core::NewClosure([t, &n, &sink](grpc_error_handle) {
570
+ grpc_core::NewClosure([t, sink = std::move(sink)](
571
+ grpc_error_handle) mutable {
590
572
  Json::Object http2_info;
591
- http2_info["flowControl"] =
592
- Json::FromObject(t->flow_control.stats().ToJsonObject());
593
- Json::Object misc;
594
- misc["maxRequestsPerRead"] =
595
- Json::FromNumber(static_cast<int64_t>(t->max_requests_per_read));
596
- misc["nextStreamId"] = Json::FromNumber(t->next_stream_id);
597
- misc["lastNewStreamId"] = Json::FromNumber(t->last_new_stream_id);
598
- misc["numIncomingStreamsBeforeSettingsAck"] =
599
- Json::FromNumber(t->num_incoming_streams_before_settings_ack);
600
- misc["pingAckCount"] =
601
- Json::FromNumber(static_cast<int64_t>(t->ping_ack_count));
602
- misc["allowTarpit"] = Json::FromBool(t->allow_tarpit);
603
- if (t->allow_tarpit) {
604
- misc["minTarpitDurationMs"] =
605
- Json::FromNumber(t->min_tarpit_duration_ms);
606
- misc["maxTarpitDurationMs"] =
607
- Json::FromNumber(t->max_tarpit_duration_ms);
608
- }
609
- misc["keepaliveTime"] =
610
- Json::FromString(t->keepalive_time.ToJsonString());
611
- misc["nextAdjustedKeepaliveTimestamp"] =
612
- Json::FromString((t->next_adjusted_keepalive_timestamp -
613
- grpc_core::Timestamp::Now())
614
- .ToJsonString());
615
- misc["numMessagesInNextWrite"] =
616
- Json::FromNumber(t->num_messages_in_next_write);
617
- misc["numPendingInducedFrames"] =
618
- Json::FromNumber(t->num_pending_induced_frames);
619
- misc["writeBufferSize"] = Json::FromNumber(t->write_buffer_size);
620
- misc["readingPausedOnPendingInducedFrames"] =
621
- Json::FromBool(t->reading_paused_on_pending_induced_frames);
622
- misc["enablePreferredRxCryptoFrameAdvertisement"] =
623
- Json::FromBool(t->enable_preferred_rx_crypto_frame_advertisement);
624
- misc["keepalivePermitWithoutCalls"] =
625
- Json::FromBool(t->keepalive_permit_without_calls);
626
- misc["bdpPingBlocked"] = Json::FromBool(t->bdp_ping_blocked);
627
- misc["bdpPingStarted"] = Json::FromBool(t->bdp_ping_started);
628
- misc["ackPings"] = Json::FromBool(t->ack_pings);
629
- misc["keepaliveIncomingDataWanted"] =
630
- Json::FromBool(t->keepalive_incoming_data_wanted);
631
- misc["maxConcurrentStreamsOverloadProtection"] =
632
- Json::FromBool(t->max_concurrent_streams_overload_protection);
633
- misc["maxConcurrentStreamsRejectOnClient"] =
634
- Json::FromBool(t->max_concurrent_streams_reject_on_client);
635
- misc["pingOnRstStreamPercent"] =
636
- Json::FromNumber(t->ping_on_rst_stream_percent);
637
- misc["lastWindowUpdateAge"] = Json::FromString(
638
- (grpc_core::Timestamp::Now() - t->last_window_update_time)
639
- .ToJsonString());
640
- http2_info["misc"] = Json::FromObject(std::move(misc));
641
- http2_info["settings"] = Json::FromObject(t->settings.ToJsonObject());
642
- sink.AddAdditionalInfo("http2", std::move(http2_info));
643
- std::vector<grpc_core::RefCountedPtr<grpc_core::channelz::BaseNode>>
644
- children;
645
- children.reserve(t->stream_map.size());
646
- for (auto [id, stream] : t->stream_map) {
647
- if (stream->channelz_call_node == nullptr) {
648
- stream->channelz_call_node =
649
- grpc_core::MakeRefCounted<grpc_core::channelz::CallNode>(
650
- absl::StrCat("chttp2 ",
651
- t->is_client ? "client" : "server",
652
- " stream ", stream->id));
653
- }
654
- children.push_back(stream->channelz_call_node);
655
- }
656
- sink.AddChildObjects(std::move(children));
657
- n.Notify();
573
+ sink.AddData(
574
+ "http2",
575
+ grpc_core::channelz::PropertyList()
576
+ .Set("max_requests_per_read", t->max_requests_per_read)
577
+ .Set("next_stream_id", t->next_stream_id)
578
+ .Set("last_new_stream_id", t->last_new_stream_id)
579
+ .Set("num_incoming_streams_before_settings_ack",
580
+ t->num_incoming_streams_before_settings_ack)
581
+ .Set("ping_ack_count", t->ping_ack_count)
582
+ .Set("allow_tarpit", t->allow_tarpit)
583
+ .Set("min_tarpit_duration_ms", t->min_tarpit_duration_ms)
584
+ .Set("max_tarpit_duration_ms", t->max_tarpit_duration_ms)
585
+ .Set("keepalive_time", t->keepalive_time)
586
+ .Set("next_adjusted_keepalive_timestamp",
587
+ t->next_adjusted_keepalive_timestamp)
588
+ .Set("num_messages_in_next_write",
589
+ t->num_messages_in_next_write)
590
+ .Set("num_pending_induced_frames",
591
+ t->num_pending_induced_frames)
592
+ .Set("write_buffer_size", t->write_buffer_size)
593
+ .Set("reading_paused_on_pending_induced_frames",
594
+ t->reading_paused_on_pending_induced_frames)
595
+ .Set("enable_preferred_rx_crypto_frame_advertisement",
596
+ t->enable_preferred_rx_crypto_frame_advertisement)
597
+ .Set("keepalive_permit_without_calls",
598
+ t->keepalive_permit_without_calls)
599
+ .Set("bdp_ping_blocked", t->bdp_ping_blocked)
600
+ .Set("bdp_ping_started", t->bdp_ping_started)
601
+ .Set("ack_pings", t->ack_pings)
602
+ .Set("keepalive_incoming_data_wanted",
603
+ t->keepalive_incoming_data_wanted)
604
+ .Set("max_concurrent_streams_overload_protection",
605
+ t->max_concurrent_streams_overload_protection)
606
+ .Set("max_concurrent_streams_reject_on_client",
607
+ t->max_concurrent_streams_reject_on_client)
608
+ .Set("ping_on_rst_stream_percent",
609
+ t->ping_on_rst_stream_percent)
610
+ .Set("last_window_update", t->last_window_update_time)
611
+ .Set("settings", t->settings.ChannelzProperties())
612
+ .Set("flow_control",
613
+ t->flow_control.stats().ChannelzProperties())
614
+ .Set("ping_rate_policy",
615
+ t->ping_rate_policy.ChannelzProperties())
616
+ .Set("ping_callbacks", t->ping_callbacks.ChannelzProperties())
617
+ .Set("goaway_error", t->goaway_error)
618
+ .Set("sent_goaway_state",
619
+ [t]() {
620
+ switch (t->sent_goaway_state) {
621
+ case GRPC_CHTTP2_NO_GOAWAY_SEND:
622
+ return "none";
623
+ case GRPC_CHTTP2_GRACEFUL_GOAWAY:
624
+ return "graceful";
625
+ case GRPC_CHTTP2_FINAL_GOAWAY_SEND_SCHEDULED:
626
+ return "final_scheduled";
627
+ case GRPC_CHTTP2_FINAL_GOAWAY_SENT:
628
+ return "final_sent";
629
+ }
630
+ return "unknown";
631
+ }())
632
+ .Set("write_state", [t]() {
633
+ switch (t->write_state) {
634
+ case GRPC_CHTTP2_WRITE_STATE_IDLE:
635
+ return "idle";
636
+ case GRPC_CHTTP2_WRITE_STATE_WRITING:
637
+ return "writing";
638
+ case GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE:
639
+ return "writing_with_more";
640
+ }
641
+ return "unknown";
642
+ }()));
658
643
  }),
659
644
  absl::OkStatus());
660
645
  });
661
- n.WaitForNotification();
662
646
  }
663
647
 
664
648
  std::unique_ptr<grpc_core::channelz::ZTrace>
@@ -798,6 +782,10 @@ grpc_chttp2_transport::grpc_chttp2_transport(
798
782
  grpc_core::test_only_init_callback();
799
783
  }
800
784
 
785
+ grpc_auth_context* auth_context = channel_args.GetObject<grpc_auth_context>();
786
+ http2_stats = grpc_core::CreateHttp2StatsCollector(auth_context);
787
+ hpack_parser.hpack_table()->SetHttp2StatsCollector(http2_stats);
788
+
801
789
  #ifdef GRPC_POSIX_SOCKET_TCP
802
790
  closure_barrier_may_cover_write =
803
791
  grpc_event_engine_run_in_background() &&
@@ -805,6 +793,26 @@ grpc_chttp2_transport::grpc_chttp2_transport(
805
793
  ? 0
806
794
  : CLOSURE_BARRIER_MAY_COVER_WRITE;
807
795
  #endif
796
+
797
+ if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
798
+ .value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
799
+ channelz_socket =
800
+ grpc_core::MakeRefCounted<grpc_core::channelz::SocketNode>(
801
+ std::string(grpc_endpoint_get_local_address(ep.get())),
802
+ std::string(peer_string.as_string_view()),
803
+ absl::StrCat(GetTransportName(), " ", peer_string.as_string_view()),
804
+ channel_args
805
+ .GetObjectRef<grpc_core::channelz::SocketNode::Security>());
806
+ // Checks channelz_socket, so must be initialized after.
807
+ channelz_data_source =
808
+ std::make_unique<grpc_chttp2_transport::ChannelzDataSource>(this);
809
+ auto epte = QueryExtension<ChannelzExtension>(
810
+ grpc_event_engine::experimental::grpc_get_wrapped_event_engine_endpoint(
811
+ ep.get()));
812
+ if (epte != nullptr) {
813
+ epte->SetSocketNode(channelz_socket);
814
+ }
815
+ }
808
816
  }
809
817
 
810
818
  static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
@@ -816,6 +824,7 @@ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
816
824
  }
817
825
 
818
826
  void grpc_chttp2_transport::Orphan() {
827
+ channelz_data_source.reset();
819
828
  combiner->Run(GRPC_CLOSURE_CREATE(destroy_transport_locked, this, nullptr),
820
829
  absl::OkStatus());
821
830
  }
@@ -1140,7 +1149,7 @@ static void write_action_begin_locked(
1140
1149
  r.partial ? GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE
1141
1150
  : GRPC_CHTTP2_WRITE_STATE_WRITING,
1142
1151
  begin_writing_desc(r.partial));
1143
- write_action(t.get());
1152
+ write_action(t.get(), std::move(r.tcp_call_tracers));
1144
1153
  if (t->reading_paused_on_pending_induced_frames) {
1145
1154
  CHECK_EQ(t->num_pending_induced_frames, 0u);
1146
1155
  // We had paused reading, because we had many induced frames (SETTINGS
@@ -1159,7 +1168,9 @@ static void write_action_begin_locked(
1159
1168
  }
1160
1169
  }
1161
1170
 
1162
- static void write_action(grpc_chttp2_transport* t) {
1171
+ static void write_action(
1172
+ grpc_chttp2_transport* t,
1173
+ std::vector<TcpCallTracerWithOffset> tcp_call_tracers) {
1163
1174
  void* cl = t->context_list;
1164
1175
  if (!t->context_list->empty()) {
1165
1176
  // Transfer the ownership of the context list to the endpoint and create and
@@ -1174,6 +1185,7 @@ static void write_action(grpc_chttp2_transport* t) {
1174
1185
  }
1175
1186
  // Choose max_frame_size as the preferred rx crypto frame size indicated by
1176
1187
  // the peer.
1188
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args;
1177
1189
  int max_frame_size =
1178
1190
  t->settings.peer().preferred_receive_crypto_message_size();
1179
1191
  // Note: max frame size is 0 if the remote peer does not support adjusting the
@@ -1181,6 +1193,42 @@ static void write_action(grpc_chttp2_transport* t) {
1181
1193
  if (max_frame_size == 0) {
1182
1194
  max_frame_size = INT_MAX;
1183
1195
  }
1196
+ args.set_max_frame_size(max_frame_size);
1197
+ args.SetDeprecatedAndDiscouragedGoogleSpecificPointer(cl);
1198
+ if (!tcp_call_tracers.empty()) {
1199
+ EventEngine::Endpoint* ee_ep =
1200
+ grpc_event_engine::experimental::grpc_get_wrapped_event_engine_endpoint(
1201
+ t->ep.get());
1202
+ if (ee_ep != nullptr) {
1203
+ auto telemetry_info = ee_ep->GetTelemetryInfo();
1204
+ if (telemetry_info != nullptr) {
1205
+ auto metrics_set = telemetry_info->GetFullMetricsSet();
1206
+ args.set_metrics_sink(WriteEventSink(
1207
+ std::move(metrics_set),
1208
+ {WriteEvent::kSendMsg, WriteEvent::kScheduled, WriteEvent::kSent,
1209
+ WriteEvent::kAcked},
1210
+ [tcp_call_tracers = std::move(tcp_call_tracers),
1211
+ telemetry_info = std::move(telemetry_info)](
1212
+ WriteEvent event, absl::Time timestamp,
1213
+ std::vector<WriteMetric> metrics) {
1214
+ std::vector<grpc_core::TcpCallTracer::TcpEventMetric> tcp_metrics;
1215
+ tcp_metrics.reserve(metrics.size());
1216
+ for (auto& metric : metrics) {
1217
+ auto name = telemetry_info->GetMetricName(metric.key);
1218
+ if (name.has_value()) {
1219
+ tcp_metrics.push_back(
1220
+ grpc_core::TcpCallTracer::TcpEventMetric{name.value(),
1221
+ metric.value});
1222
+ }
1223
+ }
1224
+ for (auto& tracer : tcp_call_tracers) {
1225
+ tracer.tcp_call_tracer->RecordEvent(
1226
+ event, timestamp, tracer.byte_offset, tcp_metrics);
1227
+ }
1228
+ }));
1229
+ }
1230
+ }
1231
+ }
1184
1232
  GRPC_TRACE_LOG(http2_ping, INFO)
1185
1233
  << (t->is_client ? "CLIENT" : "SERVER") << "[" << t << "]: Write "
1186
1234
  << t->outbuf.Length() << " bytes";
@@ -1190,7 +1238,7 @@ static void write_action(grpc_chttp2_transport* t) {
1190
1238
  grpc_endpoint_write(t->ep.get(), t->outbuf.c_slice_buffer(),
1191
1239
  grpc_core::InitTransportClosure<write_action_end>(
1192
1240
  t->Ref(), &t->write_action_end_locked),
1193
- cl, max_frame_size);
1241
+ std::move(args));
1194
1242
  }
1195
1243
 
1196
1244
  static void write_action_end(grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
@@ -1560,7 +1608,7 @@ static void send_message_locked(
1560
1608
  grpc_transport_stream_op_batch_payload* op_payload,
1561
1609
  grpc_chttp2_transport* t, grpc_closure* on_complete) {
1562
1610
  t->num_messages_in_next_write++;
1563
- grpc_core::global_stats().IncrementHttp2SendMessageSize(
1611
+ t->http2_stats->IncrementHttp2SendMessageSize(
1564
1612
  op->payload->send_message.send_message->Length());
1565
1613
  on_complete->next_data.scratch |= t->closure_barrier_may_cover_write;
1566
1614
  s->send_message_finished = add_closure_barrier(op->on_complete);
@@ -2400,8 +2448,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2400
2448
  // sent headers yet (still in "idle" state). Note that since we have
2401
2449
  // marked the stream closed above, we won't be writing to it
2402
2450
  // anymore.
2403
- if (grpc_core::IsRstStreamFixEnabled() && t->is_client &&
2404
- !sent_initial_metadata) {
2451
+ if (t->is_client && !sent_initial_metadata) {
2405
2452
  return;
2406
2453
  }
2407
2454
  grpc_chttp2_add_rst_stream_to_next_write(
@@ -79,13 +79,10 @@ void TestOnlyGlobalHttp2TransportDisableTransientFailureStateNotification(
79
79
 
80
80
  typedef void (*WriteTimestampsCallback)(void*, Timestamps*,
81
81
  grpc_error_handle error);
82
- typedef void* (*CopyContextFn)(Arena*);
83
82
 
84
83
  void GrpcHttp2SetWriteTimestampsCallback(WriteTimestampsCallback fn);
85
- void GrpcHttp2SetCopyContextFn(CopyContextFn fn);
86
84
 
87
85
  WriteTimestampsCallback GrpcHttp2GetWriteTimestampsCallback();
88
- CopyContextFn GrpcHttp2GetCopyContextFn();
89
86
 
90
87
  // Interprets the passed arg as a ContextList type and for each entry in the
91
88
  // passed ContextList, it executes the function set using