grpc 1.74.1 → 1.75.0.pre1

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 (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -70,13 +70,6 @@
70
70
 
71
71
  // IWYU pragma: no_include <ratio>
72
72
 
73
- #if defined(GRPC_POSIX_SOCKET_TCP) && \
74
- !defined(GRPC_DO_NOT_INSTANTIATE_POSIX_POLLER)
75
- #define GRPC_PLATFORM_SUPPORTS_POSIX_POLLING true
76
- #else
77
- #define GRPC_PLATFORM_SUPPORTS_POSIX_POLLING false
78
- #endif
79
-
80
73
  using namespace std::chrono_literals;
81
74
 
82
75
  namespace grpc_event_engine::experimental {
@@ -184,8 +177,7 @@ void RegisterEventEngineForFork(
184
177
  ptr.executor.expired();
185
178
  }),
186
179
  fork_handlers->end());
187
- fork_handlers->emplace_back(std::move(posix_engine), std::move(executor),
188
- std::move(timer_manager));
180
+ fork_handlers->emplace_back(posix_engine, executor, timer_manager);
189
181
  static bool handlers_installed = false;
190
182
  if (!handlers_installed) {
191
183
  pthread_atfork(PrepareFork, PostForkInParent, PostForkInChild);
@@ -193,27 +185,6 @@ void RegisterEventEngineForFork(
193
185
  }
194
186
  }
195
187
 
196
- #if GRPC_ARES && GRPC_POSIX_SOCKET_ARES_EV_DRIVER && \
197
- GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
198
-
199
- void RegisterResolver(
200
- absl::InlinedVector<std::weak_ptr<AresResolver::ReinitHandle>, 16>*
201
- resolver_handles,
202
- std::weak_ptr<AresResolver::ReinitHandle> resolver_handle) {
203
- resolver_handles->emplace_back(std::move(resolver_handle));
204
- // Cleanup in case we have expired callbacks, prevents the list from
205
- // growing indefinitely
206
- auto new_end = std::remove_if(
207
- resolver_handles->begin(), resolver_handles->end(),
208
- +[](const std::weak_ptr<AresResolver::ReinitHandle>& callback) {
209
- return callback.expired();
210
- });
211
- resolver_handles->erase(new_end, resolver_handles->end());
212
- }
213
-
214
- #endif // GRPC_ARES && GRPC_POSIX_SOCKET_ARES_EV_DRIVER
215
- // && GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
216
-
217
188
  #else // GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
218
189
 
