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
@@ -26,9 +26,6 @@ namespace {
26
26
  const char* const description_call_tracer_in_transport =
27
27
  "Transport directly passes byte counts to CallTracer.";
28
28
  const char* const additional_constraints_call_tracer_in_transport = "{}";
29
- const char* const description_callv3_client_auth_filter =
30
- "Use the CallV3 client auth filter.";
31
- const char* const additional_constraints_callv3_client_auth_filter = "{}";
32
29
  const char* const description_chaotic_good_framing_layer =
33
30
  "Enable the chaotic good framing layer.";
34
31
  const char* const additional_constraints_chaotic_good_framing_layer = "{}";
@@ -90,17 +87,15 @@ const char* const additional_constraints_local_connector_secure = "{}";
90
87
  const char* const description_max_inflight_pings_strict_limit =
91
88
  "If set, the max inflight pings limit is strictly enforced.";
92
89
  const char* const additional_constraints_max_inflight_pings_strict_limit = "{}";
93
- const char* const description_max_pings_wo_data_throttle =
94
- "Experiment to throttle pings to a period of 1 min when "
95
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
96
- "completely blocking).";
97
- const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
98
90
  const char* const description_monitoring_experiment =
99
91
  "Placeholder experiment to prove/disprove our monitoring is working";
100
92
  const char* const additional_constraints_monitoring_experiment = "{}";
101
93
  const char* const description_multiping =
102
94
  "Allow more than one ping to be in flight at a time by default.";
103
95
  const char* const additional_constraints_multiping = "{}";
96
+ const char* const description_pick_first_ignore_empty_updates =
97
+ "Ignore empty resolutions in pick_first";
98
+ const char* const additional_constraints_pick_first_ignore_empty_updates = "{}";
104
99
  const char* const description_pollset_alternative =
105
100
  "Code outside iomgr that relies directly on pollsets will use non-pollset "
106
101
  "alternatives when enabled.";
@@ -108,10 +103,10 @@ const char* const additional_constraints_pollset_alternative = "{}";
108
103
  const uint8_t required_experiments_pollset_alternative[] = {
109
104
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient),
110
105
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)};
111
- const char* const description_posix_ee_skip_grpc_init =
112
- "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on "
113
- "creation and destruction.";
114
- const char* const additional_constraints_posix_ee_skip_grpc_init = "{}";
106
+ const char* const description_prioritize_finished_requests =
107
+ "Prioritize flushing out finished requests over other in-flight requests "
108
+ "during transport writes.";
109
+ const char* const additional_constraints_prioritize_finished_requests = "{}";
115
110
  const char* const description_promise_based_http2_client_transport =
116
111
  "Use promises for the http2 client transport. We have kept client and "
117
112
  "server transport experiments separate to help with smoother roll outs and "
@@ -129,14 +124,6 @@ const char* const description_promise_based_inproc_transport =
129
124
  const char* const additional_constraints_promise_based_inproc_transport = "{}";
130
125
  const char* const description_retry_in_callv3 = "Support retries with call-v3";
131
126
  const char* const additional_constraints_retry_in_callv3 = "{}";
132
- const char* const description_rq_fast_reject =
133
- "Resource quota rejects requests immediately (before allocating the "
134
- "request structure) under very high memory pressure.";
135
- const char* const additional_constraints_rq_fast_reject = "{}";
136
- const char* const description_rst_stream_fix =
137
- "Fix for RST_STREAM - do not send for idle streams "
138
- "(https://github.com/grpc/grpc/issues/38758)";
139
- const char* const additional_constraints_rst_stream_fix = "{}";
140
127
  const char* const description_schedule_cancellation_over_write =
141
128
  "Allow cancellation op to be scheduled over a write";
142
129
  const char* const additional_constraints_schedule_cancellation_over_write =
