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
@@ -17,6 +17,7 @@
17
17
  #include <utility>
18
18
 
19
19
  #include "absl/strings/str_cat.h"
20
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
20
21
  #include "src/core/lib/iomgr/port.h"
21
22
  #include "src/core/util/crash.h" // IWYU pragma: keep
22
23
 
@@ -37,59 +38,58 @@ namespace grpc_event_engine::experimental {
37
38
  #ifdef GRPC_LINUX_EVENTFD
38
39
 
39
40
  absl::Status EventFdWakeupFd::Init() {
40
- int read_fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
41
- int write_fd = -1;
42
- if (read_fd < 0) {
41
+ auto read_fd = posix_interface_->EventFd(0, EFD_NONBLOCK | EFD_CLOEXEC);
42
+ if (!read_fd.ok()) {
43
43
  return absl::Status(absl::StatusCode::kInternal,
44
44
  absl::StrCat("eventfd: ", grpc_core::StrError(errno)));
45
45
  }
46
- SetWakeupFds(read_fd, write_fd);
46
+ SetWakeupFds(read_fd.value(), FileDescriptor::Invalid());
47
47
  return absl::OkStatus();
48
48
  }
49
49
 
50
50
  absl::Status EventFdWakeupFd::ConsumeWakeup() {
51
- eventfd_t value;
52
- int err;
51
+ PosixError err;
53
52
  do {
54
- err = eventfd_read(ReadFd(), &value);
55
- } while (err < 0 && errno == EINTR);
56
- if (err < 0 && errno != EAGAIN) {
57
- return absl::Status(
58
- absl::StatusCode::kInternal,
59
- absl::StrCat("eventfd_read: ", grpc_core::StrError(errno)));
53
+ err = posix_interface_->EventFdRead(ReadFd());
54
+ } while (err.IsPosixError(EINTR));
55
+ if (!err.ok() && !err.IsPosixError(EAGAIN)) {
56
+ return absl::Status(absl::StatusCode::kInternal,
57
+ absl::StrCat("eventfd_read: ", err.StrError()));
60
58
  }
61
59
  return absl::OkStatus();
62
60
  }
63
61
 
64
62
  absl::Status EventFdWakeupFd::Wakeup() {
65
- int err;
63
+ PosixError err;
66
64
  do {
67
- err = eventfd_write(ReadFd(), 1);
68
- } while (err < 0 && errno == EINTR);
69
- if (err < 0) {
70
- return absl::Status(
71
- absl::StatusCode::kInternal,
72
- absl::StrCat("eventfd_write: ", grpc_core::StrError(errno)));
65
+ err = posix_interface_->EventFdWrite(ReadFd());
66
+ } while (err.IsPosixError(EINTR));
67
+ if (!err.ok()) {
68
+ return absl::Status(absl::StatusCode::kInternal,
69
+ absl::StrCat("eventfd_write: ", err.StrError()));
73
70
  }
74
71
  return absl::OkStatus();
75
72
  }
76
73
 
77
74
  EventFdWakeupFd::~EventFdWakeupFd() {
78
- if (ReadFd() != 0) {
79
- close(ReadFd());
75
+ if (ReadFd().ready()) {
76
+ posix_interface_->Close(ReadFd());
80
77
  }
81
78
  }
82
79
 
83
80
  bool EventFdWakeupFd::IsSupported() {
84
- EventFdWakeupFd event_fd_wakeup_fd;
81
+ EventEnginePosixInterface posix_interface;
82
+ EventFdWakeupFd event_fd_wakeup_fd(&posix_interface);
85
83
  return event_fd_wakeup_fd.Init().ok();
86
84
  }
87
85
 
88
86
  absl::StatusOr<std::unique_ptr<WakeupFd>>
89
- EventFdWakeupFd::CreateEventFdWakeupFd() {
87
+ EventFdWakeupFd::CreateEventFdWakeupFd(
88
+ EventEnginePosixInterface* posix_interface) {
90
89
  static bool kIsEventFdWakeupFdSupported = EventFdWakeupFd::IsSupported();
91
90
  if (kIsEventFdWakeupFdSupported) {
92
- auto event_fd_wakeup_fd = std::make_unique<EventFdWakeupFd>();
91
+ auto event_fd_wakeup_fd =
92
+ std::make_unique<EventFdWakeupFd>(posix_interface);
93
93
  auto status = event_fd_wakeup_fd->Init();
94
94
  if (status.ok()) {
95
95
  return std::unique_ptr<WakeupFd>(std::move(event_fd_wakeup_fd));
@@ -114,7 +114,8 @@ absl::Status EventFdWakeupFd::Wakeup() { grpc_core::Crash("unimplemented"); }
114
114
  bool EventFdWakeupFd::IsSupported() { return false; }
115
115
 
116
116
  absl::StatusOr<std::unique_ptr<WakeupFd>>
117
- EventFdWakeupFd::CreateEventFdWakeupFd() {
117
+ EventFdWakeupFd::CreateEventFdWakeupFd(
118
+ EventEnginePosixInterface* posix_interface) {
118
119
  return absl::NotFoundError("Eventfd wakeup fd is not supported");
119
120
  }
120
121
 
@@ -20,21 +20,25 @@
20
20
 
21
21
  #include "absl/status/status.h"
22
22
  #include "absl/status/statusor.h"
23
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
23
24
  #include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
24
25
 
25
26
  namespace grpc_event_engine::experimental {
26
27
 
27
28
  class EventFdWakeupFd : public WakeupFd {
28
29
  public:
29
- EventFdWakeupFd() : WakeupFd() {}
30
+ explicit EventFdWakeupFd(EventEnginePosixInterface* posix_interface)
31
+ : WakeupFd(), posix_interface_(posix_interface) {}
30
32
  ~EventFdWakeupFd() override;
31
33
  absl::Status ConsumeWakeup() override;
32
34
  absl::Status Wakeup() override;
33
- static absl::StatusOr<std::unique_ptr<WakeupFd>> CreateEventFdWakeupFd();
35
+ static absl::StatusOr<std::unique_ptr<WakeupFd>> CreateEventFdWakeupFd(
36
+ EventEnginePosixInterface* posix_interface);
34
37
  static bool IsSupported();
35
38
 
36
39
  private:
37
40
  absl::Status Init();
41
+ EventEnginePosixInterface* posix_interface_;
38
42
  };
39
43
 
40
44
  } // namespace grpc_event_engine::experimental
@@ -18,6 +18,7 @@
18
18
  #include <utility>
19
19
 
20
20
  #include "absl/strings/str_cat.h"
21
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
21
22
  #include "src/core/lib/iomgr/port.h"
22
23
  #include "src/core/util/crash.h" // IWYU pragma: keep
23
24
 
@@ -36,94 +37,66 @@ namespace grpc_event_engine::experimental {
36
37
 
37
38
  #ifdef GRPC_POSIX_WAKEUP_FD
38
39
 
39
- namespace {
40
-
41
- absl::Status SetSocketNonBlocking(int fd) {
42
- int oldflags = fcntl(fd, F_GETFL, 0);
43
- if (oldflags < 0) {
44
- return absl::Status(absl::StatusCode::kInternal,
45
- absl::StrCat("fcntl: ", grpc_core::StrError(errno)));
46
- }
47
-
48
- oldflags |= O_NONBLOCK;
49
-
50
- if (fcntl(fd, F_SETFL, oldflags) != 0) {
51
- return absl::Status(absl::StatusCode::kInternal,
52
- absl::StrCat("fcntl: ", grpc_core::StrError(errno)));
53
- }
54
-
55
- return absl::OkStatus();
56
- }
57
- } // namespace
58
-
59
40
  absl::Status PipeWakeupFd::Init() {
60
- int pipefd[2];
61
- int r = pipe(pipefd);
62
- if (0 != r) {
63
- return absl::Status(absl::StatusCode::kInternal,
64
- absl::StrCat("pipe: ", grpc_core::StrError(errno)));
65
- }
66
- auto status = SetSocketNonBlocking(pipefd[0]);
67
- if (!status.ok()) {
68
- close(pipefd[0]);
69
- close(pipefd[1]);
70
- return status;
71
- }
72
- status = SetSocketNonBlocking(pipefd[1]);
73
- if (!status.ok()) {
74
- close(pipefd[0]);
75
- close(pipefd[1]);
76
- return status;
77
- }
78
- SetWakeupFds(pipefd[0], pipefd[1]);
41
+ auto pipe_ends = posix_interface_->Pipe();
42
+ if (!pipe_ends.ok()) return std::move(pipe_ends).status();
43
+ SetWakeupFds(pipe_ends->first, pipe_ends->second);
79
44
  return absl::OkStatus();
80
45
  }
81
46
 
82
47
  absl::Status PipeWakeupFd::ConsumeWakeup() {
83
- char buf[128];
84
- ssize_t r;
85
-
48
+ std::array<char, 128> buf;
86
49
  for (;;) {
87
- r = read(ReadFd(), buf, sizeof(buf));
88
- if (r > 0) continue;
89
- if (r == 0) return absl::OkStatus();
90
- switch (errno) {
91
- case EAGAIN:
92
- return absl::OkStatus();
93
- case EINTR:
94
- continue;
95
- default:
96
- return absl::Status(absl::StatusCode::kInternal,
97
- absl::StrCat("read: ", grpc_core::StrError(errno)));
50
+ auto r = posix_interface_->Read(ReadFd(), absl::Span<char>(buf));
51
+ if (r.ok()) {
52
+ if (*r > 0) continue;
53
+ if (*r == 0) return absl::OkStatus();
54
+ } else if (r.IsWrongGenerationError()) {
55
+ return absl::Status(absl::StatusCode::kInternal,
56
+ absl::StrCat("read: wrong fd generation"));
57
+ } else {
58
+ switch (*r.errno_value()) {
59
+ case EAGAIN:
60
+ return absl::OkStatus();
61
+ case EINTR:
62
+ continue;
63
+ default:
64
+ return absl::Status(
65
+ absl::StatusCode::kInternal,
66
+ absl::StrCat("read: ", grpc_core::StrError(errno)));
67
+ }
98
68
  }
99
69
  }
100
70
  }
101
71
 
102
72
  absl::Status PipeWakeupFd::Wakeup() {
103
73
  char c = 0;
104
- while (write(WriteFd(), &c, 1) != 1 && errno == EINTR) {
74
+ while (posix_interface_->Write(WriteFd(), absl::Span<char>(&c, 1))
75
+ .IsPosixError(EINTR)) {
105
76
  }
106
77
  return absl::OkStatus();
107
78
  }
108
79
 
109
80
  PipeWakeupFd::~PipeWakeupFd() {
110
- if (ReadFd() != 0) {
111
- close(ReadFd());
81
+ if (ReadFd().ready()) {
82
+ posix_interface_->Close(ReadFd());
112
83
  }
113
- if (WriteFd() != 0) {
114
- close(WriteFd());
84
+ if (WriteFd().ready()) {
85
+ posix_interface_->Close(WriteFd());
115
86
  }
116
87
  }
117
88
 
118
89
  bool PipeWakeupFd::IsSupported() {
119
- PipeWakeupFd pipe_wakeup_fd;
90
+ EventEnginePosixInterface posix_interface;
91
+ PipeWakeupFd pipe_wakeup_fd(&posix_interface);
120
92
  return pipe_wakeup_fd.Init().ok();
121
93
  }
122
94
 
123
- absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd() {
95
+ absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
96
+ EventEnginePosixInterface* posix_interface) {
124
97
  static bool kIsPipeWakeupFdSupported = PipeWakeupFd::IsSupported();
125
98
  if (kIsPipeWakeupFdSupported) {
126
- auto pipe_wakeup_fd = std::make_unique<PipeWakeupFd>();
99
+ auto pipe_wakeup_fd = std::make_unique<PipeWakeupFd>(posix_interface);
127
100
  auto status = pipe_wakeup_fd->Init();
128
101
  if (status.ok()) {
129
102
  return std::unique_ptr<WakeupFd>(std::move(pipe_wakeup_fd));
@@ -145,7 +118,8 @@ absl::Status PipeWakeupFd::Wakeup() { grpc_core::Crash("unimplemented"); }
145
118
 
146
119
  bool PipeWakeupFd::IsSupported() { return false; }
147
120
 
148
- absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd() {
121
+ absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd(
122
+ EventEnginePosixInterface* posix_interface) {
149
123
  return absl::NotFoundError("Pipe wakeup fd is not supported");
150
124
  }
151
125
 
@@ -20,21 +20,25 @@
20
20
 
21
21
  #include "absl/status/status.h"
22
22
  #include "absl/status/statusor.h"
23
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
23
24
  #include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
24
25
 
25
26
  namespace grpc_event_engine::experimental {
26
27
 
27
28
  class PipeWakeupFd : public WakeupFd {
28
29
  public:
29
- PipeWakeupFd() : WakeupFd() {}
30
+ explicit PipeWakeupFd(EventEnginePosixInterface* posix_interface)
31
+ : WakeupFd(), posix_interface_(posix_interface) {}
30
32
  ~PipeWakeupFd() override;
31
33
  absl::Status ConsumeWakeup() override;
32
34
  absl::Status Wakeup() override;
33
- static absl::StatusOr<std::unique_ptr<WakeupFd>> CreatePipeWakeupFd();
35
+ static absl::StatusOr<std::unique_ptr<WakeupFd>> CreatePipeWakeupFd(
36
+ EventEnginePosixInterface* posix_interface);
34
37
  static bool IsSupported();
35
38
 
36
39
  private:
37
40
  absl::Status Init();
41
+ EventEnginePosixInterface* posix_interface_;
38
42
  };
39
43
 
40
44
  } // namespace grpc_event_engine::experimental
@@ -45,6 +45,7 @@
45
45
  #include <grpc/support/port_platform.h>
46
46
 
47
47
  #include "absl/status/status.h"
48
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
48
49
 
49
50
  namespace grpc_event_engine::experimental {
50
51
 
@@ -54,19 +55,19 @@ class WakeupFd {
54
55
  virtual absl::Status Wakeup() = 0;
55
56
  virtual ~WakeupFd() = default;
56
57
 
57
- int ReadFd() { return read_fd_; }
58
- int WriteFd() { return write_fd_; }
58
+ FileDescriptor ReadFd() { return read_fd_; }
59
+ FileDescriptor WriteFd() { return write_fd_; }
59
60
 
60
61
  protected:
61
- WakeupFd() : read_fd_(0), write_fd_(0) {}
62
- void SetWakeupFds(int read_fd, int write_fd) {
62
+ WakeupFd() {}
63
+ void SetWakeupFds(FileDescriptor read_fd, FileDescriptor write_fd) {
63
64
  read_fd_ = read_fd;
64
65
  write_fd_ = write_fd;
65
66
  }
66
67
 
67
68
  private:
68
- int read_fd_;
69
- int write_fd_;
69
+ FileDescriptor read_fd_;
70
+ FileDescriptor write_fd_;
70
71
  };
71
72
 
72
73
  } // namespace grpc_event_engine::experimental
@@ -17,6 +17,7 @@
17
17
 
18
18
  #include "absl/status/status.h"
19
19
  #include "absl/status/statusor.h"
20
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
20
21
  #include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
21
22
  #include "src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h"
22
23
  #include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
@@ -26,13 +27,16 @@ namespace grpc_event_engine::experimental {
26
27
 
27
28
  #ifdef GRPC_POSIX_WAKEUP_FD
28
29
 
29
- absl::StatusOr<std::unique_ptr<WakeupFd>> NotSupported() {
30
+ absl::StatusOr<std::unique_ptr<WakeupFd>> NotSupported(
31
+ EventEnginePosixInterface* /* unused */) {
30
32
  return absl::NotFoundError("Wakeup-fd is not supported on this system");
31
33
  }
32
34
 
33
35
  namespace {
34
- absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)() =
35
- []() -> absl::StatusOr<std::unique_ptr<WakeupFd>> (*)() {
36
+ absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)(
37
+ EventEnginePosixInterface* posix_interface) =
38
+ []() -> absl::StatusOr<std::unique_ptr<WakeupFd>> (*)(
39
+ EventEnginePosixInterface* posix_interface) {
36
40
  #ifndef GRPC_POSIX_NO_SPECIAL_WAKEUP_FD
37
41
  if (EventFdWakeupFd::IsSupported()) {
38
42
  return &EventFdWakeupFd::CreateEventFdWakeupFd;
@@ -47,15 +51,17 @@ absl::StatusOr<std::unique_ptr<WakeupFd>> (*g_wakeup_fd_fn)() =
47
51
 
48
52
  bool SupportsWakeupFd() { return g_wakeup_fd_fn != NotSupported; }
49
53
 
50
- absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd() {
51
- return g_wakeup_fd_fn();
54
+ absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
55
+ EventEnginePosixInterface* posix_interface) {
56
+ return g_wakeup_fd_fn(posix_interface);
52
57
  }
53
58
 
54
59
  #else // GRPC_POSIX_WAKEUP_FD
55
60
 
56
61
  bool SupportsWakeupFd() { return false; }
57
62
 
58
- absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd() {
63
+ absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
64
+ EventEnginePosixInterface* /* unused */) {
59
65
  return absl::NotFoundError("Wakeup-fd is not supported on this system");
60
66
  }
61
67
 
@@ -19,6 +19,7 @@
19
19
  #include <memory>
20
20
 
21
21
  #include "absl/status/statusor.h"
22
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
22
23
 
23
24
  namespace grpc_event_engine::experimental {
24
25
 
@@ -28,7 +29,8 @@ class WakeupFd;
28
29
  bool SupportsWakeupFd();
29
30
 
30
31
  // Create and return an initialized WakeupFd instance if supported.
31
- absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd();
32
+ absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd(
33
+ EventEnginePosixInterface* posix_interface);
32
34
 
33
35
  } // namespace grpc_event_engine::experimental
34
36
 
@@ -40,4 +40,13 @@ bool UsePollsetAlternative() {
40
40
  grpc_core::IsPollsetAlternativeEnabled();
41
41
  }
42
42
 
43
+ // Returns true if GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER is defined.
44
+ bool EventEngineExperimentDisabledForPython() {
45
+ #ifdef GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER
46
+ return true;
47
+ #else
48
+ return false;
49
+ #endif
50
+ }
51
+
43
52
  } // namespace grpc_event_engine::experimental
@@ -35,6 +35,9 @@ bool UseEventEngineListener();
35
35
  // may disable the poller in some builds.
36
36
  bool UsePollsetAlternative();
37
37
 
38
+ // Returns true if GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER is defined.
39
+ bool EventEngineExperimentDisabledForPython();
40
+
38
41
  } // namespace grpc_event_engine::experimental
39
42
 
40
43
  #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_SHIM_H
@@ -20,21 +20,25 @@
20
20
  #include <memory>
21
21
 
22
22
  #include "absl/functional/any_invocable.h"
23
- #include "src/core/lib/event_engine/forkable.h"
24
23
 
25
24
  namespace grpc_event_engine::experimental {
26
25
 
27
26
  // Interface for all EventEngine ThreadPool implementations
28
- class ThreadPool : public Forkable {
27
+ class ThreadPool {
29
28
  public:
30
29
  // Asserts Quiesce was called.
31
- ~ThreadPool() override = default;
30
+ virtual ~ThreadPool() = default;
32
31
  // Shut down the pool, and wait for all threads to exit.
33
32
  // This method is safe to call from within a ThreadPool thread.
34
33
  virtual void Quiesce() = 0;
35
34
  // Run must not be called after Quiesce completes
36
35
  virtual void Run(absl::AnyInvocable<void()> callback) = 0;
37
36
  virtual void Run(EventEngine::Closure* closure) = 0;
37
+
38
+ #if GRPC_ENABLE_FORK_SUPPORT
39
+ virtual void PrepareFork() = 0;
40
+ virtual void PostFork() = 0;
41
+ #endif // GRPC_ENABLE_FORK_SUPPORT
38
42
  };
39
43
 
40
44
  // Creates a default thread pool.
@@ -16,30 +16,13 @@
16
16
 
17
17
  #include <memory>
18
18
 
19
- #include "src/core/lib/event_engine/forkable.h"
20
19
  #include "src/core/lib/event_engine/thread_pool/thread_pool.h"
21
20
  #include "src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h"
22
- #include "src/core/util/no_destruct.h"
23
21
 
24
22
  namespace grpc_event_engine::experimental {
25
23
 
26
- namespace {
27
- grpc_core::NoDestruct<ObjectGroupForkHandler> g_thread_pool_fork_manager;
28
-
29
- class ThreadPoolForkCallbackMethods {
30
- public:
31
- static void Prefork() { g_thread_pool_fork_manager->Prefork(); }
32
- static void PostforkParent() { g_thread_pool_fork_manager->PostforkParent(); }
33
- static void PostforkChild() { g_thread_pool_fork_manager->PostforkChild(); }
34
- };
35
- } // namespace
36
-
37
24
  std::shared_ptr<ThreadPool> MakeThreadPool(size_t reserve_threads) {
38
25
  auto thread_pool = std::make_shared<WorkStealingThreadPool>(reserve_threads);
39
- g_thread_pool_fork_manager->RegisterForkable(
40
- thread_pool, ThreadPoolForkCallbackMethods::Prefork,
41
- ThreadPoolForkCallbackMethods::PostforkParent,
42
- ThreadPoolForkCallbackMethods::PostforkChild);
43
26
  return thread_pool;
44
27
  }
45
28
 
@@ -213,11 +213,13 @@ EventEngine::Closure* WorkStealingThreadPool::TheftRegistry::StealOne() {
213
213
  return nullptr;
214
214
  }
215
215
 
216
+ #if GRPC_ENABLE_FORK_SUPPORT
217
+
216
218
  void WorkStealingThreadPool::PrepareFork() { pool_->PrepareFork(); }
217
219
 
218
- void WorkStealingThreadPool::PostforkParent() { pool_->Postfork(); }
220
+ void WorkStealingThreadPool::PostFork() { pool_->Postfork(); }
219
221
 
220
- void WorkStealingThreadPool::PostforkChild() { pool_->Postfork(); }
222
+ #endif // GRPC_ENABLE_FORK_SUPPORT
221
223
 
222
224
  // -------- WorkStealingThreadPool::WorkStealingThreadPoolImpl --------
223
225
 
@@ -53,11 +53,12 @@ class WorkStealingThreadPool final : public ThreadPool {
53
53
  void Run(absl::AnyInvocable<void()> callback) override;
54
54
  void Run(EventEngine::Closure* closure) override;
55
55
 
56
+ #if GRPC_ENABLE_FORK_SUPPORT
56
57
  // Forkable
57
58
  // These methods are exposed on the public object to allow for testing.
58
59
  void PrepareFork() override;
59
- void PostforkParent() override;
60
- void PostforkChild() override;
60
+ void PostFork() override;
61
+ #endif // GRPC_ENABLE_FORK_SUPPORT
61
62
 
62
63
  private:
63
64
  // A basic communication mechanism to signal waiting threads that work is
@@ -267,6 +267,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
267
267
  }
268
268
  }
269
269
 
270
+ bool IsCurrent() const override { return true; }
271
+
270
272
  private:
271
273
  enum WriteState {
272
274
  WRITE_IDLE,
@@ -809,6 +811,8 @@ class GrpcPolledFdWrapper : public GrpcPolledFd {
809
811
 
810
812
  const char* GetName() const override { return polled_fd_->GetName(); }
811
813
 
814
+ bool IsCurrent() const override { return true; }
815
+
812
816
  private:
813
817
  GrpcPolledFdWindows* polled_fd_;
814
818
  };
@@ -50,6 +50,10 @@ class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
50
50
  ares_socket_t as) override;
51
51
  void ConfigureAresChannelLocked(ares_channel channel) override;
52
52
 
53
+ std::unique_ptr<GrpcPolledFdFactory> NewEmptyInstance() const override {
54
+ return std::make_unique<GrpcPolledFdFactoryWindows>(iocp_);
55
+ }
56
+
53
57
  private:
54
58
  friend class CustomSockFuncs;
55
59
 
@@ -37,12 +37,8 @@ class WindowsEndpoint : public EventEngine::Endpoint {
37
37
  SliceBuffer* data, WriteArgs args) override;
38
38
  const EventEngine::ResolvedAddress& GetPeerAddress() const override;
39
39
  const EventEngine::ResolvedAddress& GetLocalAddress() const override;
40
- std::vector<size_t> AllWriteMetrics() override { return {}; }
41
- std::optional<absl::string_view> GetMetricName(size_t) override {
42
- return std::nullopt;
43
- }
44
- std::optional<size_t> GetMetricKey(absl::string_view) override {
45
- return std::nullopt;
40
+ std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const override {
41
+ return nullptr;
46
42
  }
47
43
 
48
44
  private:
@@ -44,7 +44,6 @@
44
44
  #include "src/core/lib/event_engine/windows/windows_listener.h"
45
45
  #include "src/core/lib/iomgr/error.h"
46
46
  #include "src/core/lib/resource_quota/resource_quota.h"
47
- #include "src/core/lib/surface/init_internally.h"
48
47
  #include "src/core/util/crash.h"
49
48
  #include "src/core/util/dump_args.h"
50
49
  #include "src/core/util/sync.h"
@@ -38,15 +38,13 @@
38
38
  #include "src/core/lib/event_engine/thread_pool/thread_pool.h"
39
39
  #include "src/core/lib/event_engine/windows/iocp.h"
40
40
  #include "src/core/lib/event_engine/windows/windows_endpoint.h"
41
- #include "src/core/lib/surface/init_internally.h"
42
41
  #include "src/core/util/sync.h"
43
42
  #include "src/core/util/time.h"
44
43
 
45
44
  namespace grpc_event_engine::experimental {
46
45
 
47
46
  class WindowsEventEngine
48
- : public grpc_core::KeepsGrpcInitialized,
49
- public ExtendedType<EventEngine, EventEngineWindowsSocketSupport> {
47
+ : public ExtendedType<EventEngine, EventEngineWindowsSocketSupport> {
50
48
  public:
51
49
  class WindowsDNSResolver : public EventEngine::DNSResolver {
52
50
  public:
@@ -80,15 +80,27 @@ void UnlinkIfUnixDomainSocket(
80
80
  if (un->sun_path[0] == '\0' && un->sun_path[1] != '\0') {
81
81
  return;
82
82
  }
83
+ // Convert UTF-8 path to Unicode.
84
+ std::wstring wide_path;
85
+ int needed = MultiByteToWideChar(CP_UTF8, 0, un->sun_path, -1, NULL, 0);
86
+ if (needed <= 0) {
87
+ return;
88
+ }
89
+ wide_path.resize(needed, L'\0');
90
+ if (MultiByteToWideChar(CP_UTF8, 0, un->sun_path, -1, wide_path.data(),
91
+ needed) == 0) {
92
+ // Failed to convert UTF-8 path to wide char.
93
+ return;
94
+ }
83
95
  // For windows we need to remove the file instead of unlink.
84
- DWORD attr = ::GetFileAttributesA(un->sun_path);
96
+ DWORD attr = ::GetFileAttributesW(wide_path.data());
85
97
  if (attr == INVALID_FILE_ATTRIBUTES) {
86
98
  return;
87
99
  }
88
100
  if (attr & FILE_ATTRIBUTE_DIRECTORY || attr & FILE_ATTRIBUTE_READONLY) {
89
101
  return;
90
102
  }
91
- ::DeleteFileA(un->sun_path);
103
+ ::DeleteFileW(wide_path.data());
92
104
  #else
93
105
  (void)resolved_addr;
94
106
  #endif