219
190
  void RegisterEventEngineForFork(
@@ -230,17 +201,18 @@ void RegisterEventEngineForFork(
230
201
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
231
202
 
232
203
  PosixEventEngine::PollingCycle::PollingCycle(
233
- PosixEnginePollerManager* poller_manager)
234
- : poller_manager_(poller_manager), is_scheduled_(1) {
235
- poller_manager_->Executor()->Run([this]() { PollerWorkInternal(); });
204
+ std::shared_ptr<ThreadPool> executor,
205
+ std::shared_ptr<PosixEventPoller> poller)
206
+ : executor_(std::move(executor)),
207
+ poller_(std::move(poller)),
208
+ is_scheduled_(1) {
209
+ CHECK_NE(poller_, nullptr);
210
+ executor_->Run([this]() { PollerWorkInternal(); });
236
211
  }
237
212
 
238
213
  PosixEventEngine::PollingCycle::~PollingCycle() {
239
214
  done_ = true;
240
- auto poller = poller_manager_->Poller();
241
- if (poller != nullptr) {
242
- poller->Kick();
243
- }
215
+ poller_->Kick();
244
216
  grpc_core::MutexLock lock(&mu_);
245
217
  while (is_scheduled_ > 0) {
246
218
  cond_.Wait(&mu_);
@@ -255,15 +227,14 @@ void PosixEventEngine::PollingCycle::PollerWorkInternal() {
255
227
  // TODO(vigneshbabu): The timeout specified here is arbitrary. For
256
228
  // instance, this can be improved by setting the timeout to the next
257
229
  // expiring timer.
258
- PosixEventPoller* poller = poller_manager_->Poller();
259
- auto result = poller->Work(24h, [&]() { again = true; });
230
+ auto result = poller_->Work(24h, [&]() { again = true; });
260
231
  if (result == Poller::WorkResult::kDeadlineExceeded) {
261
232
  // The EventEngine is not shutting down but the next asynchronous
262
233
  // PollerWorkInternal did not get scheduled. Schedule it now.
263
234
  again = true;
264
235
  }
265
236
  if (!done_ && again) {
266
- poller_manager_->Executor()->Run([this]() { PollerWorkInternal(); });
237
+ executor_->Run([this]() { PollerWorkInternal(); });
267
238
  ++is_scheduled_;
268
239
  }
269
240
  cond_.SignalAll();
@@ -428,9 +399,9 @@ PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
428
399
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
429
400
  PosixError err;
430
401
  int connect_errno;
402
+ PosixEventPoller* poller = poller_.get();
431
403
  do {
432
- err = poller_manager_.Poller()->posix_interface().Connect(
433
- fd, addr.address(), addr.size());
404
+ err = poller->posix_interface().Connect(fd, addr.address(), addr.size());
434
405
  } while (err.IsPosixError(EINTR));
435
406
  if (err.IsWrongGenerationError()) {
436
407
  Run([on_connect = std::move(on_connect),
@@ -452,7 +423,6 @@ PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
452
423
  }
453
424
 
454
425
  std::string name = absl::StrCat("tcp-client:", addr_uri.value());
455
- PosixEventPoller* poller = poller_manager_.Poller();
456
426
  EventHandle* handle =
457
427
  poller->CreateHandle(fd, name, poller->CanTrackErrors());
458
428
 
@@ -507,47 +477,6 @@ void PosixEventEngine::OnConnectFinishInternal(int connection_handle) {
507
477
  }
508
478
  }
509
479
 
510
- PosixEnginePollerManager::PosixEnginePollerManager(
511
- std::shared_ptr<ThreadPool> executor)
512
- : poller_(grpc_event_engine::experimental::MakeDefaultPoller(this)),
513
- executor_(std::move(executor)),
514
- trigger_shutdown_called_(false) {}
515
-
516
- PosixEnginePollerManager::PosixEnginePollerManager(
517
- std::shared_ptr<PosixEventPoller> poller)
518
- : poller_(std::move(poller)),
519
- poller_state_(PollerState::kExternal),
520
- executor_(nullptr),
521
- trigger_shutdown_called_(false) {
522
- DCHECK_NE(poller_, nullptr);
523
- }
524
-
525
- void PosixEnginePollerManager::Run(
526
- experimental::EventEngine::Closure* closure) {
527
- if (executor_ != nullptr) {
528
- executor_->Run(closure);
529
- }
530
- }
531
-
532
- void PosixEnginePollerManager::Run(absl::AnyInvocable<void()> cb) {
533
- if (executor_ != nullptr) {
534
- executor_->Run(std::move(cb));
535
- }
536
- }
537
-
538
- void PosixEnginePollerManager::TriggerShutdown() {
539
- DCHECK(trigger_shutdown_called_ == false);
540
- trigger_shutdown_called_ = true;
541
- // If the poller is external, dont try to shut it down. Otherwise
542
- // set poller state to PollerState::kShuttingDown.
543
- if (poller_state_.exchange(PollerState::kShuttingDown) ==
544
- PollerState::kExternal) {
545
- poller_ = nullptr;
546
- return;
547
- }
548
- poller_->Kick();
549
- }
550
-
551
480
  std::shared_ptr<PosixEventEngine> PosixEventEngine::MakePosixEventEngine() {
552
481
  // Can't use make_shared as ctor is private
553
482
  std::shared_ptr<PosixEventEngine> engine(new PosixEventEngine());
@@ -555,6 +484,8 @@ std::shared_ptr<PosixEventEngine> PosixEventEngine::MakePosixEventEngine() {
555
484
  return engine;
556
485
  }
557
486
 
487
+ #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
488
+
558
489
  std::shared_ptr<PosixEventEngine>
559
490
  PosixEventEngine::MakeTestOnlyPosixEventEngine(
560
491
  std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
@@ -568,24 +499,35 @@ PosixEventEngine::MakeTestOnlyPosixEventEngine(
568
499
  PosixEventEngine::PosixEventEngine(std::shared_ptr<PosixEventPoller> poller)
569
500
  : connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
570
501
  executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
571
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
572
- poller_manager_(poller),
573
- #endif
574
- timer_manager_(std::make_shared<TimerManager>(executor_)) {
575
- }
502
+ poller_(std::move(poller)),
503
+ timer_manager_(std::make_shared<TimerManager>(executor_)) {}
576
504
 
577
505
  PosixEventEngine::PosixEventEngine()
578
506
  : connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
579
507
  executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
580
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
581
- poller_manager_(executor_),
582
508
  timer_manager_(std::make_shared<TimerManager>(executor_)) {
509
+ poller_ = grpc_event_engine::experimental::MakeDefaultPoller(executor_);
583
510
  SchedulePoller();
584
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
585
- timer_manager_(std::make_shared<TimerManager>(executor_)) {
586
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
587
511
  }
588
512
 
513
+ #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
514
+
515
+ std::shared_ptr<PosixEventEngine>
516
+ PosixEventEngine::MakeTestOnlyPosixEventEngine(
517
+ std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
518
+ test_only_poller) {
519
+ grpc_core::Crash(
520
+ "PosixEventEngine::MakeTestOnlyPosixEventEngine not available on this "
521
+ "platform");
522
+ }
523
+
524
+ PosixEventEngine::PosixEventEngine()
525
+ : connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
526
+ executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
527
+ timer_manager_(std::make_shared<TimerManager>(executor_)) {}
528
+
529
+ #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
530
+
589
531
  #endif // GRPC_POSIX_SOCKET_TCP
590
532
 
591
533
  struct PosixEventEngine::ClosureData final : public EventEngine::Closure {
@@ -620,7 +562,6 @@ PosixEventEngine::~PosixEventEngine() {
620
562
  }
621
563
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
622
564
  polling_cycle_.reset();
623
- poller_manager_.TriggerShutdown();
624
565
  #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
625
566
  timer_manager_->Shutdown();
626
567
  executor_->Quiesce();
@@ -695,50 +636,95 @@ void PosixEventEngine::PosixDNSResolver::LookupTXT(LookupTXTCallback on_resolve,
695
636
  dns_resolver_->LookupTXT(std::move(on_resolve), name);
696
637
  }
697
638
 
639
+ #ifdef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
640
+ #if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
641
+
642
+ void PosixEventEngine::RegisterAresResolverForFork(
643
+ GRPC_UNUSED AresResolver* resolver) {
644
+ #if GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
645
+ grpc_core::MutexLock lock(&resolver_handles_mu_);
646
+ resolver_handles_.emplace_back(resolver->GetReinitHandle());
647
+ // Cleanup in case we have expired callbacks, prevents the list from
648
+ // growing indefinitely
649
+ auto new_end = std::remove_if(
650
+ resolver_handles_.begin(), resolver_handles_.end(),
651
+ +[](const std::weak_ptr<AresResolver::ReinitHandle>& callback) {
652
+ return callback.expired();
653
+ });
654
+ resolver_handles_.erase(new_end, resolver_handles_.end());
655
+ #endif // GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
656
+ }
657
+
698
658
  absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
699
659
  PosixEventEngine::GetDNSResolver(
700
660
  GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
701
- #ifndef GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
702
- grpc_core::Crash("Unable to get DNS resolver for this platform.");
703
- #else // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
704
661
  // If c-ares is supported on the platform, build according to user's
705
662
  // configuration.
706
- if (ShouldUseAresDnsResolver()) {
707
- #if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
708
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
663
+ if (!ShouldUseAresDnsResolver()) {
709
664
  GRPC_TRACE_LOG(event_engine_dns, INFO)
710
- << "PosixEventEngine::" << this << " creating AresResolver";
711
- auto ares_resolver = AresResolver::CreateAresResolver(
712
- options.dns_server,
713
- std::make_unique<GrpcPolledFdFactoryPosix>(poller_manager_.Poller()),
714
- shared_from_this());
715
- if (!ares_resolver.ok()) {
716
- return ares_resolver.status();
717
- }
718
- #if GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
719
- {
720
- grpc_core::MutexLock lock(&resolver_handles_mu_);
721
- RegisterResolver(&resolver_handles_,
722
- ares_resolver->get()->GetReinitHandle());
723
- }
724
- #endif // GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
725
- return std::make_unique<PosixEventEngine::PosixDNSResolver>(
726
- std::move(*ares_resolver));
665
+ << "PosixEventEngine::" << this << " creating NativePosixDNSResolver";
666
+ return std::make_unique<NativePosixDNSResolver>(shared_from_this());
667
+ }
668
+ #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
669
+ GRPC_TRACE_LOG(event_engine_dns, INFO)
670
+ << "PosixEventEngine::" << this << " creating AresResolver";
671
+ auto ares_resolver = AresResolver::CreateAresResolver(
672
+ options.dns_server,
673
+ std::make_unique<GrpcPolledFdFactoryPosix>(poller_.get()),
674
+ shared_from_this());
675
+ if (!ares_resolver.ok()) {
676
+ return ares_resolver.status();
677
+ }
678
+ RegisterAresResolverForFork(ares_resolver->get());
679
+ return std::make_unique<PosixEventEngine::PosixDNSResolver>(
680
+ std::move(*ares_resolver));
727
681
  #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
728
- grpc_core::Crash("Can not create CAres resolver with disabled poller");
682
+ grpc_core::Crash("Can not create CAres resolver with disabled poller");
729
683
  #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
730
- #endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
731
- }
684
+ }
685
+
686
+ #else // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
687
+
688
+ absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
689
+ PosixEventEngine::GetDNSResolver(
690
+ GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
732
691
  GRPC_TRACE_LOG(event_engine_dns, INFO)
733
692
  << "PosixEventEngine::" << this << " creating NativePosixDNSResolver";
734
693
  return std::make_unique<NativePosixDNSResolver>(shared_from_this());
735
- #endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
736
694
  }
737
695
 
696
+ #endif // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
697
+ #else // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
698
+
699
+ absl::StatusOr<std::unique_ptr<EventEngine::DNSResolver>>
700
+ PosixEventEngine::GetDNSResolver(
701
+ GRPC_UNUSED const EventEngine::DNSResolver::ResolverOptions& options) {
702
+ grpc_core::Crash("Unable to get DNS resolver for this platform.");
703
+ }
704
+
705
+ #endif // GRPC_POSIX_SOCKET_RESOLVE_ADDRESS
706
+
738
707
  bool PosixEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }
739
708
 
740
- bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
709
+ std::unique_ptr<EventEngine::Endpoint> PosixEventEngine::CreateEndpointFromFd(
710
+ int fd, const EndpointConfig& config) {
711
+ auto options = TcpOptionsFromEndpointConfig(config);
712
+ MemoryAllocator allocator;
713
+ if (options.memory_allocator_factory != nullptr) {
714
+ return CreatePosixEndpointFromFd(
715
+ fd, config,
716
+ options.memory_allocator_factory->CreateMemoryAllocator(
717
+ absl::StrCat("allocator:", fd)));
718
+ }
719
+ return CreatePosixEndpointFromFd(
720
+ fd, config,
721
+ options.resource_quota->memory_quota()->CreateMemoryAllocator(
722
+ absl::StrCat("allocator:", fd)));
723
+ }
724
+
741
725
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
726
+
727
+ bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
742
728
  int connection_handle = handle.keys[0];
743
729
  if (connection_handle <= 0) {
744
730
  return false;
@@ -787,22 +773,16 @@ bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
787
773
  delete ac;
788
774
  }
789
775
  return connection_cancel_success;
790
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
791
- grpc_core::Crash(
792
- "EventEngine::CancelConnect is not supported on this platform");
793
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
794
776
  }
795
777
 
796
778
  EventEngine::ConnectionHandle PosixEventEngine::Connect(
797
779
  OnConnectCallback on_connect, const ResolvedAddress& addr,
798
780
  const EndpointConfig& args, MemoryAllocator memory_allocator,
799
781
  Duration timeout) {
800
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
801
782
  PosixTcpOptions options = TcpOptionsFromEndpointConfig(args);
802
783
  absl::StatusOr<EventEnginePosixInterface::PosixSocketCreateResult> socket =
803
- poller_manager_.Poller()
804
- ->posix_interface()
805
- .CreateAndPrepareTcpClientSocket(options, addr);
784
+ GetPollerChecked()->posix_interface().CreateAndPrepareTcpClientSocket(
785
+ options, addr);
806
786
  if (!socket.ok()) {
807
787
  Run([on_connect = std::move(on_connect),
808
788
  status = socket.status()]() mutable { on_connect(status); });
@@ -811,62 +791,30 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
811
791
  return CreateEndpointFromUnconnectedFdInternal(
812
792
  (*socket).sock, std::move(on_connect), (*socket).mapped_target_addr,
813
793
  options, std::move(memory_allocator), timeout);
814
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
815
- grpc_core::Crash("EventEngine::Connect is not supported on this platform");
816
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
817
794
  }
818
795
 
819
796
  EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
820
797
  int fd, EventEngine::OnConnectCallback on_connect,
821
798
  const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
822
799
  MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
823
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
824
800
  return CreateEndpointFromUnconnectedFdInternal(
825
- poller_manager_.Poller()->posix_interface().Adopt(fd),
826
- std::move(on_connect), addr, TcpOptionsFromEndpointConfig(config),
827
- std::move(memory_allocator), timeout);
828
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
829
- grpc_core::Crash(
830
- "EventEngine::CreateEndpointFromUnconnectedFd is not supported on this "
831
- "platform");
832
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
801
+ GetPollerChecked()->posix_interface().Adopt(fd), std::move(on_connect),
802
+ addr, TcpOptionsFromEndpointConfig(config), std::move(memory_allocator),
803
+ timeout);
833
804
  }
834
805
 
835
806
  std::unique_ptr<EventEngine::Endpoint>
836
807
  PosixEventEngine::CreatePosixEndpointFromFd(int fd,
837
808
  const EndpointConfig& config,
838
809
  MemoryAllocator memory_allocator) {
839
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
840
810
  DCHECK_GT(fd, 0);
841
- PosixEventPoller* poller = poller_manager_.Poller();
842
- DCHECK_NE(poller, nullptr);
811
+ PosixEventPoller* poller = GetPollerChecked();
843
812
  EventHandle* handle =
844
813
  poller->CreateHandle(poller->posix_interface().Adopt(fd), "tcp-client",
845
814
  poller->CanTrackErrors());
846
815
  return CreatePosixEndpoint(handle, nullptr, shared_from_this(),
847
816
  std::move(memory_allocator),
848
817
  TcpOptionsFromEndpointConfig(config));
849
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
850
- grpc_core::Crash(
851
- "PosixEventEngine::CreatePosixEndpointFromFd is not supported on "
852
- "this platform");
853
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
854
- }
855
-
856
- std::unique_ptr<EventEngine::Endpoint> PosixEventEngine::CreateEndpointFromFd(
857
- int fd, const EndpointConfig& config) {
858
- auto options = TcpOptionsFromEndpointConfig(config);
859
- MemoryAllocator allocator;
860
- if (options.memory_allocator_factory != nullptr) {
861
- return CreatePosixEndpointFromFd(
862
- fd, config,
863
- options.memory_allocator_factory->CreateMemoryAllocator(
864
- absl::StrCat("allocator:", fd)));
865
- }
866
- return CreatePosixEndpointFromFd(
867
- fd, config,
868
- options.resource_quota->memory_quota()->CreateMemoryAllocator(
869
- absl::StrCat("allocator:", fd)));
870
818
  }
871
819
 
872
820
  absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
@@ -875,7 +823,6 @@ PosixEventEngine::CreateListener(
875
823
  absl::AnyInvocable<void(absl::Status)> on_shutdown,
876
824
  const EndpointConfig& config,
877
825
  std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
878
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
879
826
  PosixEventEngineWithFdSupport::PosixAcceptCallback posix_on_accept =
880
827
  [on_accept_cb = std::move(on_accept)](
881
828
  int /*listener_fd*/, std::unique_ptr<EventEngine::Endpoint> ep,
@@ -885,12 +832,7 @@ PosixEventEngine::CreateListener(
885
832
  };
886
833
  return std::make_unique<PosixEngineListener>(
887
834
  std::move(posix_on_accept), std::move(on_shutdown), config,
888
- std::move(memory_allocator_factory), poller_manager_.Poller(),
889
- shared_from_this());
890
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
891
- grpc_core::Crash(
892
- "EventEngine::CreateListener is not supported on this platform");
893
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
835
+ std::move(memory_allocator_factory), poller_.get(), shared_from_this());
894
836
  }
895
837
 
896
838
  absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
@@ -899,32 +841,96 @@ PosixEventEngine::CreatePosixListener(
899
841
  absl::AnyInvocable<void(absl::Status)> on_shutdown,
900
842
  const EndpointConfig& config,
901
843
  std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
902
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
903
844
  return std::make_unique<PosixEngineListener>(
904
845
  std::move(on_accept), std::move(on_shutdown), config,
905
- std::move(memory_allocator_factory), poller_manager_.Poller(),
906
- shared_from_this());
907
- #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
846
+ std::move(memory_allocator_factory), poller_.get(), shared_from_this());
847
+ }
848
+
849
+ void PosixEventEngine::SchedulePoller() {
850
+ if (poller_ != nullptr) {
851
+ grpc_core::MutexLock lock(&mu_);
852
+ CHECK(!polling_cycle_.has_value());
853
+ polling_cycle_.emplace(executor_, poller_);
854
+ }
855
+ }
856
+
857
+ void PosixEventEngine::ResetPollCycle() {
858
+ grpc_core::MutexLock lock(&mu_);
859
+ polling_cycle_.reset();
860
+ }
861
+
862
+ #else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
863
+
864
+ bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
865
+ grpc_core::Crash(
866
+ "EventEngine::CancelConnect is not supported on this platform");
867
+ }
868
+
869
+ EventEngine::ConnectionHandle PosixEventEngine::Connect(
870
+ OnConnectCallback on_connect, const ResolvedAddress& addr,
871
+ const EndpointConfig& args, MemoryAllocator memory_allocator,
872
+ Duration timeout) {
873
+ grpc_core::Crash("EventEngine::Connect is not supported on this platform");
874
+ }
875
+
876
+ EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
877
+ int fd, EventEngine::OnConnectCallback on_connect,
878
+ const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
879
+ MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
880
+ grpc_core::Crash(
881
+ "EventEngine::CreateEndpointFromUnconnectedFd is not supported on this "
882
+ "platform");
883
+ }
884
+
885
+ std::unique_ptr<EventEngine::Endpoint>
886
+ PosixEventEngine::CreatePosixEndpointFromFd(int fd,
887
+ const EndpointConfig& config,
888
+ MemoryAllocator memory_allocator) {
889
+ grpc_core::Crash(
890
+ "PosixEventEngine::CreatePosixEndpointFromFd is not supported on "
891
+ "this platform");
892
+ }
893
+
894
+ absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
895
+ PosixEventEngine::CreateListener(
896
+ Listener::AcceptCallback on_accept,
897
+ absl::AnyInvocable<void(absl::Status)> on_shutdown,
898
+ const EndpointConfig& config,
899
+ std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
908
900
  grpc_core::Crash(
909
901
  "EventEngine::CreateListener is not supported on this platform");
910
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
911
902
  }
912
903
 
904
+ absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
905
+ PosixEventEngine::CreatePosixListener(
906
+ PosixEventEngineWithFdSupport::PosixAcceptCallback on_accept,
907
+ absl::AnyInvocable<void(absl::Status)> on_shutdown,
908
+ const EndpointConfig& config,
909
+ std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
910
+ grpc_core::Crash(
911
+ "EventEngine::CreateListener is not supported on this platform");
912
+ }
913
+
914
+ #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
915
+
913
916
  #if GRPC_POSIX_SOCKET_TCP && GRPC_ENABLE_FORK_SUPPORT && \
914
917
  GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
915
918
 
916
919
  void PosixEventEngine::AfterFork(OnForkRole on_fork_role) {
920
+ #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
921
+ PosixEventPoller* poller = GetPollerChecked();
922
+ #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
917
923
  if (on_fork_role == OnForkRole::kChild) {
918
924
  if (grpc_core::IsEventEngineForkEnabled()) {
919
925
  AfterForkInChild();
920
926
  } else {
921
927
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
922
- poller_manager_.Poller()->HandleForkInChild();
928
+ poller->HandleForkInChild();
923
929
  #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
924
930
  }
925
931
  }
926
932
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
927
- poller_manager_.Poller()->ResetKickState();
933
+ poller->ResetKickState();
928
934
  SchedulePoller();
929
935
  #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
930
936
  }
@@ -946,7 +952,7 @@ void PosixEventEngine::AfterForkInChild() {
946
952
  }
947
953
  #endif
948
954
  #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
949
- poller_manager_.Poller()->HandleForkInChild();
955
+ GetPollerChecked()->HandleForkInChild();
950
956
  #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
951
957
  #if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
952
958
  for (const auto& cb : resolver_handles_) {
@@ -961,21 +967,4 @@ void PosixEventEngine::AfterForkInChild() {
961
967
  #endif // GRPC_POSIX_SOCKET_TCP && GRPC_ENABLE_FORK_SUPPORT &&
962
968
  // GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
963
969
 
964
- #if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
965
-
966
- void PosixEventEngine::SchedulePoller() {
967
- if (poller_manager_.Poller() != nullptr) {
968
- grpc_core::MutexLock lock(&mu_);
969
- CHECK(!polling_cycle_.has_value());
970
- polling_cycle_.emplace(&poller_manager_);
971
- }
972
- }
973
-
974
- void PosixEventEngine::ResetPollCycle() {
975
- grpc_core::MutexLock lock(&mu_);
976
- polling_cycle_.reset();
977
- }
978
-
979
- #endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
980
-
981
970
  } // namespace grpc_event_engine::experimental