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
@@ -0,0 +1,281 @@
1
+ // Copyright 2025 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/event_engine/event_engine.h>
16
+ #include <grpc/support/port_platform.h>
17
+
18
+ #include "src/core/lib/iomgr/port.h"
19
+
20
+ // Stubs for compiling on non-POSIX platforms (e.g., Windows)
21
+ #ifndef GRPC_POSIX_SOCKET
22
+ #include "src/core/lib/event_engine/posix_engine/posix_interface.h"
23
+ #include "src/core/util/crash.h"
24
+
25
+ namespace grpc_event_engine::experimental {
26
+
27
+ bool IsSocketReusePortSupported() {
28
+ grpc_core::Crash(
29
+ "unimplemented on this platform: IsSocketReusePortSupported");
30
+ }
31
+
32
+ PosixErrorOr<FileDescriptor> EventEnginePosixInterface::Accept(
33
+ const FileDescriptor& sockfd, struct sockaddr* addr, socklen_t* addrlen) {
34
+ grpc_core::Crash(
35
+ "unimplemented on this platform: EventEnginePosixInterface::Accept");
36
+ }
37
+
38
+ PosixErrorOr<FileDescriptor> EventEnginePosixInterface::Accept4(
39
+ const FileDescriptor& sockfd,
40
+ grpc_event_engine::experimental::EventEngine::ResolvedAddress& addr,
41
+ int nonblock, int cloexec) {
42
+ grpc_core::Crash(
43
+ "unimplemented on this platform: EventEnginePosixInterface::Accept4");
44
+ }
45
+
46
+ PosixErrorOr<FileDescriptor> EventEnginePosixInterface::Socket(int domain,
47
+ int type,
48
+ int protocol) {
49
+ grpc_core::Crash(
50
+ "unimplemented on this platform: EventEnginePosixInterface::Socket");
51
+ }
52
+
53
+ #ifndef GRPC_POSIX_WAKEUP_FD
54
+ absl::StatusOr<std::pair<FileDescriptor, FileDescriptor> >
55
+ EventEnginePosixInterface::Pipe() {
56
+ grpc_core::Crash(
57
+ "unimplemented on this platform: EventEnginePosixInterface::Pipe");
58
+ }
59
+ #endif // GRPC_POSIX_WAKEUP_FD
60
+
61
+ PosixError EventEnginePosixInterface::Connect(const FileDescriptor& sockfd,
62
+ const struct sockaddr* addr,
63
+ socklen_t addrlen) {
64
+ grpc_core::Crash(
65
+ "unimplemented on this platform: EventEnginePosixInterface::Connect");
66
+ }
67
+
68
+ PosixError EventEnginePosixInterface::Ioctl(const FileDescriptor& fd, int op,
69
+ void* arg) {
70
+ grpc_core::Crash(
71
+ "unimplemented on this platform: EventEnginePosixInterface::Ioctl");
72
+ }
73
+
74
+ PosixError EventEnginePosixInterface::Shutdown(const FileDescriptor& fd,
75
+ int how) {
76
+ grpc_core::Crash(
77
+ "unimplemented on this platform: EventEnginePosixInterface::Shutdown");
78
+ }
79
+
80
+ PosixError EventEnginePosixInterface::GetSockOpt(const FileDescriptor& fd,
81
+ int level, int optname,
82
+ void* optval, void* optlen) {
83
+ grpc_core::Crash(
84
+ "unimplemented on this platform: EventEnginePosixInterface::GetSockOpt");
85
+ }
86
+
87
+ PosixErrorOr<int64_t> EventEnginePosixInterface::SetSockOpt(
88
+ const FileDescriptor& fd, int level, int optname, uint32_t optval) {
89
+ grpc_core::Crash(
90
+ "unimplemented on this platform: EventEnginePosixInterface::SetSockOpt");
91
+ }
92
+
93
+ #ifndef GRPC_POSIX_WAKEUP_FD
94
+ PosixErrorOr<int64_t> EventEnginePosixInterface::Read(const FileDescriptor& fd,
95
+ absl::Span<char> buf) {
96
+ grpc_core::Crash(
97
+ "unimplemented on this platform: EventEnginePosixInterface::Read");
98
+ }
99
+
100
+ PosixErrorOr<int64_t> EventEnginePosixInterface::Write(const FileDescriptor& fd,
101
+ absl::Span<char> buf) {
102
+ grpc_core::Crash(
103
+ "unimplemented on this platform: EventEnginePosixInterface::Write");
104
+ }
105
+ #endif // GRPC_POSIX_WAKEUP_FD
106
+
107
+ PosixErrorOr<int64_t> EventEnginePosixInterface::RecvMsg(
108
+ const FileDescriptor& fd, struct msghdr* message, int flags) {
109
+ grpc_core::Crash(
110
+ "unimplemented on this platform: EventEnginePosixInterface::RecvMsg");
111
+ }
112
+
113
+ PosixErrorOr<int64_t> EventEnginePosixInterface::SendMsg(
114
+ const FileDescriptor& fd, const struct msghdr* message, int flags) {
115
+ grpc_core::Crash(
116
+ "unimplemented on this platform: EventEnginePosixInterface::SendMsg");
117
+ }
118
+
119
+ // Note: PrepareTcpClientSocket is private in the header, stubs might not be
120
+ // needed depending on usage, but updating message for consistency if it is.
121
+ absl::Status EventEnginePosixInterface::PrepareTcpClientSocket(
122
+ int fd, const EventEngine::ResolvedAddress& addr,
123
+ const PosixTcpOptions& options) {
124
+ grpc_core::Crash(
125
+ "unimplemented on this platform: "
126
+ "EventEnginePosixInterface::PrepareTcpClientSocket");
127
+ }
128
+
129
+ absl::StatusOr<EventEngine::ResolvedAddress>
130
+ EventEnginePosixInterface::PrepareListenerSocket(
131
+ const FileDescriptor& fd, const PosixTcpOptions& options,
132
+ const EventEngine::ResolvedAddress& address) {
133
+ grpc_core::Crash(
134
+ "unimplemented on this platform: "
135
+ "EventEnginePosixInterface::PrepareListenerSocket");
136
+ }
137
+
138
+ absl::StatusOr<int> EventEnginePosixInterface::GetUnusedPort() {
139
+ grpc_core::Crash(
140
+ "unimplemented on this platform: "
141
+ "EventEnginePosixInterface::GetUnusedPort");
142
+ }
143
+
144
+ // Note: InternalApplySocketMutatorInOptions seems like a helper not in the
145
+ // class. Assuming it's a free function in this namespace.
146
+ absl::Status InternalApplySocketMutatorInOptions(
147
+ int fd, grpc_fd_usage usage, const PosixTcpOptions& options) {
148
+ grpc_core::Crash(
149
+ "unimplemented on this platform: InternalApplySocketMutatorInOptions");
150
+ }
151
+
152
+ absl::StatusOr<EventEngine::ResolvedAddress>
153
+ EventEnginePosixInterface::LocalAddress(const FileDescriptor& fd) {
154
+ grpc_core::Crash(
155
+ "unimplemented on this platform: "
156
+ "EventEnginePosixInterface::LocalAddress");
157
+ }
158
+
159
+ absl::StatusOr<std::string> EventEnginePosixInterface::LocalAddressString(
160
+ const FileDescriptor& fd) {
161
+ grpc_core::Crash(
162
+ "unimplemented on this platform: "
163
+ "EventEnginePosixInterface::LocalAddressString");
164
+ }
165
+
166
+ PosixErrorOr<FileDescriptor> EventEnginePosixInterface::EventFd(int initval,
167
+ int flags) {
168
+ grpc_core::Crash(
169
+ "unimplemented on this platform: EventEnginePosixInterface::EventFd");
170
+ }
171
+
172
+ PosixError EventEnginePosixInterface::EventFdRead(const FileDescriptor& fd) {
173
+ grpc_core::Crash(
174
+ "unimplemented on this platform: EventEnginePosixInterface::EventFdRead");
175
+ }
176
+
177
+ PosixError EventEnginePosixInterface::EventFdWrite(const FileDescriptor& fd) {
178
+ grpc_core::Crash(
179
+ "unimplemented on this platform: "
180
+ "EventEnginePosixInterface::EventFdWrite");
181
+ }
182
+
183
+ int EventEnginePosixInterface::ConfigureSocket(const FileDescriptor& fd,
184
+ int type) {
185
+ grpc_core::Crash(
186
+ "unimplemented on this platform: "
187
+ "EventEnginePosixInterface::ConfigureSocket");
188
+ }
189
+
190
+ PosixErrorOr<int> EventEnginePosixInterface::GetFd(const FileDescriptor& fd) {
191
+ grpc_core::Crash(
192
+ "unimplemented on this platform: "
193
+ "EventEnginePosixInterface::GetFd");
194
+ }
195
+
196
+ absl::StatusOr<EventEngine::ResolvedAddress>
197
+ EventEnginePosixInterface::PeerAddress(const FileDescriptor& fd) {
198
+ grpc_core::Crash(
199
+ "unimplemented on this platform: EventEnginePosixInterface::PeerAddress");
200
+ }
201
+
202
+ absl::StatusOr<std::string> EventEnginePosixInterface::PeerAddressString(
203
+ const FileDescriptor& fd) {
204
+ grpc_core::Crash(
205
+ "unimplemented on this platform: "
206
+ "EventEnginePosixInterface::PeerAddressString");
207
+ }
208
+
209
+ #ifndef GRPC_POSIX_WAKEUP_FD
210
+ void EventEnginePosixInterface::Close(const FileDescriptor& fd) {
211
+ grpc_core::Crash(
212
+ "unimplemented on this platform: EventEnginePosixInterface::Close");
213
+ }
214
+ #endif // GRPC_POSIX_WAKEUP_FD
215
+
216
+ absl::StatusOr<FileDescriptor> EventEnginePosixInterface::CreateDualStackSocket(
217
+ std::function<int(int, int, int)> socket_factory,
218
+ const experimental::EventEngine::ResolvedAddress& addr, int type,
219
+ int protocol, DSMode& dsmode) {
220
+ grpc_core::Crash(
221
+ "unimplemented on this platform: "
222
+ "EventEnginePosixInterface::CreateDualStackSocket");
223
+ }
224
+
225
+ absl::Status EventEnginePosixInterface::ApplySocketMutatorInOptions(
226
+ const FileDescriptor& fd, grpc_fd_usage usage,
227
+ const PosixTcpOptions& options) {
228
+ grpc_core::Crash(
229
+ "unimplemented on this platform: "
230
+ "EventEnginePosixInterface::ApplySocketMutatorInOptions");
231
+ }
232
+
233
+ absl::StatusOr<EventEnginePosixInterface::PosixSocketCreateResult>
234
+ EventEnginePosixInterface::CreateAndPrepareTcpClientSocket(
235
+ const PosixTcpOptions& options,
236
+ const EventEngine::ResolvedAddress& target_addr) {
237
+ grpc_core::Crash(
238
+ "unimplemented on this platform: "
239
+ "EventEnginePosixInterface::CreateAndPrepareTcpClientSocket");
240
+ }
241
+
242
+ FileDescriptor EventEnginePosixInterface::Adopt(int fd) {
243
+ grpc_core::Crash(
244
+ "unimplemented on this platform: EventEnginePosixInterface::Adopt");
245
+ }
246
+
247
+ PosixErrorOr<FileDescriptor>
248
+ EventEnginePosixInterface::EpollCreateAndCloexec() {
249
+ grpc_core::Crash(
250
+ "unimplemented on this platform: "
251
+ "EventEnginePosixInterface::EpollCreateAndCloexec");
252
+ }
253
+
254
+ absl::Status EventEnginePosixInterface::SetSocketNoSigpipeIfPossible(
255
+ const FileDescriptor& fd) {
256
+ grpc_core::Crash(
257
+ "unimplemented on this platform: "
258
+ "EventEnginePosixInterface::SetSocketNoSigpipeIfPossible");
259
+ }
260
+
261
+ #ifdef GRPC_ENABLE_FORK_SUPPORT
262
+
263
+ void EventEnginePosixInterface::AdvanceGeneration() {
264
+ grpc_core::Crash(
265
+ "unimplemented on this platform: "
266
+ "EventEnginePosixInterface::AdvanceGeneration");
267
+ }
268
+
269
+ #endif // GRPC_ENABLE_FORK_SUPPORT
270
+
271
+ absl::Status EventEnginePosixInterface::SetSocketMutator(
272
+ const FileDescriptor& fd, grpc_fd_usage usage,
273
+ grpc_socket_mutator* mutator) {
274
+ grpc_core::Crash(
275
+ "unimplemented on this platform: "
276
+ "EventEnginePosixInterface::SetSocketMutator");
277
+ }
278
+
279
+ } // namespace grpc_event_engine::experimental
280
+
281
+ #endif // !GRPC_POSIX_SOCKET
@@ -0,0 +1,154 @@
1
+ // Copyright 2025 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "src/core/lib/event_engine/posix_engine/posix_write_event_sink.h"
16
+
17
+ namespace grpc_event_engine::experimental {
18
+
19
+ std::optional<size_t> PosixWriteEventSink::GetMetricKey(
20
+ absl::string_view name) {
21
+ if (name == "delivery_rate") {
22
+ return static_cast<size_t>(Metric::kDeliveryRate);
23
+ }
24
+ if (name == "is_delivery_rate_app_limited") {
25
+ return static_cast<size_t>(Metric::kIsDeliveryRateAppLimited);
26
+ }
27
+ if (name == "packet_retx") return static_cast<size_t>(Metric::kPacketRetx);
28
+ if (name == "packet_spurious_retx") {
29
+ return static_cast<size_t>(Metric::kPacketSpuriousRetx);
30
+ }
31
+ if (name == "packet_sent") return static_cast<size_t>(Metric::kPacketSent);
32
+ if (name == "packet_delivered") {
33
+ return static_cast<size_t>(Metric::kPacketDelivered);
34
+ }
35
+ if (name == "packet_delivered_ce") {
36
+ return static_cast<size_t>(Metric::kPacketDeliveredCE);
37
+ }
38
+ if (name == "data_retx") return static_cast<size_t>(Metric::kDataRetx);
39
+ if (name == "data_sent") return static_cast<size_t>(Metric::kDataSent);
40
+ if (name == "data_notsent") {
41
+ return static_cast<size_t>(Metric::kDataNotSent);
42
+ }
43
+ if (name == "pacing_rate") return static_cast<size_t>(Metric::kPacingRate);
44
+ if (name == "min_rtt") return static_cast<size_t>(Metric::kMinRtt);
45
+ if (name == "srtt") return static_cast<size_t>(Metric::kSrtt);
46
+ if (name == "congestion_window") {
47
+ return static_cast<size_t>(Metric::kCongestionWindow);
48
+ }
49
+ if (name == "snd_ssthresh") {
50
+ return static_cast<size_t>(Metric::kSndSsthresh);
51
+ }
52
+ if (name == "reordering") return static_cast<size_t>(Metric::kReordering);
53
+ if (name == "recurring_retrans") {
54
+ return static_cast<size_t>(Metric::kRecurringRetrans);
55
+ }
56
+ if (name == "busy_usec") return static_cast<size_t>(Metric::kBusyUsec);
57
+ if (name == "rwnd_limited_usec") {
58
+ return static_cast<size_t>(Metric::kRwndLimitedUsec);
59
+ }
60
+ if (name == "sndbuf_limited_usec") {
61
+ return static_cast<size_t>(Metric::kSndbufLimitedUsec);
62
+ }
63
+ return std::nullopt;
64
+ }
65
+
66
+ std::optional<absl::string_view> PosixWriteEventSink::GetMetricName(
67
+ size_t key) {
68
+ switch (key) {
69
+ case static_cast<size_t>(Metric::kDeliveryRate):
70
+ return "delivery_rate";
71
+ case static_cast<size_t>(Metric::kIsDeliveryRateAppLimited):
72
+ return "is_delivery_rate_app_limited";
73
+ case static_cast<size_t>(Metric::kPacketRetx):
74
+ return "packet_retx";
75
+ case static_cast<size_t>(Metric::kPacketSpuriousRetx):
76
+ return "packet_spurious_retx";
77
+ case static_cast<size_t>(Metric::kPacketSent):
78
+ return "packet_sent";
79
+ case static_cast<size_t>(Metric::kPacketDelivered):
80
+ return "packet_delivered";
81
+ case static_cast<size_t>(Metric::kPacketDeliveredCE):
82
+ return "packet_delivered_ce";
83
+ case static_cast<size_t>(Metric::kDataRetx):
84
+ return "data_retx";
85
+ case static_cast<size_t>(Metric::kDataSent):
86
+ return "data_sent";
87
+ case static_cast<size_t>(Metric::kDataNotSent):
88
+ return "data_notsent";
89
+ case static_cast<size_t>(Metric::kPacingRate):
90
+ return "pacing_rate";
91
+ case static_cast<size_t>(Metric::kMinRtt):
92
+ return "min_rtt";
93
+ case static_cast<size_t>(Metric::kSrtt):
94
+ return "srtt";
95
+ case static_cast<size_t>(Metric::kCongestionWindow):
96
+ return "congestion_window";
97
+ case static_cast<size_t>(Metric::kSndSsthresh):
98
+ return "snd_ssthresh";
99
+ case static_cast<size_t>(Metric::kReordering):
100
+ return "reordering";
101
+ case static_cast<size_t>(Metric::kRecurringRetrans):
102
+ return "recurring_retrans";
103
+ case static_cast<size_t>(Metric::kBusyUsec):
104
+ return "busy_usec";
105
+ case static_cast<size_t>(Metric::kRwndLimitedUsec):
106
+ return "rwnd_limited_usec";
107
+ case static_cast<size_t>(Metric::kSndbufLimitedUsec):
108
+ return "sndbuf_limited_usec";
109
+ default:
110
+ return std::nullopt;
111
+ }
112
+ }
113
+
114
+ void PosixWriteEventSink::RecordEvent(EventEngine::Endpoint::WriteEvent event,
115
+ absl::Time timestamp,
116
+ const ConnectionMetrics& conn_metrics) {
117
+ if (!requested_events_.test(static_cast<int>(event))) return;
118
+ std::vector<EventEngine::Endpoint::WriteMetric> metrics;
119
+ auto maybe_add = [this, &metrics](Metric metric, auto value) {
120
+ if (requested_metrics_ == nullptr ||
121
+ !requested_metrics_->IsSet(static_cast<int>(metric)) ||
122
+ !value.has_value()) {
123
+ return;
124
+ }
125
+ metrics.push_back(EventEngine::Endpoint::WriteMetric{
126
+ static_cast<size_t>(metric),
127
+ static_cast<int64_t>(value.value()),
128
+ });
129
+ };
130
+ maybe_add(Metric::kDeliveryRate, conn_metrics.delivery_rate);
131
+ maybe_add(Metric::kIsDeliveryRateAppLimited,
132
+ conn_metrics.is_delivery_rate_app_limited);
133
+ maybe_add(Metric::kPacketRetx, conn_metrics.packet_retx);
134
+ maybe_add(Metric::kPacketSpuriousRetx, conn_metrics.packet_spurious_retx);
135
+ maybe_add(Metric::kPacketSent, conn_metrics.packet_sent);
136
+ maybe_add(Metric::kPacketDelivered, conn_metrics.packet_delivered);
137
+ maybe_add(Metric::kPacketDeliveredCE, conn_metrics.packet_delivered_ce);
138
+ maybe_add(Metric::kDataRetx, conn_metrics.data_retx);
139
+ maybe_add(Metric::kDataSent, conn_metrics.data_sent);
140
+ maybe_add(Metric::kDataNotSent, conn_metrics.data_notsent);
141
+ maybe_add(Metric::kPacingRate, conn_metrics.pacing_rate);
142
+ maybe_add(Metric::kMinRtt, conn_metrics.min_rtt);
143
+ maybe_add(Metric::kSrtt, conn_metrics.srtt);
144
+ maybe_add(Metric::kCongestionWindow, conn_metrics.congestion_window);
145
+ maybe_add(Metric::kSndSsthresh, conn_metrics.snd_ssthresh);
146
+ maybe_add(Metric::kReordering, conn_metrics.reordering);
147
+ maybe_add(Metric::kRecurringRetrans, conn_metrics.recurring_retrans);
148
+ maybe_add(Metric::kBusyUsec, conn_metrics.busy_usec);
149
+ maybe_add(Metric::kRwndLimitedUsec, conn_metrics.rwnd_limited_usec);
150
+ maybe_add(Metric::kSndbufLimitedUsec, conn_metrics.sndbuf_limited_usec);
151
+ on_event_(event, timestamp, std::move(metrics));
152
+ }
153
+
154
+ } // namespace grpc_event_engine::experimental
@@ -0,0 +1,174 @@
1
+ // Copyright 2025 The gRPC Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_WRITE_EVENT_SINK_H
16
+ #define GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_WRITE_EVENT_SINK_H
17
+
18
+ #include <grpc/event_engine/event_engine.h>
19
+
20
+ #include "absl/base/no_destructor.h"
21
+ #include "absl/functional/any_invocable.h"
22
+ #include "src/core/util/bitset.h"
23
+
24
+ namespace grpc_event_engine::experimental {
25
+
26
+ class PosixWriteEventSink {
27
+ public:
28
+ struct ConnectionMetrics { // Delivery rate in Bytes/s.
29
+ std::optional<uint64_t> delivery_rate;
30
+ // If the delivery rate is limited by the application, this is set to true.
31
+ std::optional<bool> is_delivery_rate_app_limited;
32
+ // Total packets retransmitted.
33
+ std::optional<uint32_t> packet_retx;
34
+ // Total packets retransmitted spuriously. This metric is smaller than or
35
+ // equal to packet_retx.
36
+ std::optional<uint32_t> packet_spurious_retx;
37
+ // Total packets sent.
38
+ std::optional<uint32_t> packet_sent;
39
+ // Total packets delivered.
40
+ std::optional<uint32_t> packet_delivered;
41
+ // Total packets delivered with ECE marked. This metric is smaller than or
42
+ // equal to packet_delivered.
43
+ std::optional<uint32_t> packet_delivered_ce;
44
+ // Total bytes lost so far.
45
+ std::optional<uint64_t> data_retx;
46
+ // Total bytes sent so far.
47
+ std::optional<uint64_t> data_sent;
48
+ // Total bytes in write queue but not sent.
49
+ std::optional<uint64_t> data_notsent;
50
+ // Pacing rate of the connection in Bps
51
+ std::optional<uint64_t> pacing_rate;
52
+ // Minimum RTT observed in usec.
53
+ std::optional<uint32_t> min_rtt;
54
+ // Smoothed RTT in usec
55
+ std::optional<uint32_t> srtt;
56
+ // Send congestion window.
57
+ std::optional<uint32_t> congestion_window;
58
+ // Slow start threshold in packets.
59
+ std::optional<uint32_t> snd_ssthresh;
60
+ // Maximum degree of reordering (i.e., maximum number of packets reodered)
61
+ // on the connection.
62
+ std::optional<uint32_t> reordering;
63
+ // Represents the number of recurring retransmissions of the first sequence
64
+ // that is not acknowledged yet.
65
+ std::optional<uint8_t> recurring_retrans;
66
+ // The cumulative time (in usec) that the transport protocol was busy
67
+ // sending data.
68
+ std::optional<uint64_t> busy_usec;
69
+ // The cumulative time (in usec) that the transport protocol was limited by
70
+ // the receive window size.
71
+ std::optional<uint64_t> rwnd_limited_usec;
72
+ // The cumulative time (in usec) that the transport protocol was limited by
73
+ // the send buffer size.
74
+ std::optional<uint64_t> sndbuf_limited_usec;
75
+ };
76
+
77
+ enum class Metric {
78
+ kDeliveryRate,
79
+ kIsDeliveryRateAppLimited,
80
+ kPacketRetx,
81
+ kPacketSpuriousRetx,
82
+ kPacketSent,
83
+ kPacketDelivered,
84
+ kPacketDeliveredCE,
85
+ kDataRetx,
86
+ kDataSent,
87
+ kDataNotSent,
88
+ kPacingRate,
89
+ kMinRtt,
90
+ kSrtt,
91
+ kCongestionWindow,
92
+ kSndSsthresh,
93
+ kReordering,
94
+ kRecurringRetrans,
95
+ kBusyUsec,
96
+ kRwndLimitedUsec,
97
+ kSndbufLimitedUsec,
98
+ // Must be last.
99
+ kCount
100
+ };
101
+
102
+ explicit PosixWriteEventSink(EventEngine::Endpoint::WriteEventSink sink)
103
+ : requested_metrics_(sink.requested_metrics()),
104
+ requested_events_(sink.requested_events_mask()),
105
+ on_event_(sink.TakeEventCallback()) {}
106
+
107
+ static constexpr size_t NumWriteMetrics() {
108
+ return static_cast<size_t>(Metric::kCount);
109
+ }
110
+
111
+ static std::vector<size_t> AllWriteMetrics() {
112
+ std::vector<size_t> out;
113
+ out.reserve(NumWriteMetrics());
114
+ for (size_t i = 0; i < NumWriteMetrics(); ++i) {
115
+ out.push_back(i);
116
+ }
117
+ return out;
118
+ }
119
+
120
+ static std::optional<size_t> GetMetricKey(absl::string_view name);
121
+ static std::optional<absl::string_view> GetMetricName(size_t key);
122
+
123
+ static std::shared_ptr<EventEngine::Endpoint::MetricsSet> GetMetricsSet(
124
+ absl::Span<const size_t> keys) {
125
+ return std::make_shared<MetricsSet>(keys);
126
+ }
127
+
128
+ static std::shared_ptr<EventEngine::Endpoint::MetricsSet>
129
+ GetFullMetricsSet() {
130
+ static absl::NoDestructor<std::shared_ptr<FullMetricsSet>> full_metrics_set(
131
+ std::make_shared<FullMetricsSet>());
132
+ return *full_metrics_set;
133
+ }
134
+
135
+ void RecordEvent(EventEngine::Endpoint::WriteEvent event,
136
+ absl::Time timestamp, const ConnectionMetrics& metrics);
137
+
138
+ private:
139
+ class MetricsSet : public EventEngine::Endpoint::MetricsSet {
140
+ public:
141
+ explicit MetricsSet(absl::Span<const size_t> keys) {
142
+ for (size_t key : keys) {
143
+ if (key >= static_cast<size_t>(Metric::kCount)) continue;
144
+ metrics_set_.set(static_cast<int>(key));
145
+ }
146
+ }
147
+
148
+ bool IsSet(size_t key) const override {
149
+ return key < static_cast<size_t>(Metric::kCount) &&
150
+ metrics_set_.is_set(key);
151
+ }
152
+
153
+ private:
154
+ grpc_core::BitSet<static_cast<int>(Metric::kCount)> metrics_set_;
155
+ };
156
+
157
+ class FullMetricsSet : public EventEngine::Endpoint::MetricsSet {
158
+ public:
159
+ bool IsSet(size_t key) const override {
160
+ return key < static_cast<size_t>(Metric::kCount);
161
+ }
162
+ };
163
+
164
+ std::shared_ptr<EventEngine::Endpoint::MetricsSet> requested_metrics_;
165
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSet
166
+ requested_events_;
167
+ absl::AnyInvocable<void(internal::WriteEvent, absl::Time,
168
+ std::vector<EventEngine::Endpoint::WriteMetric>)>
169
+ on_event_;
170
+ };
171
+
172
+ } // namespace grpc_event_engine::experimental
173
+
174
+ #endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_WRITE_EVENT_SINK_H