@@ -192,8 +179,6 @@ namespace grpc_core {
192
179
  const ExperimentMetadata g_experiment_metadata[] = {
193
180
  {"call_tracer_in_transport", description_call_tracer_in_transport,
194
181
  additional_constraints_call_tracer_in_transport, nullptr, 0, true, false},
195
- {"callv3_client_auth_filter", description_callv3_client_auth_filter,
196
- additional_constraints_callv3_client_auth_filter, nullptr, 0, false, true},
197
182
  {"chaotic_good_framing_layer", description_chaotic_good_framing_layer,
198
183
  additional_constraints_chaotic_good_framing_layer, nullptr, 0, true,
199
184
  false},
@@ -208,7 +193,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
208
193
  {"event_engine_dns_non_client_channel",
209
194
  description_event_engine_dns_non_client_channel,
210
195
  additional_constraints_event_engine_dns_non_client_channel, nullptr, 0,
211
- false, false},
196
+ true, false},
212
197
  {"event_engine_fork", description_event_engine_fork,
213
198
  additional_constraints_event_engine_fork, nullptr, 0, false, false},
214
199
  {"event_engine_listener", description_event_engine_listener,
@@ -234,17 +219,20 @@ const ExperimentMetadata g_experiment_metadata[] = {
234
219
  description_max_inflight_pings_strict_limit,
235
220
  additional_constraints_max_inflight_pings_strict_limit, nullptr, 0, true,
236
221
  true},
237
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
238
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, true, true},
239
222
  {"monitoring_experiment", description_monitoring_experiment,
240
223
  additional_constraints_monitoring_experiment, nullptr, 0, true, true},
241
224
  {"multiping", description_multiping, additional_constraints_multiping,
242
225
  nullptr, 0, false, true},
226
+ {"pick_first_ignore_empty_updates",
227
+ description_pick_first_ignore_empty_updates,
228
+ additional_constraints_pick_first_ignore_empty_updates, nullptr, 0, false,
229
+ true},
243
230
  {"pollset_alternative", description_pollset_alternative,
244
231
  additional_constraints_pollset_alternative,
245
232
  required_experiments_pollset_alternative, 2, false, false},
246
- {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init,
247
- additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, true, true},
233
+ {"prioritize_finished_requests", description_prioritize_finished_requests,
234
+ additional_constraints_prioritize_finished_requests, nullptr, 0, false,
235
+ true},
248
236
  {"promise_based_http2_client_transport",
249
237
  description_promise_based_http2_client_transport,
250
238
  additional_constraints_promise_based_http2_client_transport, nullptr, 0,
@@ -259,10 +247,6 @@ const ExperimentMetadata g_experiment_metadata[] = {
259
247
  false},
260
248
  {"retry_in_callv3", description_retry_in_callv3,
261
249
  additional_constraints_retry_in_callv3, nullptr, 0, false, true},
262
- {"rq_fast_reject", description_rq_fast_reject,
263
- additional_constraints_rq_fast_reject, nullptr, 0, false, true},
264
- {"rst_stream_fix", description_rst_stream_fix,
265
- additional_constraints_rst_stream_fix, nullptr, 0, true, true},
266
250
  {"schedule_cancellation_over_write",
267
251
  description_schedule_cancellation_over_write,
268
252
  additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
@@ -307,9 +291,6 @@ namespace {
307
291
  const char* const description_call_tracer_in_transport =
308
292
  "Transport directly passes byte counts to CallTracer.";
309
293
  const char* const additional_constraints_call_tracer_in_transport = "{}";
310
- const char* const description_callv3_client_auth_filter =
311
- "Use the CallV3 client auth filter.";
312
- const char* const additional_constraints_callv3_client_auth_filter = "{}";
313
294
  const char* const description_chaotic_good_framing_layer =
314
295
  "Enable the chaotic good framing layer.";
315
296
  const char* const additional_constraints_chaotic_good_framing_layer = "{}";
@@ -371,17 +352,15 @@ const char* const additional_constraints_local_connector_secure = "{}";
371
352
  const char* const description_max_inflight_pings_strict_limit =
372
353
  "If set, the max inflight pings limit is strictly enforced.";
373
354
  const char* const additional_constraints_max_inflight_pings_strict_limit = "{}";
374
- const char* const description_max_pings_wo_data_throttle =
375
- "Experiment to throttle pings to a period of 1 min when "
376
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
377
- "completely blocking).";
378
- const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
379
355
  const char* const description_monitoring_experiment =
380
356
  "Placeholder experiment to prove/disprove our monitoring is working";
381
357
  const char* const additional_constraints_monitoring_experiment = "{}";
382
358
  const char* const description_multiping =
383
359
  "Allow more than one ping to be in flight at a time by default.";
384
360
  const char* const additional_constraints_multiping = "{}";
361
+ const char* const description_pick_first_ignore_empty_updates =
362
+ "Ignore empty resolutions in pick_first";
363
+ const char* const additional_constraints_pick_first_ignore_empty_updates = "{}";
385
364
  const char* const description_pollset_alternative =
386
365
  "Code outside iomgr that relies directly on pollsets will use non-pollset "
387
366
  "alternatives when enabled.";
@@ -389,10 +368,10 @@ const char* const additional_constraints_pollset_alternative = "{}";
389
368
  const uint8_t required_experiments_pollset_alternative[] = {
390
369
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient),
391
370
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)};
392
- const char* const description_posix_ee_skip_grpc_init =
393
- "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on "
394
- "creation and destruction.";
395
- const char* const additional_constraints_posix_ee_skip_grpc_init = "{}";
371
+ const char* const description_prioritize_finished_requests =
372
+ "Prioritize flushing out finished requests over other in-flight requests "
373
+ "during transport writes.";
374
+ const char* const additional_constraints_prioritize_finished_requests = "{}";
396
375
  const char* const description_promise_based_http2_client_transport =
397
376
  "Use promises for the http2 client transport. We have kept client and "
398
377
  "server transport experiments separate to help with smoother roll outs and "
@@ -410,14 +389,6 @@ const char* const description_promise_based_inproc_transport =
410
389
  const char* const additional_constraints_promise_based_inproc_transport = "{}";
411
390
  const char* const description_retry_in_callv3 = "Support retries with call-v3";
412
391
  const char* const additional_constraints_retry_in_callv3 = "{}";
413
- const char* const description_rq_fast_reject =
414
- "Resource quota rejects requests immediately (before allocating the "
415
- "request structure) under very high memory pressure.";
416
- const char* const additional_constraints_rq_fast_reject = "{}";
417
- const char* const description_rst_stream_fix =
418
- "Fix for RST_STREAM - do not send for idle streams "
419
- "(https://github.com/grpc/grpc/issues/38758)";
420
- const char* const additional_constraints_rst_stream_fix = "{}";
421
392
  const char* const description_schedule_cancellation_over_write =
422
393
  "Allow cancellation op to be scheduled over a write";
423
394
  const char* const additional_constraints_schedule_cancellation_over_write =
@@ -473,8 +444,6 @@ namespace grpc_core {
473
444
  const ExperimentMetadata g_experiment_metadata[] = {
474
445
  {"call_tracer_in_transport", description_call_tracer_in_transport,
475
446
  additional_constraints_call_tracer_in_transport, nullptr, 0, true, false},
476
- {"callv3_client_auth_filter", description_callv3_client_auth_filter,
477
- additional_constraints_callv3_client_auth_filter, nullptr, 0, false, true},
478
447
  {"chaotic_good_framing_layer", description_chaotic_good_framing_layer,
479
448
  additional_constraints_chaotic_good_framing_layer, nullptr, 0, true,
480
449
  false},
@@ -489,7 +458,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
489
458
  {"event_engine_dns_non_client_channel",
490
459
  description_event_engine_dns_non_client_channel,
491
460
  additional_constraints_event_engine_dns_non_client_channel, nullptr, 0,
492
- false, false},
461
+ true, false},
493
462
  {"event_engine_fork", description_event_engine_fork,
494
463
  additional_constraints_event_engine_fork, nullptr, 0, false, false},
495
464
  {"event_engine_listener", description_event_engine_listener,
@@ -515,17 +484,20 @@ const ExperimentMetadata g_experiment_metadata[] = {
515
484
  description_max_inflight_pings_strict_limit,
516
485
  additional_constraints_max_inflight_pings_strict_limit, nullptr, 0, true,
517
486
  true},
518
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
519
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, true, true},
520
487
  {"monitoring_experiment", description_monitoring_experiment,
521
488
  additional_constraints_monitoring_experiment, nullptr, 0, true, true},
522
489
  {"multiping", description_multiping, additional_constraints_multiping,
523
490
  nullptr, 0, false, true},
491
+ {"pick_first_ignore_empty_updates",
492
+ description_pick_first_ignore_empty_updates,
493
+ additional_constraints_pick_first_ignore_empty_updates, nullptr, 0, false,
494
+ true},
524
495
  {"pollset_alternative", description_pollset_alternative,
525
496
  additional_constraints_pollset_alternative,
526
497
  required_experiments_pollset_alternative, 2, false, false},
527
- {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init,
528
- additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, true, true},
498
+ {"prioritize_finished_requests", description_prioritize_finished_requests,
499
+ additional_constraints_prioritize_finished_requests, nullptr, 0, false,
500
+ true},
529
501
  {"promise_based_http2_client_transport",
530
502
  description_promise_based_http2_client_transport,
531
503
  additional_constraints_promise_based_http2_client_transport, nullptr, 0,
@@ -540,10 +512,6 @@ const ExperimentMetadata g_experiment_metadata[] = {
540
512
  false},
541
513
  {"retry_in_callv3", description_retry_in_callv3,
542
514
  additional_constraints_retry_in_callv3, nullptr, 0, false, true},
543
- {"rq_fast_reject", description_rq_fast_reject,
544
- additional_constraints_rq_fast_reject, nullptr, 0, false, true},
545
- {"rst_stream_fix", description_rst_stream_fix,
546
- additional_constraints_rst_stream_fix, nullptr, 0, true, true},
547
515
  {"schedule_cancellation_over_write",
548
516
  description_schedule_cancellation_over_write,
549
517
  additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
@@ -588,9 +556,6 @@ namespace {
588
556
  const char* const description_call_tracer_in_transport =
589
557
  "Transport directly passes byte counts to CallTracer.";
590
558
  const char* const additional_constraints_call_tracer_in_transport = "{}";
591
- const char* const description_callv3_client_auth_filter =
592
- "Use the CallV3 client auth filter.";
593
- const char* const additional_constraints_callv3_client_auth_filter = "{}";
594
559
  const char* const description_chaotic_good_framing_layer =
595
560
  "Enable the chaotic good framing layer.";
596
561
  const char* const additional_constraints_chaotic_good_framing_layer = "{}";
@@ -652,17 +617,15 @@ const char* const additional_constraints_local_connector_secure = "{}";
652
617
  const char* const description_max_inflight_pings_strict_limit =
653
618
  "If set, the max inflight pings limit is strictly enforced.";
654
619
  const char* const additional_constraints_max_inflight_pings_strict_limit = "{}";
655
- const char* const description_max_pings_wo_data_throttle =
656
- "Experiment to throttle pings to a period of 1 min when "
657
- "GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA limit has reached (instead of "
658
- "completely blocking).";
659
- const char* const additional_constraints_max_pings_wo_data_throttle = "{}";
660
620
  const char* const description_monitoring_experiment =
661
621
  "Placeholder experiment to prove/disprove our monitoring is working";
662
622
  const char* const additional_constraints_monitoring_experiment = "{}";
663
623
  const char* const description_multiping =
664
624
  "Allow more than one ping to be in flight at a time by default.";
665
625
  const char* const additional_constraints_multiping = "{}";
626
+ const char* const description_pick_first_ignore_empty_updates =
627
+ "Ignore empty resolutions in pick_first";
628
+ const char* const additional_constraints_pick_first_ignore_empty_updates = "{}";
666
629
  const char* const description_pollset_alternative =
667
630
  "Code outside iomgr that relies directly on pollsets will use non-pollset "
668
631
  "alternatives when enabled.";
@@ -670,10 +633,10 @@ const char* const additional_constraints_pollset_alternative = "{}";
670
633
  const uint8_t required_experiments_pollset_alternative[] = {
671
634
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineClient),
672
635
  static_cast<uint8_t>(grpc_core::kExperimentIdEventEngineListener)};
673
- const char* const description_posix_ee_skip_grpc_init =
674
- "Prevent the PosixEventEngine from calling grpc_init & grpc_shutdown on "
675
- "creation and destruction.";
676
- const char* const additional_constraints_posix_ee_skip_grpc_init = "{}";
636
+ const char* const description_prioritize_finished_requests =
637
+ "Prioritize flushing out finished requests over other in-flight requests "
638
+ "during transport writes.";
639
+ const char* const additional_constraints_prioritize_finished_requests = "{}";
677
640
  const char* const description_promise_based_http2_client_transport =
678
641
  "Use promises for the http2 client transport. We have kept client and "
679
642
  "server transport experiments separate to help with smoother roll outs and "
@@ -691,14 +654,6 @@ const char* const description_promise_based_inproc_transport =
691
654
  const char* const additional_constraints_promise_based_inproc_transport = "{}";
692
655
  const char* const description_retry_in_callv3 = "Support retries with call-v3";
693
656
  const char* const additional_constraints_retry_in_callv3 = "{}";
694
- const char* const description_rq_fast_reject =
695
- "Resource quota rejects requests immediately (before allocating the "
696
- "request structure) under very high memory pressure.";
697
- const char* const additional_constraints_rq_fast_reject = "{}";
698
- const char* const description_rst_stream_fix =
699
- "Fix for RST_STREAM - do not send for idle streams "
700
- "(https://github.com/grpc/grpc/issues/38758)";
701
- const char* const additional_constraints_rst_stream_fix = "{}";
702
657
  const char* const description_schedule_cancellation_over_write =
703
658
  "Allow cancellation op to be scheduled over a write";
704
659
  const char* const additional_constraints_schedule_cancellation_over_write =
@@ -754,8 +709,6 @@ namespace grpc_core {
754
709
  const ExperimentMetadata g_experiment_metadata[] = {
755
710
  {"call_tracer_in_transport", description_call_tracer_in_transport,
756
711
  additional_constraints_call_tracer_in_transport, nullptr, 0, true, false},
757
- {"callv3_client_auth_filter", description_callv3_client_auth_filter,
758
- additional_constraints_callv3_client_auth_filter, nullptr, 0, false, true},
759
712
  {"chaotic_good_framing_layer", description_chaotic_good_framing_layer,
760
713
  additional_constraints_chaotic_good_framing_layer, nullptr, 0, true,
761
714
  false},
@@ -770,7 +723,7 @@ const ExperimentMetadata g_experiment_metadata[] = {
770
723
  {"event_engine_dns_non_client_channel",
771
724
  description_event_engine_dns_non_client_channel,
772
725
  additional_constraints_event_engine_dns_non_client_channel, nullptr, 0,
773
- false, false},
726
+ true, false},
774
727
  {"event_engine_fork", description_event_engine_fork,
775
728
  additional_constraints_event_engine_fork, nullptr, 0, false, false},
776
729
  {"event_engine_listener", description_event_engine_listener,
@@ -796,17 +749,20 @@ const ExperimentMetadata g_experiment_metadata[] = {
796
749
  description_max_inflight_pings_strict_limit,
797
750
  additional_constraints_max_inflight_pings_strict_limit, nullptr, 0, true,
798
751
  true},
799
- {"max_pings_wo_data_throttle", description_max_pings_wo_data_throttle,
800
- additional_constraints_max_pings_wo_data_throttle, nullptr, 0, true, true},
801
752
  {"monitoring_experiment", description_monitoring_experiment,
802
753
  additional_constraints_monitoring_experiment, nullptr, 0, true, true},
803
754
  {"multiping", description_multiping, additional_constraints_multiping,
804
755
  nullptr, 0, false, true},
756
+ {"pick_first_ignore_empty_updates",
757
+ description_pick_first_ignore_empty_updates,
758
+ additional_constraints_pick_first_ignore_empty_updates, nullptr, 0, false,
759
+ true},
805
760
  {"pollset_alternative", description_pollset_alternative,
806
761
  additional_constraints_pollset_alternative,
807
762
  required_experiments_pollset_alternative, 2, false, false},
808
- {"posix_ee_skip_grpc_init", description_posix_ee_skip_grpc_init,
809
- additional_constraints_posix_ee_skip_grpc_init, nullptr, 0, true, true},
763
+ {"prioritize_finished_requests", description_prioritize_finished_requests,
764
+ additional_constraints_prioritize_finished_requests, nullptr, 0, false,
765
+ true},
810
766
  {"promise_based_http2_client_transport",
811
767
  description_promise_based_http2_client_transport,
812
768
  additional_constraints_promise_based_http2_client_transport, nullptr, 0,
@@ -821,10 +777,6 @@ const ExperimentMetadata g_experiment_metadata[] = {
821
777
  false},
822
778
  {"retry_in_callv3", description_retry_in_callv3,
823
779
  additional_constraints_retry_in_callv3, nullptr, 0, false, true},
824
- {"rq_fast_reject", description_rq_fast_reject,
825
- additional_constraints_rq_fast_reject, nullptr, 0, false, true},
826
- {"rst_stream_fix", description_rst_stream_fix,
827
- additional_constraints_rst_stream_fix, nullptr, 0, true, true},
828
780
  {"schedule_cancellation_over_write",
829
781
  description_schedule_cancellation_over_write,
830
782
  additional_constraints_schedule_cancellation_over_write, nullptr, 0, false,
@@ -59,7 +59,6 @@ namespace grpc_core {
59
59
  #if defined(GRPC_CFSTREAM)
60
60
  #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
61
61
  inline bool IsCallTracerInTransportEnabled() { return true; }
62
- inline bool IsCallv3ClientAuthFilterEnabled() { return false; }
63
62
  #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER
64
63
  inline bool IsChaoticGoodFramingLayerEnabled() { return true; }
65
64
  inline bool IsChttp2BoundWriteSizeEnabled() { return false; }
@@ -68,7 +67,8 @@ inline bool IsErrorFlattenEnabled() { return false; }
68
67
  inline bool IsEventEngineClientEnabled() { return true; }
69
68
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
70
69
  inline bool IsEventEngineDnsEnabled() { return true; }
71
- inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
70
+ #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS_NON_CLIENT_CHANNEL
71
+ inline bool IsEventEngineDnsNonClientChannelEnabled() { return true; }
72
72
  inline bool IsEventEngineForkEnabled() { return false; }
73
73
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
74
74
  inline bool IsEventEngineListenerEnabled() { return true; }
@@ -83,21 +83,16 @@ inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
83
83
  inline bool IsLocalConnectorSecureEnabled() { return false; }
84
84
  #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_INFLIGHT_PINGS_STRICT_LIMIT
85
85
  inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
86
- #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
87
- inline bool IsMaxPingsWoDataThrottleEnabled() { return true; }
88
86
  #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
89
87
  inline bool IsMonitoringExperimentEnabled() { return true; }
90
88
  inline bool IsMultipingEnabled() { return false; }
89
+ inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
91
90
  inline bool IsPollsetAlternativeEnabled() { return false; }
92
- #define GRPC_EXPERIMENT_IS_INCLUDED_POSIX_EE_SKIP_GRPC_INIT
93
- inline bool IsPosixEeSkipGrpcInitEnabled() { return true; }
91
+ inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
94
92
  inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
95
93
  inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
96
94
  inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
97
95
  inline bool IsRetryInCallv3Enabled() { return false; }
98
- inline bool IsRqFastRejectEnabled() { return false; }
99
- #define GRPC_EXPERIMENT_IS_INCLUDED_RST_STREAM_FIX
100
- inline bool IsRstStreamFixEnabled() { return true; }
101
96
  inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
102
97
  inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; }
103
98
  inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; }
@@ -113,7 +108,6 @@ inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
113
108
  #elif defined(GPR_WINDOWS)
114
109
  #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
115
110
  inline bool IsCallTracerInTransportEnabled() { return true; }
116
- inline bool IsCallv3ClientAuthFilterEnabled() { return false; }
117
111
  #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER
118
112
  inline bool IsChaoticGoodFramingLayerEnabled() { return true; }
119
113
  inline bool IsChttp2BoundWriteSizeEnabled() { return false; }
@@ -122,7 +116,8 @@ inline bool IsErrorFlattenEnabled() { return false; }
122
116
  inline bool IsEventEngineClientEnabled() { return true; }
123
117
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
124
118
  inline bool IsEventEngineDnsEnabled() { return true; }
125
- inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
119
+ #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS_NON_CLIENT_CHANNEL
120
+ inline bool IsEventEngineDnsNonClientChannelEnabled() { return true; }
126
121
  inline bool IsEventEngineForkEnabled() { return false; }
127
122
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
128
123
  inline bool IsEventEngineListenerEnabled() { return true; }
@@ -137,21 +132,16 @@ inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
137
132
  inline bool IsLocalConnectorSecureEnabled() { return false; }
138
133
  #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_INFLIGHT_PINGS_STRICT_LIMIT
139
134
  inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
140
- #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
141
- inline bool IsMaxPingsWoDataThrottleEnabled() { return true; }
142
135
  #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
143
136
  inline bool IsMonitoringExperimentEnabled() { return true; }
144
137
  inline bool IsMultipingEnabled() { return false; }
138
+ inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
145
139
  inline bool IsPollsetAlternativeEnabled() { return false; }
146
- #define GRPC_EXPERIMENT_IS_INCLUDED_POSIX_EE_SKIP_GRPC_INIT
147
- inline bool IsPosixEeSkipGrpcInitEnabled() { return true; }
140
+ inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
148
141
  inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
149
142
  inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
150
143
  inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
151
144
  inline bool IsRetryInCallv3Enabled() { return false; }
152
- inline bool IsRqFastRejectEnabled() { return false; }
153
- #define GRPC_EXPERIMENT_IS_INCLUDED_RST_STREAM_FIX
154
- inline bool IsRstStreamFixEnabled() { return true; }
155
145
  inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
156
146
  inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; }
157
147
  inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; }
@@ -167,7 +157,6 @@ inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
167
157
  #else
168
158
  #define GRPC_EXPERIMENT_IS_INCLUDED_CALL_TRACER_IN_TRANSPORT
169
159
  inline bool IsCallTracerInTransportEnabled() { return true; }
170
- inline bool IsCallv3ClientAuthFilterEnabled() { return false; }
171
160
  #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER
172
161
  inline bool IsChaoticGoodFramingLayerEnabled() { return true; }
173
162
  inline bool IsChttp2BoundWriteSizeEnabled() { return false; }
@@ -176,7 +165,8 @@ inline bool IsErrorFlattenEnabled() { return false; }
176
165
  inline bool IsEventEngineClientEnabled() { return true; }
177
166
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS
178
167
  inline bool IsEventEngineDnsEnabled() { return true; }
179
- inline bool IsEventEngineDnsNonClientChannelEnabled() { return false; }
168
+ #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_DNS_NON_CLIENT_CHANNEL
169
+ inline bool IsEventEngineDnsNonClientChannelEnabled() { return true; }
180
170
  inline bool IsEventEngineForkEnabled() { return false; }
181
171
  #define GRPC_EXPERIMENT_IS_INCLUDED_EVENT_ENGINE_LISTENER
182
172
  inline bool IsEventEngineListenerEnabled() { return true; }
@@ -191,21 +181,16 @@ inline bool IsKeepAlivePingTimerBatchEnabled() { return false; }
191
181
  inline bool IsLocalConnectorSecureEnabled() { return false; }
192
182
  #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_INFLIGHT_PINGS_STRICT_LIMIT
193
183
  inline bool IsMaxInflightPingsStrictLimitEnabled() { return true; }
194
- #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
195
- inline bool IsMaxPingsWoDataThrottleEnabled() { return true; }
196
184
  #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
197
185
  inline bool IsMonitoringExperimentEnabled() { return true; }
198
186
  inline bool IsMultipingEnabled() { return false; }
187
+ inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() { return false; }
199
188
  inline bool IsPollsetAlternativeEnabled() { return false; }
200
- #define GRPC_EXPERIMENT_IS_INCLUDED_POSIX_EE_SKIP_GRPC_INIT
201
- inline bool IsPosixEeSkipGrpcInitEnabled() { return true; }
189
+ inline bool IsPrioritizeFinishedRequestsEnabled() { return false; }
202
190
  inline bool IsPromiseBasedHttp2ClientTransportEnabled() { return false; }
203
191
  inline bool IsPromiseBasedHttp2ServerTransportEnabled() { return false; }
204
192
  inline bool IsPromiseBasedInprocTransportEnabled() { return false; }
205
193
  inline bool IsRetryInCallv3Enabled() { return false; }
206
- inline bool IsRqFastRejectEnabled() { return false; }
207
- #define GRPC_EXPERIMENT_IS_INCLUDED_RST_STREAM_FIX
208
- inline bool IsRstStreamFixEnabled() { return true; }
209
194
  inline bool IsScheduleCancellationOverWriteEnabled() { return false; }
210
195
  inline bool IsSecureEndpointOffloadLargeReadsEnabled() { return false; }
211
196
  inline bool IsSecureEndpointOffloadLargeWritesEnabled() { return false; }
@@ -222,7 +207,6 @@ inline bool IsUnconstrainedMaxQuotaBufferSizeEnabled() { return false; }
222
207
  #else
223
208
  enum ExperimentIds {
224
209
  kExperimentIdCallTracerInTransport,
225
- kExperimentIdCallv3ClientAuthFilter,
226
210
  kExperimentIdChaoticGoodFramingLayer,
227
211
  kExperimentIdChttp2BoundWriteSize,
228
212
  kExperimentIdErrorFlatten,
@@ -238,17 +222,15 @@ enum ExperimentIds {
238
222
  kExperimentIdKeepAlivePingTimerBatch,
239
223
  kExperimentIdLocalConnectorSecure,
240
224
  kExperimentIdMaxInflightPingsStrictLimit,
241
- kExperimentIdMaxPingsWoDataThrottle,
242
225
  kExperimentIdMonitoringExperiment,
243
226
  kExperimentIdMultiping,
227
+ kExperimentIdPickFirstIgnoreEmptyUpdates,
244
228
  kExperimentIdPollsetAlternative,
245
- kExperimentIdPosixEeSkipGrpcInit,
229
+ kExperimentIdPrioritizeFinishedRequests,
246
230
  kExperimentIdPromiseBasedHttp2ClientTransport,
247
231
  kExperimentIdPromiseBasedHttp2ServerTransport,
248
232
  kExperimentIdPromiseBasedInprocTransport,
249
233
  kExperimentIdRetryInCallv3,
250
- kExperimentIdRqFastReject,
251
- kExperimentIdRstStreamFix,
252
234
  kExperimentIdScheduleCancellationOverWrite,
253
235
  kExperimentIdSecureEndpointOffloadLargeReads,
254
236
  kExperimentIdSecureEndpointOffloadLargeWrites,
@@ -265,10 +247,6 @@ enum ExperimentIds {
265
247
  inline bool IsCallTracerInTransportEnabled() {
266
248
  return IsExperimentEnabled<kExperimentIdCallTracerInTransport>();
267
249
  }
268
- #define GRPC_EXPERIMENT_IS_INCLUDED_CALLV3_CLIENT_AUTH_FILTER
269
- inline bool IsCallv3ClientAuthFilterEnabled() {
270
- return IsExperimentEnabled<kExperimentIdCallv3ClientAuthFilter>();
271
- }
272
250
  #define GRPC_EXPERIMENT_IS_INCLUDED_CHAOTIC_GOOD_FRAMING_LAYER
273
251
  inline bool IsChaoticGoodFramingLayerEnabled() {
274
252
  return IsExperimentEnabled<kExperimentIdChaoticGoodFramingLayer>();
@@ -329,10 +307,6 @@ inline bool IsLocalConnectorSecureEnabled() {
329
307
  inline bool IsMaxInflightPingsStrictLimitEnabled() {
330
308
  return IsExperimentEnabled<kExperimentIdMaxInflightPingsStrictLimit>();
331
309
  }
332
- #define GRPC_EXPERIMENT_IS_INCLUDED_MAX_PINGS_WO_DATA_THROTTLE
333
- inline bool IsMaxPingsWoDataThrottleEnabled() {
334
- return IsExperimentEnabled<kExperimentIdMaxPingsWoDataThrottle>();
335
- }
336
310
  #define GRPC_EXPERIMENT_IS_INCLUDED_MONITORING_EXPERIMENT
337
311
  inline bool IsMonitoringExperimentEnabled() {
338
312
  return IsExperimentEnabled<kExperimentIdMonitoringExperiment>();
@@ -341,13 +315,17 @@ inline bool IsMonitoringExperimentEnabled() {
341
315
  inline bool IsMultipingEnabled() {
342
316
  return IsExperimentEnabled<kExperimentIdMultiping>();
343
317
  }
318
+ #define GRPC_EXPERIMENT_IS_INCLUDED_PICK_FIRST_IGNORE_EMPTY_UPDATES
319
+ inline bool IsPickFirstIgnoreEmptyUpdatesEnabled() {
320
+ return IsExperimentEnabled<kExperimentIdPickFirstIgnoreEmptyUpdates>();
321
+ }
344
322
  #define GRPC_EXPERIMENT_IS_INCLUDED_POLLSET_ALTERNATIVE
345
323
  inline bool IsPollsetAlternativeEnabled() {
346
324
  return IsExperimentEnabled<kExperimentIdPollsetAlternative>();
347
325
  }
348
- #define GRPC_EXPERIMENT_IS_INCLUDED_POSIX_EE_SKIP_GRPC_INIT
349
- inline bool IsPosixEeSkipGrpcInitEnabled() {
350
- return IsExperimentEnabled<kExperimentIdPosixEeSkipGrpcInit>();
326
+ #define GRPC_EXPERIMENT_IS_INCLUDED_PRIORITIZE_FINISHED_REQUESTS
327
+ inline bool IsPrioritizeFinishedRequestsEnabled() {
328
+ return IsExperimentEnabled<kExperimentIdPrioritizeFinishedRequests>();
351
329
  }
352
330
  #define GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_HTTP2_CLIENT_TRANSPORT
353
331
  inline bool IsPromiseBasedHttp2ClientTransportEnabled() {
@@ -365,14 +343,6 @@ inline bool IsPromiseBasedInprocTransportEnabled() {
365
343
  inline bool IsRetryInCallv3Enabled() {
366
344
  return IsExperimentEnabled<kExperimentIdRetryInCallv3>();
367
345
  }
368
- #define GRPC_EXPERIMENT_IS_INCLUDED_RQ_FAST_REJECT
369
- inline bool IsRqFastRejectEnabled() {
370
- return IsExperimentEnabled<kExperimentIdRqFastReject>();
371
- }
372
- #define GRPC_EXPERIMENT_IS_INCLUDED_RST_STREAM_FIX
373
- inline bool IsRstStreamFixEnabled() {
374
- return IsExperimentEnabled<kExperimentIdRstStreamFix>();
375
- }
376
346
  #define GRPC_EXPERIMENT_IS_INCLUDED_SCHEDULE_CANCELLATION_OVER_WRITE
377
347
  inline bool IsScheduleCancellationOverWriteEnabled() {
378
348
  return IsExperimentEnabled<kExperimentIdScheduleCancellationOverWrite>();
@@ -25,9 +25,10 @@ void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
25
25
  ep->vtable->read(ep, slices, cb, urgent, min_progress_size);
26
26
  }
27
27
 
28
- void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
29
- grpc_closure* cb, void* arg, int max_frame_size) {
30
- ep->vtable->write(ep, slices, cb, arg, max_frame_size);
28
+ void grpc_endpoint_write(
29
+ grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
30
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
31
+ ep->vtable->write(ep, slices, cb, std::move(args));
31
32
  }
32
33
 
33
34
  void grpc_endpoint_add_to_pollset(grpc_endpoint* ep, grpc_pollset* pollset) {
@@ -19,6 +19,7 @@
19
19
  #ifndef GRPC_SRC_CORE_LIB_IOMGR_ENDPOINT_H
20
20
  #define GRPC_SRC_CORE_LIB_IOMGR_ENDPOINT_H
21
21
 
22
+ #include <grpc/event_engine/event_engine.h>
22
23
  #include <grpc/slice.h>
23
24
  #include <grpc/slice_buffer.h>
24
25
  #include <grpc/support/port_platform.h>
@@ -37,8 +38,9 @@ typedef struct grpc_endpoint_vtable grpc_endpoint_vtable;
37
38
  struct grpc_endpoint_vtable {
38
39
  void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
39
40
  bool urgent, int min_progress_size);
40
- void (*write)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
41
- void* arg, int max_frame_size);
41
+ void (*write)(
42
+ grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
43
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args);
42
44
  void (*add_to_pollset)(grpc_endpoint* ep, grpc_pollset* pollset);
43
45
  void (*add_to_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
44
46
  void (*delete_from_pollset_set)(grpc_endpoint* ep, grpc_pollset_set* pollset);
@@ -79,8 +81,9 @@ int grpc_endpoint_get_fd(grpc_endpoint* ep);
79
81
  // \a max_frame_size. A hint to the endpoint implementation to construct
80
82
  // frames which do not exceed the specified size.
81
83
  //
82
- void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
83
- grpc_closure* cb, void* arg, int max_frame_size);
84
+ void grpc_endpoint_write(
85
+ grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
86
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs arg);
84
87
 
85
88
  // Causes any pending and future read/write callbacks to run immediately with
86
89
  // success==0
@@ -244,8 +244,9 @@ static void CFStreamRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
244
244
  }
245
245
 
246
246
  static void CFStreamWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
247
- grpc_closure* cb, void* /*arg*/,
248
- int /*max_frame_size*/) {
247
+ grpc_closure* cb,
248
+ grpc_event_engine::experimental::EventEngine::
249
+ Endpoint::WriteArgs /*args*/) {
249
250
  CFStreamEndpoint* ep_impl = reinterpret_cast<CFStreamEndpoint*>(ep);
250
251
  GRPC_TRACE_VLOG(tcp, 2) << "CFStream endpoint:" << ep_impl << " write ("
251
252
  << slices << ", " << cb
@@ -45,6 +45,7 @@
45
45
  #include "absl/strings/str_cat.h"
46
46
  #include "absl/strings/str_format.h"
47
47
  #include "absl/strings/str_join.h"
48
+ #include "src/core/lib/event_engine/shim.h"
48
49
  #include "src/core/lib/experiments/experiments.h"
49
50
  #include "src/core/lib/iomgr/block_annotate.h"
50
51
  #include "src/core/lib/iomgr/ev_epoll1_linux.h"
@@ -333,7 +334,9 @@ static void fork_fd_list_remove_grpc_fd(grpc_fd* fd) {
333
334
 
334
335
  static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
335
336
  grpc_fd* new_fd = nullptr;
336
- if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()) {
337
+ if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
338
+ !grpc_event_engine::experimental::
339
+ EventEngineExperimentDisabledForPython()) {
337
340
  grpc_fd* new_fd = static_cast<grpc_fd*>(gpr_malloc(sizeof(grpc_fd)));
338
341
  new_fd->fd = fd;
339
342
  return new_fd;
@@ -415,7 +418,9 @@ static void fd_shutdown(grpc_fd* fd, grpc_error_handle why) {
415
418
 
416
419
  static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
417
420
  const char* reason) {
418
- if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()) {
421
+ if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
422
+ !grpc_event_engine::experimental::
423
+ EventEngineExperimentDisabledForPython()) {
419
424
  CHECK_NE(release_fd, nullptr);
420
425
  CHECK_EQ(on_done, nullptr);
421
426
  *release_fd = fd->fd;