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,6 +30,7 @@
30
30
 
31
31
  namespace grpc_core {
32
32
  class GlobalStatsCollector;
33
+ class Http2GlobalStatsCollector;
33
34
  class Http2StatsCollector;
34
35
  class HistogramCollector_16777216_20_64;
35
36
  class Histogram_16777216_20_64 {
@@ -283,13 +284,6 @@ struct GlobalStats {
283
284
  kSyscallRead,
284
285
  kTcpReadAlloc8k,
285
286
  kTcpReadAlloc64k,
286
- kHttp2SettingsWrites,
287
- kHttp2PingsSent,
288
- kHttp2WritesBegun,
289
- kHttp2TransportStalls,
290
- kHttp2StreamStalls,
291
- kHttp2HpackHits,
292
- kHttp2HpackMisses,
293
287
  kCqPluckCreates,
294
288
  kCqNextCreates,
295
289
  kCqCallbackCreates,
@@ -316,22 +310,6 @@ struct GlobalStats {
316
310
  kTcpReadSize,
317
311
  kTcpReadOffer,
318
312
  kTcpReadOfferIovSize,
319
- kHttp2SendMessageSize,
320
- kHttp2MetadataSize,
321
- kHttp2HpackEntryLifetime,
322
- kHttp2HeaderTableSize,
323
- kHttp2InitialWindowSize,
324
- kHttp2MaxConcurrentStreams,
325
- kHttp2MaxFrameSize,
326
- kHttp2MaxHeaderListSize,
327
- kHttp2PreferredReceiveCryptoMessageSize,
328
- kHttp2StreamRemoteWindowUpdate,
329
- kHttp2TransportRemoteWindowUpdate,
330
- kHttp2TransportWindowUpdatePeriod,
331
- kHttp2StreamWindowUpdatePeriod,
332
- kHttp2WriteTargetSize,
333
- kHttp2WriteDataFrameSize,
334
- kHttp2ReadDataFrameSize,
335
313
  kWrrSubchannelListSize,
336
314
  kWrrSubchannelReadySize,
337
315
  kWorkSerializerRunTimeMs,
@@ -376,13 +354,6 @@ struct GlobalStats {
376
354
  uint64_t syscall_read;
377
355
  uint64_t tcp_read_alloc_8k;
378
356
  uint64_t tcp_read_alloc_64k;
379
- uint64_t http2_settings_writes;
380
- uint64_t http2_pings_sent;
381
- uint64_t http2_writes_begun;
382
- uint64_t http2_transport_stalls;
383
- uint64_t http2_stream_stalls;
384
- uint64_t http2_hpack_hits;
385
- uint64_t http2_hpack_misses;
386
357
  uint64_t cq_pluck_creates;
387
358
  uint64_t cq_next_creates;
388
359
  uint64_t cq_callback_creates;
@@ -409,22 +380,6 @@ struct GlobalStats {
409
380
  Histogram_16777216_20_64 tcp_read_size;
410
381
  Histogram_16777216_20_64 tcp_read_offer;
411
382
  Histogram_80_10_64 tcp_read_offer_iov_size;
412
- Histogram_16777216_20_64 http2_send_message_size;
413
- Histogram_65536_26_64 http2_metadata_size;
414
- Histogram_1800000_40_64 http2_hpack_entry_lifetime;
415
- Histogram_16777216_20_64 http2_header_table_size;
416
- Histogram_16777216_50_64 http2_initial_window_size;
417
- Histogram_16777216_20_64 http2_max_concurrent_streams;
418
- Histogram_16777216_50_64 http2_max_frame_size;
419
- Histogram_16777216_20_64 http2_max_header_list_size;
420
- Histogram_16777216_20_64 http2_preferred_receive_crypto_message_size;
421
- Histogram_16777216_20_64 http2_stream_remote_window_update;
422
- Histogram_16777216_20_64 http2_transport_remote_window_update;
423
- Histogram_100000_20_64 http2_transport_window_update_period;
424
- Histogram_100000_20_64 http2_stream_window_update_period;
425
- Histogram_16777216_50_64 http2_write_target_size;
426
- Histogram_16777216_50_64 http2_write_data_frame_size;
427
- Histogram_16777216_50_64 http2_read_data_frame_size;
428
383
  Histogram_10000_20_64 wrr_subchannel_list_size;
429
384
  Histogram_10000_20_64 wrr_subchannel_ready_size;
430
385
  Histogram_100000_20_64 work_serializer_run_time_ms;
@@ -497,34 +452,6 @@ class GlobalStatsCollector {
497
452
  void IncrementTcpReadAlloc64k() {
498
453
  data_.this_cpu().tcp_read_alloc_64k.fetch_add(1, std::memory_order_relaxed);
499
454
  }
500
- void IncrementHttp2SettingsWrites() {
501
- data_.this_cpu().http2_settings_writes.fetch_add(1,
502
- std::memory_order_relaxed);
503
- }
504
- void IncrementHttp2PingsSent() {
505
- data_.this_cpu().http2_pings_sent.fetch_add(1, std::memory_order_relaxed);
506
- }
507
-
508
- private:
509
- void IncrementHttp2WritesBegun() {
510
- data_.this_cpu().http2_writes_begun.fetch_add(1, std::memory_order_relaxed);
511
- }
512
-
513
- public:
514
- void IncrementHttp2TransportStalls() {
515
- data_.this_cpu().http2_transport_stalls.fetch_add(
516
- 1, std::memory_order_relaxed);
517
- }
518
- void IncrementHttp2StreamStalls() {
519
- data_.this_cpu().http2_stream_stalls.fetch_add(1,
520
- std::memory_order_relaxed);
521
- }
522
- void IncrementHttp2HpackHits() {
523
- data_.this_cpu().http2_hpack_hits.fetch_add(1, std::memory_order_relaxed);
524
- }
525
- void IncrementHttp2HpackMisses() {
526
- data_.this_cpu().http2_hpack_misses.fetch_add(1, std::memory_order_relaxed);
527
- }
528
455
  void IncrementCqPluckCreates() {
529
456
  data_.this_cpu().cq_pluck_creates.fetch_add(1, std::memory_order_relaxed);
530
457
  }
@@ -599,59 +526,6 @@ class GlobalStatsCollector {
599
526
  void IncrementTcpReadOfferIovSize(int value) {
600
527
  data_.this_cpu().tcp_read_offer_iov_size.Increment(value);
601
528
  }
602
- void IncrementHttp2SendMessageSize(int value) {
603
- data_.this_cpu().http2_send_message_size.Increment(value);
604
- }
605
- void IncrementHttp2MetadataSize(int value) {
606
- data_.this_cpu().http2_metadata_size.Increment(value);
607
- }
608
- void IncrementHttp2HpackEntryLifetime(int value) {
609
- data_.this_cpu().http2_hpack_entry_lifetime.Increment(value);
610
- }
611
- void IncrementHttp2HeaderTableSize(int value) {
612
- data_.this_cpu().http2_header_table_size.Increment(value);
613
- }
614
- void IncrementHttp2InitialWindowSize(int value) {
615
- data_.this_cpu().http2_initial_window_size.Increment(value);
616
- }
617
- void IncrementHttp2MaxConcurrentStreams(int value) {
618
- data_.this_cpu().http2_max_concurrent_streams.Increment(value);
619
- }
620
- void IncrementHttp2MaxFrameSize(int value) {
621
- data_.this_cpu().http2_max_frame_size.Increment(value);
622
- }
623
- void IncrementHttp2MaxHeaderListSize(int value) {
624
- data_.this_cpu().http2_max_header_list_size.Increment(value);
625
- }
626
- void IncrementHttp2PreferredReceiveCryptoMessageSize(int value) {
627
- data_.this_cpu().http2_preferred_receive_crypto_message_size.Increment(
628
- value);
629
- }
630
- void IncrementHttp2StreamRemoteWindowUpdate(int value) {
631
- data_.this_cpu().http2_stream_remote_window_update.Increment(value);
632
- }
633
- void IncrementHttp2TransportRemoteWindowUpdate(int value) {
634
- data_.this_cpu().http2_transport_remote_window_update.Increment(value);
635
- }
636
- void IncrementHttp2TransportWindowUpdatePeriod(int value) {
637
- data_.this_cpu().http2_transport_window_update_period.Increment(value);
638
- }
639
- void IncrementHttp2StreamWindowUpdatePeriod(int value) {
640
- data_.this_cpu().http2_stream_window_update_period.Increment(value);
641
- }
642
-
643
- private:
644
- void IncrementHttp2WriteTargetSize(int value) {
645
- data_.this_cpu().http2_write_target_size.Increment(value);
646
- }
647
-
648
- public:
649
- void IncrementHttp2WriteDataFrameSize(int value) {
650
- data_.this_cpu().http2_write_data_frame_size.Increment(value);
651
- }
652
- void IncrementHttp2ReadDataFrameSize(int value) {
653
- data_.this_cpu().http2_read_data_frame_size.Increment(value);
654
- }
655
529
  void IncrementWrrSubchannelListSize(int value) {
656
530
  data_.this_cpu().wrr_subchannel_list_size.Increment(value);
657
531
  }
@@ -715,6 +589,7 @@ class GlobalStatsCollector {
715
589
  }
716
590
 
717
591
  private:
592
+ friend class Http2GlobalStatsCollector;
718
593
  friend class Http2StatsCollector;
719
594
  struct Data {
720
595
  std::atomic<uint64_t> client_calls_created{0};
@@ -730,13 +605,6 @@ class GlobalStatsCollector {
730
605
  std::atomic<uint64_t> syscall_read{0};
731
606
  std::atomic<uint64_t> tcp_read_alloc_8k{0};
732
607
  std::atomic<uint64_t> tcp_read_alloc_64k{0};
733
- std::atomic<uint64_t> http2_settings_writes{0};
734
- std::atomic<uint64_t> http2_pings_sent{0};
735
- std::atomic<uint64_t> http2_writes_begun{0};
736
- std::atomic<uint64_t> http2_transport_stalls{0};
737
- std::atomic<uint64_t> http2_stream_stalls{0};
738
- std::atomic<uint64_t> http2_hpack_hits{0};
739
- std::atomic<uint64_t> http2_hpack_misses{0};
740
608
  std::atomic<uint64_t> cq_pluck_creates{0};
741
609
  std::atomic<uint64_t> cq_next_creates{0};
742
610
  std::atomic<uint64_t> cq_callback_creates{0};
@@ -760,23 +628,6 @@ class GlobalStatsCollector {
760
628
  HistogramCollector_16777216_20_64 tcp_read_size;
761
629
  HistogramCollector_16777216_20_64 tcp_read_offer;
762
630
  HistogramCollector_80_10_64 tcp_read_offer_iov_size;
763
- HistogramCollector_16777216_20_64 http2_send_message_size;
764
- HistogramCollector_65536_26_64 http2_metadata_size;
765
- HistogramCollector_1800000_40_64 http2_hpack_entry_lifetime;
766
- HistogramCollector_16777216_20_64 http2_header_table_size;
767
- HistogramCollector_16777216_50_64 http2_initial_window_size;
768
- HistogramCollector_16777216_20_64 http2_max_concurrent_streams;
769
- HistogramCollector_16777216_50_64 http2_max_frame_size;
770
- HistogramCollector_16777216_20_64 http2_max_header_list_size;
771
- HistogramCollector_16777216_20_64
772
- http2_preferred_receive_crypto_message_size;
773
- HistogramCollector_16777216_20_64 http2_stream_remote_window_update;
774
- HistogramCollector_16777216_20_64 http2_transport_remote_window_update;
775
- HistogramCollector_100000_20_64 http2_transport_window_update_period;
776
- HistogramCollector_100000_20_64 http2_stream_window_update_period;
777
- HistogramCollector_16777216_50_64 http2_write_target_size;
778
- HistogramCollector_16777216_50_64 http2_write_data_frame_size;
779
- HistogramCollector_16777216_50_64 http2_read_data_frame_size;
780
631
  HistogramCollector_10000_20_64 wrr_subchannel_list_size;
781
632
  HistogramCollector_10000_20_64 wrr_subchannel_ready_size;
782
633
  HistogramCollector_100000_20_64 work_serializer_run_time_ms;
@@ -803,6 +654,189 @@ class GlobalStatsCollector {
803
654
  inline GlobalStatsCollector& global_stats() {
804
655
  return *NoDestructSingleton<GlobalStatsCollector>::Get();
805
656
  }
657
+ struct Http2GlobalStats {
658
+ enum class Counter {
659
+ kHttp2SettingsWrites,
660
+ kHttp2PingsSent,
661
+ kHttp2TransportStalls,
662
+ kHttp2StreamStalls,
663
+ kHttp2HpackHits,
664
+ kHttp2HpackMisses,
665
+ kHttp2WritesBegun,
666
+ COUNT
667
+ };
668
+ enum class Histogram {
669
+ kHttp2SendMessageSize,
670
+ kHttp2MetadataSize,
671
+ kHttp2HpackEntryLifetime,
672
+ kHttp2HeaderTableSize,
673
+ kHttp2InitialWindowSize,
674
+ kHttp2MaxConcurrentStreams,
675
+ kHttp2MaxFrameSize,
676
+ kHttp2MaxHeaderListSize,
677
+ kHttp2PreferredReceiveCryptoMessageSize,
678
+ kHttp2StreamRemoteWindowUpdate,
679
+ kHttp2TransportRemoteWindowUpdate,
680
+ kHttp2TransportWindowUpdatePeriod,
681
+ kHttp2StreamWindowUpdatePeriod,
682
+ kHttp2WriteDataFrameSize,
683
+ kHttp2ReadDataFrameSize,
684
+ kHttp2WriteTargetSize,
685
+ COUNT
686
+ };
687
+ Http2GlobalStats();
688
+ static const absl::string_view counter_name[static_cast<int>(Counter::COUNT)];
689
+ static const absl::string_view
690
+ histogram_name[static_cast<int>(Histogram::COUNT)];
691
+ static const absl::string_view counter_doc[static_cast<int>(Counter::COUNT)];
692
+ static const absl::string_view
693
+ histogram_doc[static_cast<int>(Histogram::COUNT)];
694
+ union {
695
+ struct {
696
+ uint64_t http2_settings_writes;
697
+ uint64_t http2_pings_sent;
698
+ uint64_t http2_transport_stalls;
699
+ uint64_t http2_stream_stalls;
700
+ uint64_t http2_hpack_hits;
701
+ uint64_t http2_hpack_misses;
702
+ uint64_t http2_writes_begun;
703
+ };
704
+ uint64_t counters[static_cast<int>(Counter::COUNT)];
705
+ };
706
+ Histogram_16777216_20_64 http2_send_message_size;
707
+ Histogram_65536_26_64 http2_metadata_size;
708
+ Histogram_1800000_40_64 http2_hpack_entry_lifetime;
709
+ Histogram_16777216_20_64 http2_header_table_size;
710
+ Histogram_16777216_50_64 http2_initial_window_size;
711
+ Histogram_16777216_20_64 http2_max_concurrent_streams;
712
+ Histogram_16777216_50_64 http2_max_frame_size;
713
+ Histogram_16777216_20_64 http2_max_header_list_size;
714
+ Histogram_16777216_20_64 http2_preferred_receive_crypto_message_size;
715
+ Histogram_16777216_20_64 http2_stream_remote_window_update;
716
+ Histogram_16777216_20_64 http2_transport_remote_window_update;
717
+ Histogram_100000_20_64 http2_transport_window_update_period;
718
+ Histogram_100000_20_64 http2_stream_window_update_period;
719
+ Histogram_16777216_50_64 http2_write_data_frame_size;
720
+ Histogram_16777216_50_64 http2_read_data_frame_size;
721
+ Histogram_16777216_50_64 http2_write_target_size;
722
+ HistogramView histogram(Histogram which) const;
723
+ std::unique_ptr<Http2GlobalStats> Diff(const Http2GlobalStats& other) const;
724
+ };
725
+ class Http2GlobalStatsCollector {
726
+ public:
727
+ std::unique_ptr<Http2GlobalStats> Collect() const;
728
+ void IncrementHttp2SettingsWrites() {
729
+ data_.this_cpu().http2_settings_writes.fetch_add(1,
730
+ std::memory_order_relaxed);
731
+ }
732
+ void IncrementHttp2PingsSent() {
733
+ data_.this_cpu().http2_pings_sent.fetch_add(1, std::memory_order_relaxed);
734
+ }
735
+ void IncrementHttp2TransportStalls() {
736
+ data_.this_cpu().http2_transport_stalls.fetch_add(
737
+ 1, std::memory_order_relaxed);
738
+ }
739
+ void IncrementHttp2StreamStalls() {
740
+ data_.this_cpu().http2_stream_stalls.fetch_add(1,
741
+ std::memory_order_relaxed);
742
+ }
743
+ void IncrementHttp2HpackHits() {
744
+ data_.this_cpu().http2_hpack_hits.fetch_add(1, std::memory_order_relaxed);
745
+ }
746
+ void IncrementHttp2HpackMisses() {
747
+ data_.this_cpu().http2_hpack_misses.fetch_add(1, std::memory_order_relaxed);
748
+ }
749
+
750
+ private:
751
+ void IncrementHttp2WritesBegun() {
752
+ data_.this_cpu().http2_writes_begun.fetch_add(1, std::memory_order_relaxed);
753
+ }
754
+
755
+ public:
756
+ void IncrementHttp2SendMessageSize(int value) {
757
+ data_.this_cpu().http2_send_message_size.Increment(value);
758
+ }
759
+ void IncrementHttp2MetadataSize(int value) {
760
+ data_.this_cpu().http2_metadata_size.Increment(value);
761
+ }
762
+ void IncrementHttp2HpackEntryLifetime(int value) {
763
+ data_.this_cpu().http2_hpack_entry_lifetime.Increment(value);
764
+ }
765
+ void IncrementHttp2HeaderTableSize(int value) {
766
+ data_.this_cpu().http2_header_table_size.Increment(value);
767
+ }
768
+ void IncrementHttp2InitialWindowSize(int value) {
769
+ data_.this_cpu().http2_initial_window_size.Increment(value);
770
+ }
771
+ void IncrementHttp2MaxConcurrentStreams(int value) {
772
+ data_.this_cpu().http2_max_concurrent_streams.Increment(value);
773
+ }
774
+ void IncrementHttp2MaxFrameSize(int value) {
775
+ data_.this_cpu().http2_max_frame_size.Increment(value);
776
+ }
777
+ void IncrementHttp2MaxHeaderListSize(int value) {
778
+ data_.this_cpu().http2_max_header_list_size.Increment(value);
779
+ }
780
+ void IncrementHttp2PreferredReceiveCryptoMessageSize(int value) {
781
+ data_.this_cpu().http2_preferred_receive_crypto_message_size.Increment(
782
+ value);
783
+ }
784
+ void IncrementHttp2StreamRemoteWindowUpdate(int value) {
785
+ data_.this_cpu().http2_stream_remote_window_update.Increment(value);
786
+ }
787
+ void IncrementHttp2TransportRemoteWindowUpdate(int value) {
788
+ data_.this_cpu().http2_transport_remote_window_update.Increment(value);
789
+ }
790
+ void IncrementHttp2TransportWindowUpdatePeriod(int value) {
791
+ data_.this_cpu().http2_transport_window_update_period.Increment(value);
792
+ }
793
+ void IncrementHttp2StreamWindowUpdatePeriod(int value) {
794
+ data_.this_cpu().http2_stream_window_update_period.Increment(value);
795
+ }
796
+ void IncrementHttp2WriteDataFrameSize(int value) {
797
+ data_.this_cpu().http2_write_data_frame_size.Increment(value);
798
+ }
799
+ void IncrementHttp2ReadDataFrameSize(int value) {
800
+ data_.this_cpu().http2_read_data_frame_size.Increment(value);
801
+ }
802
+
803
+ private:
804
+ void IncrementHttp2WriteTargetSize(int value) {
805
+ data_.this_cpu().http2_write_target_size.Increment(value);
806
+ }
807
+ friend class GlobalStatsCollector;
808
+ friend class Http2StatsCollector;
809
+ struct Data {
810
+ std::atomic<uint64_t> http2_settings_writes{0};
811
+ std::atomic<uint64_t> http2_pings_sent{0};
812
+ std::atomic<uint64_t> http2_transport_stalls{0};
813
+ std::atomic<uint64_t> http2_stream_stalls{0};
814
+ std::atomic<uint64_t> http2_hpack_hits{0};
815
+ std::atomic<uint64_t> http2_hpack_misses{0};
816
+ std::atomic<uint64_t> http2_writes_begun{0};
817
+ HistogramCollector_16777216_20_64 http2_send_message_size;
818
+ HistogramCollector_65536_26_64 http2_metadata_size;
819
+ HistogramCollector_1800000_40_64 http2_hpack_entry_lifetime;
820
+ HistogramCollector_16777216_20_64 http2_header_table_size;
821
+ HistogramCollector_16777216_50_64 http2_initial_window_size;
822
+ HistogramCollector_16777216_20_64 http2_max_concurrent_streams;
823
+ HistogramCollector_16777216_50_64 http2_max_frame_size;
824
+ HistogramCollector_16777216_20_64 http2_max_header_list_size;
825
+ HistogramCollector_16777216_20_64
826
+ http2_preferred_receive_crypto_message_size;
827
+ HistogramCollector_16777216_20_64 http2_stream_remote_window_update;
828
+ HistogramCollector_16777216_20_64 http2_transport_remote_window_update;
829
+ HistogramCollector_100000_20_64 http2_transport_window_update_period;
830
+ HistogramCollector_100000_20_64 http2_stream_window_update_period;
831
+ HistogramCollector_16777216_50_64 http2_write_data_frame_size;
832
+ HistogramCollector_16777216_50_64 http2_read_data_frame_size;
833
+ HistogramCollector_16777216_50_64 http2_write_target_size;
834
+ };
835
+ PerCpu<Data> data_{PerCpuOptions().SetCpusPerShard(4).SetMaxShards(32)};
836
+ };
837
+ inline Http2GlobalStatsCollector& http2_global_stats() {
838
+ return *NoDestructSingleton<Http2GlobalStatsCollector>::Get();
839
+ }
806
840
  struct Http2Stats {
807
841
  enum class Counter { kHttp2WritesBegun, COUNT };
808
842
  enum class Histogram { kHttp2WriteTargetSize, COUNT };
@@ -824,13 +858,76 @@ struct Http2Stats {
824
858
  class Http2StatsCollector {
825
859
  public:
826
860
  const Http2Stats& View() const { return data_; };
861
+ void IncrementHttp2SettingsWrites() {
862
+ http2_global_stats().IncrementHttp2SettingsWrites();
863
+ }
864
+ void IncrementHttp2PingsSent() {
865
+ http2_global_stats().IncrementHttp2PingsSent();
866
+ }
867
+ void IncrementHttp2TransportStalls() {
868
+ http2_global_stats().IncrementHttp2TransportStalls();
869
+ }
870
+ void IncrementHttp2StreamStalls() {
871
+ http2_global_stats().IncrementHttp2StreamStalls();
872
+ }
873
+ void IncrementHttp2HpackHits() {
874
+ http2_global_stats().IncrementHttp2HpackHits();
875
+ }
876
+ void IncrementHttp2HpackMisses() {
877
+ http2_global_stats().IncrementHttp2HpackMisses();
878
+ }
827
879
  void IncrementHttp2WritesBegun() {
828
880
  ++data_.http2_writes_begun;
829
- global_stats().IncrementHttp2WritesBegun();
881
+ http2_global_stats().IncrementHttp2WritesBegun();
882
+ }
883
+ void IncrementHttp2SendMessageSize(int value) {
884
+ http2_global_stats().IncrementHttp2SendMessageSize(value);
885
+ }
886
+ void IncrementHttp2MetadataSize(int value) {
887
+ http2_global_stats().IncrementHttp2MetadataSize(value);
888
+ }
889
+ void IncrementHttp2HpackEntryLifetime(int value) {
890
+ http2_global_stats().IncrementHttp2HpackEntryLifetime(value);
891
+ }
892
+ void IncrementHttp2HeaderTableSize(int value) {
893
+ http2_global_stats().IncrementHttp2HeaderTableSize(value);
894
+ }
895
+ void IncrementHttp2InitialWindowSize(int value) {
896
+ http2_global_stats().IncrementHttp2InitialWindowSize(value);
897
+ }
898
+ void IncrementHttp2MaxConcurrentStreams(int value) {
899
+ http2_global_stats().IncrementHttp2MaxConcurrentStreams(value);
900
+ }
901
+ void IncrementHttp2MaxFrameSize(int value) {
902
+ http2_global_stats().IncrementHttp2MaxFrameSize(value);
903
+ }
904
+ void IncrementHttp2MaxHeaderListSize(int value) {
905
+ http2_global_stats().IncrementHttp2MaxHeaderListSize(value);
906
+ }
907
+ void IncrementHttp2PreferredReceiveCryptoMessageSize(int value) {
908
+ http2_global_stats().IncrementHttp2PreferredReceiveCryptoMessageSize(value);
909
+ }
910
+ void IncrementHttp2StreamRemoteWindowUpdate(int value) {
911
+ http2_global_stats().IncrementHttp2StreamRemoteWindowUpdate(value);
912
+ }
913
+ void IncrementHttp2TransportRemoteWindowUpdate(int value) {
914
+ http2_global_stats().IncrementHttp2TransportRemoteWindowUpdate(value);
915
+ }
916
+ void IncrementHttp2TransportWindowUpdatePeriod(int value) {
917
+ http2_global_stats().IncrementHttp2TransportWindowUpdatePeriod(value);
918
+ }
919
+ void IncrementHttp2StreamWindowUpdatePeriod(int value) {
920
+ http2_global_stats().IncrementHttp2StreamWindowUpdatePeriod(value);
921
+ }
922
+ void IncrementHttp2WriteDataFrameSize(int value) {
923
+ http2_global_stats().IncrementHttp2WriteDataFrameSize(value);
924
+ }
925
+ void IncrementHttp2ReadDataFrameSize(int value) {
926
+ http2_global_stats().IncrementHttp2ReadDataFrameSize(value);
830
927
  }
831
928
  void IncrementHttp2WriteTargetSize(int value) {
832
929
  data_.http2_write_target_size.Increment(value);
833
- global_stats().IncrementHttp2WriteTargetSize(value);
930
+ http2_global_stats().IncrementHttp2WriteTargetSize(value);
834
931
  }
835
932
 
836
933
  private:
@@ -131,7 +131,7 @@ class TcpCallTracer {
131
131
  virtual void RecordEvent(
132
132
  grpc_event_engine::experimental::internal::WriteEvent event,
133
133
  absl::Time time, size_t byte_offset,
134
- std::vector<TcpEventMetric> metrics) = 0;
134
+ const std::vector<TcpEventMetric>& metrics) = 0;
135
135
  };
136
136
 
137
137
  class TcpConnectionTracer {
@@ -249,12 +249,20 @@ static tsi_result alts_zero_copy_grpc_protector_max_frame_size(
249
249
  return TSI_OK;
250
250
  }
251
251
 
252
+ static bool alts_zero_copy_grpc_protector_read_frame_size(
253
+ tsi_zero_copy_grpc_protector*, grpc_slice_buffer* protected_slices,
254
+ uint32_t* frame_size) {
255
+ if (frame_size == nullptr) return false;
256
+ return read_frame_size(protected_slices, frame_size);
257
+ }
258
+
252
259
  static const tsi_zero_copy_grpc_protector_vtable
253
260
  alts_zero_copy_grpc_protector_vtable = {
254
261
  alts_zero_copy_grpc_protector_protect,
255
262
  alts_zero_copy_grpc_protector_unprotect,
256
263
  alts_zero_copy_grpc_protector_destroy,
257
- alts_zero_copy_grpc_protector_max_frame_size};
264
+ alts_zero_copy_grpc_protector_max_frame_size,
265
+ alts_zero_copy_grpc_protector_read_frame_size};
258
266
 
259
267
  tsi_result alts_zero_copy_grpc_protector_create(
260
268
  const grpc_core::GsecKeyFactoryInterface& key_factory, bool is_client,
@@ -262,8 +270,8 @@ tsi_result alts_zero_copy_grpc_protector_create(
262
270
  size_t* max_protected_frame_size,
263
271
  tsi_zero_copy_grpc_protector** protector) {
264
272
  if (protector == nullptr) {
265
- LOG(ERROR)
266
- << "Invalid nullptr arguments to alts_zero_copy_grpc_protector create.";
273
+ LOG(ERROR) << "Invalid nullptr arguments to "
274
+ "alts_zero_copy_grpc_protector create.";
267
275
  return TSI_INVALID_ARGUMENT;
268
276
  }
269
277
  // Creates alts_zero_copy_protector.
@@ -520,12 +520,29 @@ static tsi_result fake_zero_copy_grpc_protector_max_frame_size(
520
520
  return TSI_OK;
521
521
  }
522
522
 
523
+ static bool fake_zero_copy_grpc_protector_read_frame_size(
524
+ tsi_zero_copy_grpc_protector*, grpc_slice_buffer* protected_slices,
525
+ uint32_t* frame_size) {
526
+ if (frame_size == nullptr) return false;
527
+ uint32_t parsed_frame_size = 0;
528
+ while (protected_slices->length >= TSI_FAKE_FRAME_HEADER_SIZE) {
529
+ uint32_t parsed_frame_size = read_frame_size(protected_slices);
530
+ if (parsed_frame_size <= 4) {
531
+ LOG(ERROR) << "Invalid frame size.";
532
+ return false;
533
+ }
534
+ }
535
+ *frame_size = parsed_frame_size;
536
+ return true;
537
+ }
538
+
523
539
  static const tsi_zero_copy_grpc_protector_vtable
524
540
  zero_copy_grpc_protector_vtable = {
525
541
  fake_zero_copy_grpc_protector_protect,
526
542
  fake_zero_copy_grpc_protector_unprotect,
527
543
  fake_zero_copy_grpc_protector_destroy,
528
544
  fake_zero_copy_grpc_protector_max_frame_size,
545
+ fake_zero_copy_grpc_protector_read_frame_size,
529
546
  };
530
547
 
531
548
  // --- tsi_handshaker_result methods implementation. ---
@@ -2127,6 +2127,8 @@ tsi_result tsi_ssl_client_handshaker_factory_create_handshaker(
2127
2127
  size_t ssl_bio_buf_size,
2128
2128
  std::optional<std::string> alpn_preferred_protocol_list,
2129
2129
  tsi_handshaker** handshaker) {
2130
+ GRPC_TRACE_LOG(tsi, INFO)
2131
+ << "Creating SSL handshaker with SNI " << server_name_indication;
2130
2132
  return create_tsi_ssl_handshaker(
2131
2133
  factory->ssl_context, 1, server_name_indication, network_bio_buf_size,
2132
2134
  ssl_bio_buf_size, alpn_preferred_protocol_list, &factory->base,
@@ -72,3 +72,11 @@ tsi_result tsi_zero_copy_grpc_protector_max_frame_size(
72
72
  if (self->vtable->max_frame_size == nullptr) return TSI_UNIMPLEMENTED;
73
73
  return self->vtable->max_frame_size(self, max_frame_size);
74
74
  }
75
+
76
+ bool tsi_zero_copy_grpc_protector_read_frame_size(
77
+ tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
78
+ uint32_t* frame_size) {
79
+ if (self == nullptr || frame_size == nullptr) return false;
80
+ if (self->vtable->read_frame_size == nullptr) return false;
81
+ return self->vtable->read_frame_size(self, protected_slices, frame_size);
82
+ }
@@ -64,6 +64,17 @@ void tsi_zero_copy_grpc_protector_destroy(tsi_zero_copy_grpc_protector* self);
64
64
  tsi_result tsi_zero_copy_grpc_protector_max_frame_size(
65
65
  tsi_zero_copy_grpc_protector* self, size_t* max_frame_size);
66
66
 
67
+ // A stateless methods that reads the frame size of the input slice buffer. Does
68
+ // NOT consume any of the protected_slices and does NOT modify the `self` input
69
+ // argument in any way.
70
+ // - protected_slices is the bytes of protected frames.
71
+ // - frame_size is the output frame size.
72
+ // - Returns true in case of success.
73
+ // - Returns false in the case the frame size cannot be read
74
+ bool tsi_zero_copy_grpc_protector_read_frame_size(
75
+ tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
76
+ uint32_t* frame_size);
77
+
67
78
  // Base for tsi_zero_copy_grpc_protector implementations.
68
79
  // Implementations must guarantee that protect and unprotect can be called
69
80
  // concurrently.
@@ -78,7 +89,11 @@ struct tsi_zero_copy_grpc_protector_vtable {
78
89
  void (*destroy)(tsi_zero_copy_grpc_protector* self);
79
90
  tsi_result (*max_frame_size)(tsi_zero_copy_grpc_protector* self,
80
91
  size_t* max_frame_size);
92
+ bool (*read_frame_size)(tsi_zero_copy_grpc_protector* self,
93
+ grpc_slice_buffer* protected_slices,
94
+ uint32_t* frame_size);
81
95
  };
96
+
82
97
  struct tsi_zero_copy_grpc_protector {
83
98
  const tsi_zero_copy_grpc_protector_vtable* vtable;
84
99
  };
@@ -22,9 +22,6 @@
22
22
 
23
23
  #include <algorithm>
24
24
 
25
- #include "src/core/lib/experiments/experiments.h"
26
- #include "src/core/util/shared_bit_gen.h"
27
-
28
25
  namespace grpc_core {
29
26
 
30
27
  BackOff::BackOff(const Options& options) : options_(options) { Reset(); }
@@ -36,9 +33,8 @@ Duration BackOff::NextAttemptDelay() {
36
33
  current_backoff_ *= options_.multiplier();
37
34
  }
38
35
  current_backoff_ = std::min(current_backoff_, options_.max_backoff());
39
- SharedBitGen g;
40
36
  const double jitter =
41
- absl::Uniform(g, 1 - options_.jitter(), 1 + options_.jitter());
37
+ absl::Uniform(bitgen_, 1 - options_.jitter(), 1 + options_.jitter());
42
38
  return current_backoff_ * jitter;
43
39
  }
44
40
 
@@ -79,6 +79,7 @@ class BackOff {
79
79
  bool initial_;
80
80
  /// current delay before retries
81
81
  Duration current_backoff_;
82
+ absl::InsecureBitGen bitgen_;
82
83
  };
83
84
 
84
85
  } // namespace grpc_core
@@ -32,7 +32,7 @@ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION inline To DownCast(From* f) {
32
32
  // If we have RTTI & we're in debug, assert that the cast is legal.
33
33
  #if ABSL_INTERNAL_HAS_RTTI
34
34
  #ifndef NDEBUG
35
- if (f != nullptr) CHECK_NE(dynamic_cast<To>(f), nullptr);
35
+ if (f != nullptr) CHECK_NE(dynamic_cast<To>(f), nullptr) << f;
36
36
  #endif
37
37
  #endif
38
38
  return static_cast<To>(f);