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
@@ -38,6 +38,7 @@
38
38
  #include "absl/log/log.h"
39
39
  #include "absl/strings/str_cat.h"
40
40
  #include "absl/strings/str_format.h"
41
+ #include "src/core/lib/event_engine/shim.h"
41
42
  #include "src/core/lib/experiments/experiments.h"
42
43
  #include "src/core/lib/iomgr/block_annotate.h"
43
44
  #include "src/core/lib/iomgr/ev_poll_posix.h"
@@ -378,7 +379,9 @@ static void unref_by(grpc_fd* fd, int n) {
378
379
  }
379
380
 
380
381
  static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
381
- if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()) {
382
+ if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
383
+ !grpc_event_engine::experimental::
384
+ EventEngineExperimentDisabledForPython()) {
382
385
  GRPC_TRACE_LOG(event_engine, ERROR)
383
386
  << "Creating a wrapped EventEngine grpc_fd with fd:" << fd;
384
387
  grpc_fd* new_fd = static_cast<grpc_fd*>(gpr_malloc(sizeof(grpc_fd)));
@@ -477,7 +480,9 @@ static int fd_wrapped_fd(grpc_fd* fd) {
477
480
 
478
481
  static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
479
482
  const char* reason) {
480
- if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()) {
483
+ if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
484
+ !grpc_event_engine::experimental::
485
+ EventEngineExperimentDisabledForPython()) {
481
486
  CHECK_NE(release_fd, nullptr);
482
487
  CHECK_EQ(on_done, nullptr);
483
488
  *release_fd = fd->fd;
@@ -312,8 +312,9 @@ void EndpointRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
312
312
 
313
313
  // Write the data from slices and invoke the provided closure asynchronously
314
314
  // after the write is complete.
315
- void EndpointWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
316
- grpc_closure* cb, void* arg, int max_frame_size) {
315
+ void EndpointWrite(
316
+ grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
317
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
317
318
  auto* eeep =
318
319
  reinterpret_cast<EventEngineEndpointWrapper::grpc_event_engine_endpoint*>(
319
320
  ep);
@@ -323,10 +324,7 @@ void EndpointWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
323
324
  return;
324
325
  }
325
326
 
326
- EventEngine::Endpoint::WriteArgs write_args;
327
- write_args.SetDeprecatedAndDiscouragedGoogleSpecificPointer(arg);
328
- write_args.set_max_frame_size(max_frame_size);
329
- if (eeep->wrapper->Write(cb, slices, std::move(write_args))) {
327
+ if (eeep->wrapper->Write(cb, slices, std::move(args))) {
330
328
  // Write succeeded immediately. Run the callback inline.
331
329
  eeep->wrapper->FinishPendingWrite(absl::OkStatus());
332
330
  }
@@ -1795,8 +1795,9 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
1795
1795
  }
1796
1796
  }
1797
1797
 
1798
- static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1799
- grpc_closure* cb, void* arg, int /*max_frame_size*/) {
1798
+ static void tcp_write(
1799
+ grpc_endpoint* ep, grpc_slice_buffer* buf, grpc_closure* cb,
1800
+ grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
1800
1801
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1801
1802
  grpc_error_handle error;
1802
1803
  TcpZerocopySendRecord* zerocopy_send_record = nullptr;
@@ -1835,8 +1836,9 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1835
1836
  tcp->outgoing_buffer = buf;
1836
1837
  tcp->outgoing_byte_idx = 0;
1837
1838
  }
1838
- tcp->outgoing_buffer_arg = arg;
1839
- if (arg) {
1839
+ tcp->outgoing_buffer_arg =
1840
+ args.TakeDeprecatedAndDiscouragedGoogleSpecificPointer();
1841
+ if (tcp->outgoing_buffer_arg) {
1840
1842
  CHECK(grpc_event_engine_can_track_errors());
1841
1843
  }
1842
1844
 
@@ -1915,7 +1917,9 @@ static const grpc_endpoint_vtable vtable = {tcp_read,
1915
1917
  grpc_endpoint* grpc_tcp_create(
1916
1918
  grpc_fd* fd, const grpc_event_engine::experimental::EndpointConfig& config,
1917
1919
  absl::string_view peer_string) {
1918
- if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled()) {
1920
+ if (grpc_core::IsEventEngineForAllOtherEndpointsEnabled() &&
1921
+ !grpc_event_engine::experimental::
1922
+ EventEngineExperimentDisabledForPython()) {
1919
1923
  // Create an EventEngine endpoint when creating the transport.
1920
1924
  auto* engine =
1921
1925
  reinterpret_cast<grpc_event_engine::experimental::EventEngine*>(
@@ -1943,7 +1947,9 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
1943
1947
  CHECK(!grpc_event_engine::experimental::UsePollsetAlternative())
1944
1948
  << "This function must not be called when the pollset_alternative "
1945
1949
  "experiment is enabled. This is a bug.";
1946
- CHECK(!grpc_core::IsEventEngineForAllOtherEndpointsEnabled())
1950
+ CHECK(
1951
+ !grpc_core::IsEventEngineForAllOtherEndpointsEnabled() ||
1952
+ grpc_event_engine::experimental::EventEngineExperimentDisabledForPython())
1947
1953
  << "The event_engine_for_all_other_endpoints experiment should prevent "
1948
1954
  "this method from being called. This is a bug.";
1949
1955
  grpc_tcp* tcp = new grpc_tcp(options);
@@ -323,8 +323,9 @@ static void on_write(void* tcpp, grpc_error_handle error) {
323
323
 
324
324
  // Initiates a write.
325
325
  static void win_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
326
- grpc_closure* cb, void* /* arg */,
327
- int /* max_frame_size */) {
326
+ grpc_closure* cb,
327
+ grpc_event_engine::experimental::EventEngine::Endpoint::
328
+ WriteArgs /*args*/) {
328
329
  grpc_tcp* tcp = (grpc_tcp*)ep;
329
330
  grpc_winsocket* socket = tcp->socket;
330
331
  grpc_winsocket_callback_info* info = &socket->write_info;
@@ -122,6 +122,7 @@ class Waker {
122
122
  }
123
123
 
124
124
  std::string DebugString() const {
125
+ if (is_unwakeable()) return "<unwakeable>";
125
126
  return absl::StrFormat("Waker{%p, %d}", wakeable_and_arg_.wakeable,
126
127
  wakeable_and_arg_.wakeup_mask);
127
128
  }
@@ -48,6 +48,8 @@ template <typename T>
48
48
  struct Vtable {
49
49
  // Poll the promise, once.
50
50
  Poll<T> (*poll_once)(ArgType* arg);
51
+ // Move the promise to another memory location.
52
+ void (*move)(ArgType* dst, ArgType* src);
51
53
  // Destroy the underlying callable object if there is one.
52
54
  // Since we don't delete (the arena owns the memory) but we may need to call a
53
55
  // destructor, we expose this for when the ArenaPromise object is destroyed.
@@ -73,11 +75,12 @@ struct Null {
73
75
  GPR_UNREACHABLE_CODE(return Pending{});
74
76
  }
75
77
 
78
+ static void Move(ArgType*, ArgType*) {}
76
79
  static void Destroy(ArgType*) {}
77
80
  };
78
81
 
79
82
  template <typename T>
80
- const Vtable<T> Null<T>::vtable = {PollOnce, Destroy};
83
+ const Vtable<T> Null<T>::vtable = {PollOnce, Move, Destroy};
81
84
 
82
85
  // Implementation of ImplInterface for a callable object.
83
86
  template <typename T, typename Callable>
@@ -88,11 +91,16 @@ struct AllocatedCallable {
88
91
  return poll_cast<T>((*ArgAsPtr<Callable>(arg))());
89
92
  }
90
93
 
94
+ static void Move(ArgType* dst, ArgType* src) {
95
+ ArgAsPtr<Callable>(dst) = ArgAsPtr<Callable>(src);
96
+ }
97
+
91
98
  static void Destroy(ArgType* arg) { Destruct(ArgAsPtr<Callable>(arg)); }
92
99
  };
93
100
 
94
101
  template <typename T, typename Callable>
95
- const Vtable<T> AllocatedCallable<T, Callable>::vtable = {PollOnce, Destroy};
102
+ const Vtable<T> AllocatedCallable<T, Callable>::vtable = {PollOnce, Move,
103
+ Destroy};
96
104
 
97
105
  // Implementation of ImplInterface for a small callable object (one that fits
98
106
  // within the ArgType arg)
@@ -104,13 +112,17 @@ struct Inlined {
104
112
  return poll_cast<T>((*reinterpret_cast<Callable*>(arg))());
105
113
  }
106
114
 
115
+ static void Move(ArgType* dst, ArgType* src) {
116
+ new (dst) Callable(reinterpret_cast<Callable&&>(*src));
117
+ }
118
+
107
119
  static void Destroy(ArgType* arg) {
108
120
  Destruct(reinterpret_cast<Callable*>(arg));
109
121
  }
110
122
  };
111
123
 
112
124
  template <typename T, typename Callable>
113
- const Vtable<T> Inlined<T, Callable>::vtable = {PollOnce, Destroy};
125
+ const Vtable<T> Inlined<T, Callable>::vtable = {PollOnce, Move, Destroy};
114
126
 
115
127
  // If a callable object is empty we can substitute any instance of that callable
116
128
  // for the one we call (for how could we tell the difference)?
@@ -129,7 +141,7 @@ struct SharedCallable {
129
141
  };
130
142
 
131
143
  template <typename T, typename Callable>
132
- const Vtable<T> SharedCallable<T, Callable>::vtable = {PollOnce,
144
+ const Vtable<T> SharedCallable<T, Callable>::vtable = {PollOnce, Null<T>::Move,
133
145
  Null<T>::Destroy};
134
146
 
135
147
  // Redirector type: given a callable type, expose a Make() function that creates
@@ -199,13 +211,17 @@ class ArenaPromise {
199
211
  ArenaPromise(const ArenaPromise&) = delete;
200
212
  ArenaPromise& operator=(const ArenaPromise&) = delete;
201
213
  // ArenaPromise is movable.
202
- ArenaPromise(ArenaPromise&& other) noexcept
203
- : vtable_and_arg_(other.vtable_and_arg_) {
214
+ ArenaPromise(ArenaPromise&& other) noexcept {
215
+ vtable_and_arg_.vtable = other.vtable_and_arg_.vtable;
216
+ vtable_and_arg_.vtable->move(&vtable_and_arg_.arg,
217
+ &other.vtable_and_arg_.arg);
204
218
  other.vtable_and_arg_.vtable = &arena_promise_detail::Null<T>::vtable;
205
219
  }
206
220
  ArenaPromise& operator=(ArenaPromise&& other) noexcept {
207
221
  vtable_and_arg_.vtable->destroy(&vtable_and_arg_.arg);
208
- vtable_and_arg_ = other.vtable_and_arg_;
222
+ vtable_and_arg_.vtable = other.vtable_and_arg_.vtable;
223
+ vtable_and_arg_.vtable->move(&vtable_and_arg_.arg,
224
+ &other.vtable_and_arg_.arg);
209
225
  other.vtable_and_arg_.vtable = &arena_promise_detail::Null<T>::vtable;
210
226
  return *this;
211
227
  }
@@ -223,6 +223,7 @@ class OncePromiseFactory {
223
223
  using Arg = A;
224
224
  using Promise = decltype(PromiseFactoryImpl(OnceToken{}, std::move(f_),
225
225
  std::declval<A>()));
226
+ using UnderlyingFactory = F;
226
227
 
227
228
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit OncePromiseFactory(F f)
228
229
  : f_(std::move(f)) {}
@@ -240,6 +241,7 @@ class OncePromiseFactory<void, F> {
240
241
  public:
241
242
  using Arg = void;
242
243
  using Promise = decltype(PromiseFactoryImpl(OnceToken{}, std::move(f_)));
244
+ using UnderlyingFactory = F;
243
245
 
244
246
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION explicit OncePromiseFactory(F f)
245
247
  : f_(std::move(f)) {}
@@ -272,6 +274,14 @@ class RepeatedPromiseFactory {
272
274
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(Arg&& a) {
273
275
  return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<Arg>(a));
274
276
  }
277
+ template <typename U>
278
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(U&& u) const {
279
+ return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<U>(u));
280
+ }
281
+ template <typename U>
282
+ GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION Promise Make(U&& u) {
283
+ return PromiseFactoryImpl(RepeatableToken{}, f_, std::forward<U>(u));
284
+ }
275
285
  };
276
286
 
277
287
  template <typename F>
@@ -17,13 +17,17 @@
17
17
 
18
18
  #include <grpc/support/port_platform.h>
19
19
 
20
+ #include <cstddef>
20
21
  #include <utility>
21
22
 
22
- #include "absl/functional/any_invocable.h"
23
23
  #include "absl/meta/type_traits.h"
24
+ #include "src/core/channelz/property_list.h"
24
25
  #include "src/core/lib/promise/poll.h"
25
26
  #include "src/core/util/function_signature.h"
26
- #include "src/core/util/json/json.h"
27
+ #include "src/core/util/upb_utils.h"
28
+ #include "src/proto/grpc/channelz/v2/promise.upb.h"
29
+ #include "src/proto/grpc/channelz/v2/promise.upbdefs.h"
30
+ #include "upb/reflection/def.hpp"
27
31
 
28
32
  // A Promise is a callable object that returns Poll<T> for some T.
29
33
  // Often when we're writing code that uses promises, we end up wanting to also
@@ -50,23 +54,120 @@
50
54
  namespace grpc_core {
51
55
 
52
56
  namespace promise_detail {
57
+
58
+ template <typename Promise, typename = void>
59
+ constexpr bool kHasToProtoMethod = false;
60
+
61
+ template <typename Promise>
62
+ constexpr bool kHasToProtoMethod<
63
+ Promise, std::void_t<decltype(std::declval<Promise>().ToProto(
64
+ static_cast<grpc_channelz_v2_Promise*>(nullptr),
65
+ static_cast<upb_Arena*>(nullptr)))>> = true;
66
+
53
67
  template <typename Promise, typename = void>
54
- constexpr bool kHasToJsonMethod = false;
68
+ constexpr bool kHasChannelzPropertiesMethod = false;
55
69
 
56
70
  template <typename Promise>
57
- constexpr bool kHasToJsonMethod<
58
- Promise, std::void_t<decltype(std::declval<Promise>().ToJson())>> = true;
71
+ constexpr bool kHasChannelzPropertiesMethod<
72
+ Promise,
73
+ std::void_t<decltype(std::declval<Promise>().ChannelzProperties())>> = true;
74
+
59
75
  } // namespace promise_detail
60
76
 
61
77
  template <typename Promise>
62
- Json PromiseAsJson(const Promise& promise) {
63
- if constexpr (promise_detail::kHasToJsonMethod<Promise>) {
64
- return promise.ToJson();
78
+ void PromiseAsProto(const Promise& promise,
79
+ grpc_channelz_v2_Promise* promise_proto, upb_Arena* arena) {
80
+ if constexpr (promise_detail::kHasToProtoMethod<Promise>) {
81
+ promise.ToProto(promise_proto, arena);
82
+ } else if constexpr (promise_detail::kHasChannelzPropertiesMethod<Promise>) {
83
+ auto* custom_promise =
84
+ grpc_channelz_v2_Promise_mutable_custom_promise(promise_proto, arena);
85
+ grpc_channelz_v2_Promise_Custom_set_type(
86
+ custom_promise, StdStringToUpbString(TypeName<Promise>()));
87
+ promise.ChannelzProperties().FillUpbProto(
88
+ grpc_channelz_v2_Promise_Custom_mutable_properties(custom_promise,
89
+ arena),
90
+ arena);
65
91
  } else {
66
- return Json::FromString(std::string(TypeName<Promise>()));
92
+ grpc_channelz_v2_Promise_set_unknown_promise(
93
+ promise_proto, StdStringToUpbString(TypeName<Promise>()));
67
94
  }
68
95
  }
69
96
 
97
+ // Wrapper for Promises to convert them to PropertyValue types.
98
+ // Allows the type resolution logic to properly handle arbitrary promises.
99
+ template <typename T>
100
+ class PromiseProperty {
101
+ public:
102
+ explicit PromiseProperty(T* value) : value_(value) {}
103
+
104
+ T* TakeValue() { return std::exchange(value_, nullptr); }
105
+
106
+ private:
107
+ T* value_;
108
+ };
109
+
110
+ template <typename T>
111
+ PromiseProperty(T* value) -> PromiseProperty<T>;
112
+
113
+ // TODO(ctiller): needed to avoid circular dependencies as we transition the
114
+ // codebase, but we'll need a better long-term solution here.
115
+ namespace channelz::property_list_detail {
116
+
117
+ class PromisePropertyValue final : public OtherPropertyValue {
118
+ public:
119
+ template <typename T>
120
+ explicit PromisePropertyValue(T* value) {
121
+ PromiseAsProto(*value, promise_proto_, arena_);
122
+ }
123
+
124
+ PromisePropertyValue(PromisePropertyValue&&) = delete;
125
+ PromisePropertyValue& operator=(PromisePropertyValue&&) = delete;
126
+ PromisePropertyValue(const PromisePropertyValue&) = delete;
127
+ PromisePropertyValue& operator=(const PromisePropertyValue&) = delete;
128
+
129
+ ~PromisePropertyValue() override { upb_Arena_Free(arena_); }
130
+
131
+ void FillAny(google_protobuf_Any* any, upb_Arena* arena) override {
132
+ size_t length;
133
+ upb_Arena_Fuse(arena_, arena);
134
+ auto* bytes =
135
+ grpc_channelz_v2_Promise_serialize(promise_proto_, arena, &length);
136
+ google_protobuf_Any_set_value(
137
+ any, upb_StringView_FromDataAndSize(bytes, length));
138
+ google_protobuf_Any_set_type_url(
139
+ any,
140
+ StdStringToUpbString("type.googleapis.com/grpc.channelz.v2.Promise"));
141
+ }
142
+
143
+ Json::Object TakeJsonObject() override {
144
+ upb::DefPool def_pool;
145
+ auto* def = grpc_channelz_v2_Promise_getmsgdef(def_pool.ptr());
146
+ size_t length =
147
+ upb_TextEncode(reinterpret_cast<upb_Message*>(promise_proto_), def,
148
+ def_pool.ptr(), 0, nullptr, 0);
149
+ auto str = std::make_unique<char[]>(length);
150
+ upb_TextEncode(reinterpret_cast<upb_Message*>(promise_proto_), def,
151
+ def_pool.ptr(), 0, str.get(), length);
152
+ return {{"promise", Json::FromString(std::string(str.get()))}};
153
+ }
154
+
155
+ private:
156
+ upb_Arena* arena_ = upb_Arena_New();
157
+ grpc_channelz_v2_Promise* promise_proto_ =
158
+ grpc_channelz_v2_Promise_new(arena_);
159
+ };
160
+
161
+ template <typename T>
162
+ struct Wrapper<PromiseProperty<T>> {
163
+ static std::optional<PropertyValue> Wrap(PromiseProperty<T> value) {
164
+ return PropertyValue(
165
+ std::make_shared<PromisePropertyValue>(value.TakeValue()));
166
+ }
167
+ };
168
+
169
+ } // namespace channelz::property_list_detail
170
+
70
171
  namespace promise_detail {
71
172
 
72
173
  template <typename T>
@@ -114,7 +215,10 @@ class PromiseLike<
114
215
  GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION WrappedResult operator()() {
115
216
  return WrapInPoll(f_());
116
217
  }
117
- Json ToJson() const { return PromiseAsJson(f_); }
218
+ void ToProto(grpc_channelz_v2_Promise* promise_proto,
219
+ upb_Arena* arena) const {
220
+ PromiseAsProto(f_, promise_proto, arena);
221
+ }
118
222
  PromiseLike(const PromiseLike&) = default;
119
223
  PromiseLike& operator=(const PromiseLike&) = default;
120
224
  PromiseLike(PromiseLike&&) = default;
@@ -136,7 +240,10 @@ class PromiseLike<
136
240
  f_();
137
241
  return Empty{};
138
242
  }
139
- Json ToJson() const { return PromiseAsJson(f_); }
243
+ void ToProto(grpc_channelz_v2_Promise* promise_proto,
244
+ upb_Arena* arena) const {
245
+ PromiseAsProto(f_, promise_proto, arena);
246
+ }
140
247
  PromiseLike(const PromiseLike&) = default;
141
248
  PromiseLike& operator=(const PromiseLike&) = default;
142
249
  PromiseLike(PromiseLike&&) = default;
@@ -0,0 +1,50 @@
1
+ // Copyright 2024 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_PROMISE_DETAIL_PROMISE_VARIANT_H
16
+ #define GRPC_SRC_CORE_LIB_PROMISE_DETAIL_PROMISE_VARIANT_H
17
+
18
+ #include <variant>
19
+
20
+ namespace grpc_core {
21
+
22
+ namespace promise_detail {
23
+
24
+ // Visitor function for PromiseVariant - calls the poll operator on the inner
25
+ // type
26
+ class PollVisitor {
27
+ public:
28
+ template <typename T>
29
+ auto operator()(T& x) {
30
+ return x();
31
+ }
32
+ };
33
+
34
+ // Helper type - given a variant V, provides the poll operator (which simply
35
+ // visits the inner type on the variant with PollVisitor)
36
+ template <typename V>
37
+ class PromiseVariant {
38
+ public:
39
+ explicit PromiseVariant(V variant) : variant_(std::move(variant)) {}
40
+ auto operator()() { return std::visit(PollVisitor(), variant_); }
41
+
42
+ private:
43
+ V variant_;
44
+ };
45
+
46
+ } // namespace promise_detail
47
+
48
+ } // namespace grpc_core
49
+
50
+ #endif // GRPC_SRC_CORE_LIB_PROMISE_DETAIL_PROMISE_VARIANT_H