grpc 1.73.0 → 1.75.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 (786) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +116 -53
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +18 -6
  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/client_call.cc +4 -4
  11. data/src/core/call/filter_fusion.h +1230 -0
  12. data/src/core/call/interception_chain.h +7 -11
  13. data/src/core/call/metadata.cc +22 -0
  14. data/src/core/call/metadata.h +24 -2
  15. data/src/core/channelz/channel_trace.cc +213 -115
  16. data/src/core/channelz/channel_trace.h +380 -86
  17. data/src/core/channelz/channelz.cc +274 -192
  18. data/src/core/channelz/channelz.h +224 -72
  19. data/src/core/channelz/channelz_registry.cc +2 -163
  20. data/src/core/channelz/channelz_registry.h +37 -6
  21. data/src/core/channelz/property_list.cc +353 -0
  22. data/src/core/channelz/property_list.h +204 -0
  23. data/src/core/channelz/v2tov1/convert.cc +683 -0
  24. data/src/core/channelz/v2tov1/convert.h +58 -0
  25. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  26. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  27. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  28. data/src/core/channelz/v2tov1/property_list.h +52 -0
  29. data/src/core/channelz/ztrace_collector.h +3 -2
  30. data/src/core/client_channel/backup_poller.cc +17 -2
  31. data/src/core/client_channel/client_channel.cc +17 -28
  32. data/src/core/client_channel/client_channel_filter.cc +24 -33
  33. data/src/core/client_channel/client_channel_filter.h +2 -2
  34. data/src/core/client_channel/client_channel_internal.h +2 -1
  35. data/src/core/client_channel/config_selector.h +8 -2
  36. data/src/core/client_channel/dynamic_filters.cc +5 -6
  37. data/src/core/client_channel/dynamic_filters.h +1 -1
  38. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  39. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  40. data/src/core/client_channel/retry_filter.cc +21 -27
  41. data/src/core/client_channel/retry_filter.h +10 -7
  42. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  43. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  44. data/src/core/client_channel/retry_interceptor.cc +30 -44
  45. data/src/core/client_channel/retry_interceptor.h +18 -17
  46. data/src/core/client_channel/retry_throttle.cc +46 -61
  47. data/src/core/client_channel/retry_throttle.h +17 -39
  48. data/src/core/client_channel/subchannel.cc +57 -25
  49. data/src/core/client_channel/subchannel.h +10 -0
  50. data/src/core/config/config_vars.cc +2 -0
  51. data/src/core/config/core_configuration.cc +4 -1
  52. data/src/core/config/core_configuration.h +23 -0
  53. data/src/core/credentials/call/call_creds_registry.h +125 -0
  54. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  55. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  56. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  57. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  58. data/src/core/credentials/call/jwt_util.cc +70 -0
  59. data/src/core/credentials/call/jwt_util.h +32 -0
  60. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  61. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  62. data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
  63. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  64. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
  65. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  66. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  67. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  68. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  69. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  70. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  71. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  72. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  73. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  74. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  75. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  76. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  77. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  78. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  79. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  80. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  81. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  82. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  83. data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
  84. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  85. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  86. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  87. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  88. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  89. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  90. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  91. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  93. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +165 -117
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  95. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  96. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  97. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
  99. data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
  100. data/src/core/ext/transport/chttp2/transport/frame.h +40 -2
  101. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  104. data/src/core/ext/transport/chttp2/transport/header_assembler.h +290 -0
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  108. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  109. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1233 -0
  110. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
  111. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  112. data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
  113. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  114. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  115. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  116. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  117. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  118. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +121 -0
  119. data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -0
  120. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  121. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  122. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  123. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  124. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  125. data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -5
  126. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  127. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
  128. data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -0
  129. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  130. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  131. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  132. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  133. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  134. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  135. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  136. data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
  137. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  138. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  139. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  140. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  141. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  142. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  143. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  144. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  145. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  146. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
  147. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
  148. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  149. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  150. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  151. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  152. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  153. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
  154. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  155. data/src/core/filter/auth/auth_filters.h +2 -27
  156. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  157. data/src/core/filter/filter_args.h +9 -23
  158. data/src/core/filter/fused_filters.cc +154 -0
  159. data/src/core/handshaker/handshaker.cc +23 -14
  160. data/src/core/handshaker/handshaker.h +3 -0
  161. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  162. data/src/core/handshaker/security/legacy_secure_endpoint.cc +7 -6
  163. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  164. data/src/core/handshaker/security/secure_endpoint.cc +98 -38
  165. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  166. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  167. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  168. data/src/core/lib/channel/channel_args.cc +15 -0
  169. data/src/core/lib/channel/channel_args.h +3 -0
  170. data/src/core/lib/channel/channel_stack.cc +22 -23
  171. data/src/core/lib/channel/channel_stack.h +9 -7
  172. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  173. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  174. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  175. data/src/core/lib/channel/promise_based_filter.h +11 -10
  176. data/src/core/lib/debug/trace_impl.h +0 -1
  177. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  178. data/src/core/lib/event_engine/ares_resolver.h +51 -3
  179. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
  180. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
  181. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  182. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  183. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  184. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
  185. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  186. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  187. data/src/core/lib/event_engine/event_engine.cc +7 -0
  188. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  189. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  190. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +139 -169
  191. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
  192. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
  193. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
  194. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
  195. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
  196. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  197. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  198. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  199. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +30 -19
  200. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  201. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  202. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  203. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  204. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
  205. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  206. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
  207. data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
  208. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
  209. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  210. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  211. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  212. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  213. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  214. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  215. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  216. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  217. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  218. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +11 -171
  219. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  220. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  221. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  222. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  223. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  224. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  225. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  226. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  227. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  228. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  229. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  230. data/src/core/lib/event_engine/shim.cc +9 -0
  231. data/src/core/lib/event_engine/shim.h +3 -0
  232. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  233. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  234. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  235. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  236. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +6 -1
  237. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  238. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  239. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  240. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  241. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  242. data/src/core/lib/experiments/experiments.cc +165 -99
  243. data/src/core/lib/experiments/experiments.h +65 -52
  244. data/src/core/lib/iomgr/combiner.cc +1 -1
  245. data/src/core/lib/iomgr/endpoint.cc +4 -3
  246. data/src/core/lib/iomgr/endpoint.h +7 -4
  247. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  248. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  249. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  250. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  251. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  252. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  253. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  254. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  255. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  256. data/src/core/lib/iomgr/tcp_posix.cc +15 -9
  257. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  258. data/src/core/lib/promise/activity.h +3 -2
  259. data/src/core/lib/promise/arena_promise.h +23 -7
  260. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  261. data/src/core/lib/promise/detail/promise_like.h +118 -11
  262. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  263. data/src/core/lib/promise/detail/seq_state.h +687 -548
  264. data/src/core/lib/promise/if.h +20 -0
  265. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  266. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  267. data/src/core/lib/promise/loop.h +65 -3
  268. data/src/core/lib/promise/map.h +24 -0
  269. data/src/core/lib/promise/match_promise.h +103 -0
  270. data/src/core/lib/promise/mpsc.cc +425 -0
  271. data/src/core/lib/promise/mpsc.h +490 -0
  272. data/src/core/lib/promise/party.cc +55 -6
  273. data/src/core/lib/promise/party.h +68 -3
  274. data/src/core/lib/promise/poll.h +10 -0
  275. data/src/core/lib/promise/race.h +31 -0
  276. data/src/core/lib/promise/seq.h +4 -1
  277. data/src/core/lib/promise/status_flag.h +7 -0
  278. data/src/core/lib/promise/try_seq.h +4 -1
  279. data/src/core/lib/promise/wait_set.cc +28 -0
  280. data/src/core/lib/promise/wait_set.h +86 -0
  281. data/src/core/lib/resource_quota/arena.h +19 -0
  282. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  283. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  284. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  285. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  286. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  287. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  288. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  289. data/src/core/lib/slice/slice.h +5 -0
  290. data/src/core/lib/surface/call.cc +5 -5
  291. data/src/core/lib/surface/call.h +6 -5
  292. data/src/core/lib/surface/channel_create.cc +88 -13
  293. data/src/core/lib/surface/channel_create.h +4 -0
  294. data/src/core/lib/surface/channel_init.cc +164 -47
  295. data/src/core/lib/surface/channel_init.h +64 -1
  296. data/src/core/lib/surface/completion_queue.cc +2 -4
  297. data/src/core/lib/surface/filter_stack_call.cc +19 -10
  298. data/src/core/lib/surface/init.cc +6 -15
  299. data/src/core/lib/surface/legacy_channel.cc +3 -5
  300. data/src/core/lib/surface/legacy_channel.h +3 -1
  301. data/src/core/lib/surface/version.cc +2 -2
  302. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  303. data/src/core/lib/transport/promise_endpoint.h +307 -0
  304. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  305. data/src/core/load_balancing/delegating_helper.h +2 -3
  306. data/src/core/load_balancing/endpoint_list.cc +29 -2
  307. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  308. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  309. data/src/core/load_balancing/health_check_client.cc +1 -5
  310. data/src/core/load_balancing/lb_policy.h +1 -3
  311. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  312. data/src/core/load_balancing/pick_first/pick_first.cc +15 -5
  313. data/src/core/load_balancing/xds/cds.cc +10 -1
  314. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  315. data/src/core/net/socket_mutator.cc +19 -0
  316. data/src/core/net/socket_mutator.h +25 -0
  317. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  318. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  319. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  320. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  321. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  322. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  323. data/src/core/resolver/xds/xds_config.cc +6 -3
  324. data/src/core/resolver/xds/xds_config.h +9 -4
  325. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -7
  326. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  327. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  328. data/src/core/server/server.cc +84 -13
  329. data/src/core/server/server.h +21 -2
  330. data/src/core/server/server_call_tracer_filter.cc +0 -66
  331. data/src/core/server/server_call_tracer_filter.h +64 -0
  332. data/src/core/server/server_config_selector_filter.cc +1 -1
  333. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  334. data/src/core/service_config/service_config.h +1 -1
  335. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  336. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  337. data/src/core/service_config/service_config_impl.h +1 -1
  338. data/src/core/telemetry/call_tracer.cc +20 -14
  339. data/src/core/telemetry/call_tracer.h +22 -17
  340. data/src/core/telemetry/context_list_entry.cc +38 -0
  341. data/src/core/telemetry/context_list_entry.h +42 -12
  342. data/src/core/telemetry/metrics.h +8 -8
  343. data/src/core/telemetry/stats_data.cc +369 -343
  344. data/src/core/telemetry/stats_data.h +341 -244
  345. data/src/core/telemetry/tcp_tracer.h +1 -1
  346. data/src/core/transport/auth_context.cc +20 -0
  347. data/src/core/transport/auth_context.h +4 -0
  348. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  349. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  350. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  351. data/src/core/tsi/fake_transport_security.cc +17 -0
  352. data/src/core/tsi/ssl_transport_security.cc +205 -32
  353. data/src/core/tsi/ssl_transport_security.h +19 -10
  354. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  355. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  356. data/src/core/tsi/transport_security_grpc.cc +8 -0
  357. data/src/core/tsi/transport_security_grpc.h +15 -0
  358. data/src/core/util/backoff.cc +1 -5
  359. data/src/core/util/backoff.h +1 -0
  360. data/src/core/util/down_cast.h +1 -1
  361. data/src/core/util/function_signature.h +15 -1
  362. data/src/core/util/http_client/httpcli.cc +12 -5
  363. data/src/core/util/http_client/httpcli.h +4 -1
  364. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  365. data/src/core/util/latent_see.cc +178 -146
  366. data/src/core/util/latent_see.h +249 -189
  367. data/src/core/util/log.cc +4 -0
  368. data/src/core/util/memory_usage.h +268 -0
  369. data/src/core/util/per_cpu.cc +2 -0
  370. data/src/core/util/per_cpu.h +7 -0
  371. data/src/core/util/shared_bit_gen.h +20 -0
  372. data/src/core/util/single_set_ptr.h +7 -4
  373. data/src/core/util/upb_utils.h +42 -0
  374. data/src/core/util/uri.cc +3 -2
  375. data/src/core/util/useful.h +144 -2
  376. data/src/core/util/wait_for_single_owner.cc +31 -0
  377. data/src/core/util/wait_for_single_owner.h +24 -0
  378. data/src/core/util/windows/directory_reader.cc +1 -0
  379. data/src/core/util/windows/thd.cc +1 -3
  380. data/src/core/util/work_serializer.cc +1 -1
  381. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  382. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  383. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  384. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  385. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  386. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  387. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  388. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  389. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  390. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  391. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  392. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  393. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  394. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  395. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  396. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  397. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  398. data/src/core/xds/xds_client/xds_client.cc +26 -5
  399. data/src/ruby/ext/grpc/extconf.rb +2 -0
  400. data/src/ruby/ext/grpc/rb_call.c +1 -8
  401. data/src/ruby/ext/grpc/rb_channel.c +70 -557
  402. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  403. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  404. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  405. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  406. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  407. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  408. data/src/ruby/ext/grpc/rb_server.c +31 -50
  409. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  410. data/src/ruby/lib/grpc/version.rb +1 -1
  411. data/src/ruby/spec/core_spec.rb +22 -0
  412. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  413. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  414. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  415. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  416. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  417. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  418. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  419. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  420. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  421. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  422. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  423. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  424. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  425. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  426. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  427. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  428. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  429. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  430. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  431. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  432. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  433. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  434. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  435. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  436. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  437. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  438. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  439. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  440. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  441. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  442. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  443. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  444. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  445. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  446. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  447. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  448. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  449. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  450. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  451. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  452. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  453. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  454. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  455. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  456. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  457. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  458. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  459. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  460. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  461. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  462. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  463. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  464. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  470. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  471. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  474. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  475. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  476. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  477. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  478. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  479. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  480. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  481. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  482. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  483. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  484. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  485. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  486. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  487. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  489. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  490. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  491. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  492. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  493. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  494. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  495. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  496. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  497. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  498. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  499. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  500. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  501. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  502. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  503. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  504. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  505. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  506. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  507. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  508. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  509. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  510. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  511. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  512. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  513. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  514. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  515. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  516. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  517. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  518. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  519. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  520. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  521. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  522. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  523. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  524. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  525. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  526. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  527. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  528. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  529. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  530. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  531. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  532. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  533. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  534. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  535. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  536. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  537. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  538. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  539. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  540. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  541. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  542. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  543. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  544. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  545. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  546. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  547. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  548. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  549. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  550. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  551. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  552. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  553. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  554. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  555. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  556. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  557. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  558. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  559. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  560. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  561. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  562. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  563. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  564. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  565. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  566. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  567. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  568. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  569. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  570. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  571. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  572. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  573. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  574. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  575. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  576. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  577. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  579. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  580. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  581. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  582. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  583. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  584. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  585. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  586. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  587. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  588. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  589. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  590. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  591. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  592. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  593. data/third_party/cares/cares/include/ares.h +925 -460
  594. data/third_party/cares/cares/include/ares_dns.h +86 -71
  595. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  596. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  597. data/third_party/cares/cares/include/ares_version.h +37 -14
  598. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  599. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  600. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  601. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  602. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  603. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  604. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  605. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  606. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  607. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  608. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  609. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  610. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  611. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  612. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  613. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  614. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  615. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  616. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  617. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  618. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  619. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  620. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  621. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  622. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  623. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  624. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  625. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  626. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  627. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  628. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  629. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  630. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  631. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  632. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  633. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  634. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  635. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  636. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  637. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  638. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  639. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  640. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  641. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  642. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  643. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  644. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  645. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  646. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  647. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  648. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  649. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  650. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  651. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  652. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  653. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  654. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  655. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  656. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  657. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  658. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  659. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  660. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  661. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  662. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  663. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  664. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  665. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  666. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  667. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  668. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  669. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  670. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  671. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  672. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  673. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  674. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  675. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  676. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  677. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  678. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  679. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  680. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  681. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  682. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  683. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  684. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  685. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  686. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  687. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  688. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  689. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  690. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  691. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  692. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  693. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  694. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  695. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  696. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  697. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  698. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  699. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  700. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  701. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  702. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  703. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  704. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  705. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  706. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  707. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  708. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  709. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  710. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  711. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  712. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  713. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  714. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  715. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  716. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  717. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  718. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  719. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  720. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  721. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  722. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  723. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  724. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  725. metadata +192 -68
  726. data/src/core/lib/event_engine/forkable.cc +0 -105
  727. data/src/core/lib/event_engine/forkable.h +0 -67
  728. data/src/core/lib/iomgr/python_util.h +0 -46
  729. data/src/core/util/ring_buffer.h +0 -122
  730. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  731. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  732. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  733. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  734. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  735. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  736. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  737. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  738. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  739. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
  740. data/third_party/cares/cares/include/ares_rules.h +0 -125
  741. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  742. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  743. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  744. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  745. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  746. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  747. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  748. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  749. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  750. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  751. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  752. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  753. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  754. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  755. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  756. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  757. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  758. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  759. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  760. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  761. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  762. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  763. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  764. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  765. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  766. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  767. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  768. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  769. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  770. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  771. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  772. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  773. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  774. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  775. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  776. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  777. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  778. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  779. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  780. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  781. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  782. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  783. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  784. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  785. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  786. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -35,11 +35,10 @@ size_t GetMaxPerRpcRetryBufferSize(const ChannelArgs& args) {
35
35
 
36
36
  namespace retry_detail {
37
37
 
38
- RetryState::RetryState(
39
- const internal::RetryMethodConfig* retry_policy,
40
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data)
38
+ RetryState::RetryState(const internal::RetryMethodConfig* retry_policy,
39
+ RefCountedPtr<internal::RetryThrottler> retry_throttler)
41
40
  : retry_policy_(retry_policy),
42
- retry_throttle_data_(std::move(retry_throttle_data)),
41
+ retry_throttler_(std::move(retry_throttler)),
43
42
  retry_backoff_(
44
43
  BackOff::Options()
45
44
  .set_initial_backoff(retry_policy_ == nullptr
@@ -67,8 +66,8 @@ std::optional<Duration> RetryState::ShouldRetry(
67
66
  const auto status = md.get(GrpcStatusMetadata());
68
67
  if (status.has_value()) {
69
68
  if (GPR_LIKELY(*status == GRPC_STATUS_OK)) {
70
- if (retry_throttle_data_ != nullptr) {
71
- retry_throttle_data_->RecordSuccess();
69
+ if (retry_throttler_ != nullptr) {
70
+ retry_throttler_->RecordSuccess();
72
71
  }
73
72
  GRPC_TRACE_LOG(retry, INFO)
74
73
  << lazy_attempt_debug_string() << " call succeeded";
@@ -89,8 +88,7 @@ std::optional<Duration> RetryState::ShouldRetry(
89
88
  // things like failures due to malformed requests (INVALID_ARGUMENT).
90
89
  // Conversely, it's important for this to come before the remaining
91
90
  // checks, so that we don't fail to record failures due to other factors.
92
- if (retry_throttle_data_ != nullptr &&
93
- !retry_throttle_data_->RecordFailure()) {
91
+ if (retry_throttler_ != nullptr && !retry_throttler_->RecordFailure()) {
94
92
  GRPC_TRACE_LOG(retry, INFO)
95
93
  << lazy_attempt_debug_string() << " retries throttled";
96
94
  return std::nullopt;
@@ -131,55 +129,43 @@ std::optional<Duration> RetryState::ShouldRetry(
131
129
  return next_attempt_timeout;
132
130
  }
133
131
 
134
- absl::StatusOr<RefCountedPtr<internal::ServerRetryThrottleData>>
135
- ServerRetryThrottleDataFromChannelArgs(const ChannelArgs& args) {
136
- // Get retry throttling parameters from service config.
137
- auto* service_config = args.GetObject<ServiceConfig>();
138
- if (service_config == nullptr) return nullptr;
139
- const auto* config = static_cast<const internal::RetryGlobalConfig*>(
140
- service_config->GetGlobalParsedConfig(
141
- internal::RetryServiceConfigParser::ParserIndex()));
142
- if (config == nullptr) return nullptr;
143
- // Get server name from target URI.
144
- auto server_uri = args.GetString(GRPC_ARG_SERVER_URI);
145
- if (!server_uri.has_value()) {
146
- return GRPC_ERROR_CREATE(
147
- "server URI channel arg missing or wrong type in client channel "
148
- "filter");
149
- }
150
- absl::StatusOr<URI> uri = URI::Parse(*server_uri);
151
- if (!uri.ok() || uri->path().empty()) {
152
- return GRPC_ERROR_CREATE("could not extract server name from target URI");
153
- }
154
- std::string server_name(absl::StripPrefix(uri->path(), "/"));
155
- // Get throttling config for server_name.
156
- return internal::ServerRetryThrottleMap::Get()->GetDataForServer(
157
- server_name, config->max_milli_tokens(), config->milli_token_ratio());
158
- }
159
-
160
132
  } // namespace retry_detail
161
133
 
162
134
  ////////////////////////////////////////////////////////////////////////////////
163
135
  // RetryInterceptor
164
136
 
165
137
  absl::StatusOr<RefCountedPtr<RetryInterceptor>> RetryInterceptor::Create(
166
- const ChannelArgs& args, const FilterArgs&) {
167
- auto retry_throttle_data =
168
- retry_detail::ServerRetryThrottleDataFromChannelArgs(args);
169
- if (!retry_throttle_data.ok()) {
170
- return retry_throttle_data.status();
138
+ const ChannelArgs& args, const FilterArgs& filter_args) {
139
+ auto retry_throttler = filter_args.GetState<internal::RetryThrottler>("");
140
+ return MakeRefCounted<RetryInterceptor>(args, std::move(retry_throttler));
141
+ }
142
+
143
+ void RetryInterceptor::UpdateBlackboard(const ServiceConfig& service_config,
144
+ const Blackboard* old_blackboard,
145
+ Blackboard* new_blackboard) {
146
+ const auto* config = static_cast<const internal::RetryGlobalConfig*>(
147
+ service_config.GetGlobalParsedConfig(
148
+ internal::RetryServiceConfigParser::ParserIndex()));
149
+ if (config == nullptr) return;
150
+ // Get existing throttle state.
151
+ RefCountedPtr<internal::RetryThrottler> throttler;
152
+ if (old_blackboard != nullptr) {
153
+ throttler = old_blackboard->Get<internal::RetryThrottler>("");
171
154
  }
172
- return MakeRefCounted<RetryInterceptor>(args,
173
- std::move(*retry_throttle_data));
155
+ throttler = internal::RetryThrottler::Create(config->max_milli_tokens(),
156
+ config->milli_token_ratio(),
157
+ std::move(throttler));
158
+ CHECK_NE(new_blackboard, nullptr);
159
+ new_blackboard->Set("", std::move(throttler));
174
160
  }
175
161
 
176
162
  RetryInterceptor::RetryInterceptor(
177
163
  const ChannelArgs& args,
178
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data)
164
+ RefCountedPtr<internal::RetryThrottler> retry_throttler)
179
165
  : per_rpc_retry_buffer_size_(GetMaxPerRpcRetryBufferSize(args)),
180
166
  service_config_parser_index_(
181
167
  internal::RetryServiceConfigParser::ParserIndex()),
182
- retry_throttle_data_(std::move(retry_throttle_data)) {}
168
+ retry_throttler_(std::move(retry_throttler)) {}
183
169
 
184
170
  void RetryInterceptor::InterceptCall(
185
171
  UnstartedCallHandler unstarted_call_handler) {
@@ -206,7 +192,7 @@ RetryInterceptor::Call::Call(RefCountedPtr<RetryInterceptor> interceptor,
206
192
  : call_handler_(std::move(call_handler)),
207
193
  interceptor_(std::move(interceptor)),
208
194
  retry_state_(interceptor_->GetRetryPolicy(),
209
- interceptor_->retry_throttle_data_) {
195
+ interceptor_->retry_throttler_) {
210
196
  GRPC_TRACE_LOG(retry, INFO)
211
197
  << DebugTag() << " retry call created: " << retry_state_;
212
198
  }
@@ -26,11 +26,11 @@
26
26
  namespace grpc_core {
27
27
 
28
28
  namespace retry_detail {
29
+
29
30
  class RetryState {
30
31
  public:
31
- RetryState(
32
- const internal::RetryMethodConfig* retry_policy,
33
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data);
32
+ RetryState(const internal::RetryMethodConfig* retry_policy,
33
+ RefCountedPtr<internal::RetryThrottler> retry_throttler);
34
34
 
35
35
  // if nullopt --> commit & don't retry
36
36
  // if duration --> retry after duration
@@ -41,36 +41,37 @@ class RetryState {
41
41
 
42
42
  template <typename Sink>
43
43
  friend void AbslStringify(Sink& sink, const RetryState& state) {
44
- sink.Append(absl::StrCat(
45
- "policy:{",
46
- state.retry_policy_ != nullptr ? absl::StrCat(*state.retry_policy_)
47
- : "none",
48
- "} throttle:", state.retry_throttle_data_ != nullptr,
49
- " attempts:", state.num_attempts_completed_));
44
+ sink.Append(absl::StrCat("policy:{",
45
+ state.retry_policy_ != nullptr
46
+ ? absl::StrCat(*state.retry_policy_)
47
+ : "none",
48
+ "} throttler:", state.retry_throttler_ != nullptr,
49
+ " attempts:", state.num_attempts_completed_));
50
50
  }
51
51
 
52
52
  private:
53
53
  const internal::RetryMethodConfig* const retry_policy_;
54
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data_;
54
+ RefCountedPtr<internal::RetryThrottler> retry_throttler_;
55
55
  int num_attempts_completed_ = 0;
56
56
  BackOff retry_backoff_;
57
57
  };
58
58
 
59
- absl::StatusOr<RefCountedPtr<internal::ServerRetryThrottleData>>
60
- ServerRetryThrottleDataFromChannelArgs(const ChannelArgs& args);
61
59
  } // namespace retry_detail
62
60
 
63
61
  class RetryInterceptor : public Interceptor {
64
62
  public:
65
- RetryInterceptor(
66
- const ChannelArgs& args,
67
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data);
63
+ RetryInterceptor(const ChannelArgs& args,
64
+ RefCountedPtr<internal::RetryThrottler> retry_throttler);
68
65
 
69
66
  static absl::StatusOr<RefCountedPtr<RetryInterceptor>> Create(
70
- const ChannelArgs& args, const FilterArgs&);
67
+ const ChannelArgs& args, const FilterArgs& filter_args);
71
68
 
72
69
  void Orphaned() override {}
73
70
 
71
+ static void UpdateBlackboard(const ServiceConfig& service_config,
72
+ const Blackboard* old_blackboard,
73
+ Blackboard* new_blackboard);
74
+
74
75
  protected:
75
76
  void InterceptCall(UnstartedCallHandler unstarted_call_handler) override;
76
77
 
@@ -149,7 +150,7 @@ class RetryInterceptor : public Interceptor {
149
150
 
150
151
  const size_t per_rpc_retry_buffer_size_;
151
152
  const size_t service_config_parser_index_;
152
- const RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data_;
153
+ const RefCountedPtr<internal::RetryThrottler> retry_throttler_;
153
154
  };
154
155
 
155
156
  } // namespace grpc_core
@@ -18,14 +18,9 @@
18
18
 
19
19
  #include "src/core/client_channel/retry_throttle.h"
20
20
 
21
- #include <grpc/support/port_platform.h>
22
-
23
21
  #include <atomic>
24
22
  #include <cstdint>
25
23
  #include <limits>
26
- #include <map>
27
- #include <string>
28
- #include <utility>
29
24
 
30
25
  #include "src/core/util/useful.h"
31
26
 
@@ -33,6 +28,7 @@ namespace grpc_core {
33
28
  namespace internal {
34
29
 
35
30
  namespace {
31
+
36
32
  template <typename T>
37
33
  T ClampedAdd(std::atomic<T>& value, T delta, T min, T max) {
38
34
  T prev_value = value.load(std::memory_order_relaxed);
@@ -43,45 +39,74 @@ T ClampedAdd(std::atomic<T>& value, T delta, T min, T max) {
43
39
  std::memory_order_relaxed));
44
40
  return new_value;
45
41
  }
42
+
46
43
  } // namespace
47
44
 
48
45
  //
49
- // ServerRetryThrottleData
46
+ // RetryThrottler
50
47
  //
51
48
 
52
- ServerRetryThrottleData::ServerRetryThrottleData(uintptr_t max_milli_tokens,
53
- uintptr_t milli_token_ratio,
54
- uintptr_t milli_tokens)
49
+ RefCountedPtr<RetryThrottler> RetryThrottler::Create(
50
+ uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
51
+ RefCountedPtr<RetryThrottler> previous) {
52
+ if (previous != nullptr && previous->max_milli_tokens_ == max_milli_tokens &&
53
+ previous->milli_token_ratio_ == milli_token_ratio) {
54
+ return previous;
55
+ }
56
+ // previous is null or has different parameters. Create a new one.
57
+ uintptr_t initial_milli_tokens = max_milli_tokens;
58
+ // If there was a pre-existing entry for this server name, initialize
59
+ // the token count by scaling proportionately to the old data. This
60
+ // ensures that if we're already throttling retries on the old scale,
61
+ // we will start out doing the same thing on the new one.
62
+ if (previous != nullptr) {
63
+ double token_fraction = static_cast<double>(previous->milli_tokens_) /
64
+ static_cast<double>(previous->max_milli_tokens_);
65
+ initial_milli_tokens =
66
+ static_cast<uintptr_t>(token_fraction * max_milli_tokens);
67
+ }
68
+ auto throttle_data = MakeRefCounted<RetryThrottler>(
69
+ max_milli_tokens, milli_token_ratio, initial_milli_tokens);
70
+ if (previous != nullptr) previous->SetReplacement(throttle_data);
71
+ return throttle_data;
72
+ }
73
+
74
+ UniqueTypeName RetryThrottler::Type() {
75
+ static UniqueTypeName::Factory factory("retry_throttle");
76
+ return factory.Create();
77
+ }
78
+
79
+ RetryThrottler::RetryThrottler(uintptr_t max_milli_tokens,
80
+ uintptr_t milli_token_ratio,
81
+ uintptr_t milli_tokens)
55
82
  : max_milli_tokens_(max_milli_tokens),
56
83
  milli_token_ratio_(milli_token_ratio),
57
84
  milli_tokens_(milli_tokens) {}
58
85
 
59
- ServerRetryThrottleData::~ServerRetryThrottleData() {
60
- ServerRetryThrottleData* replacement =
61
- replacement_.load(std::memory_order_acquire);
86
+ RetryThrottler::~RetryThrottler() {
87
+ RetryThrottler* replacement = replacement_.load(std::memory_order_acquire);
62
88
  if (replacement != nullptr) {
63
89
  replacement->Unref();
64
90
  }
65
91
  }
66
92
 
67
- void ServerRetryThrottleData::SetReplacement(
68
- RefCountedPtr<ServerRetryThrottleData> replacement) {
93
+ void RetryThrottler::SetReplacement(RefCountedPtr<RetryThrottler> replacement) {
69
94
  replacement_.store(replacement.release(), std::memory_order_release);
70
95
  }
71
96
 
72
- void ServerRetryThrottleData::GetReplacementThrottleDataIfNeeded(
73
- ServerRetryThrottleData** throttle_data) {
97
+ void RetryThrottler::GetReplacementThrottleDataIfNeeded(
98
+ RetryThrottler** throttle_data) {
74
99
  while (true) {
75
- ServerRetryThrottleData* new_throttle_data =
100
+ RetryThrottler* new_throttle_data =
76
101
  (*throttle_data)->replacement_.load(std::memory_order_acquire);
77
102
  if (new_throttle_data == nullptr) return;
78
103
  *throttle_data = new_throttle_data;
79
104
  }
80
105
  }
81
106
 
82
- bool ServerRetryThrottleData::RecordFailure() {
107
+ bool RetryThrottler::RecordFailure() {
83
108
  // First, check if we are stale and need to be replaced.
84
- ServerRetryThrottleData* throttle_data = this;
109
+ RetryThrottler* throttle_data = this;
85
110
  GetReplacementThrottleDataIfNeeded(&throttle_data);
86
111
  // We decrement milli_tokens by 1000 (1 token) for each failure.
87
112
  const uintptr_t new_value = ClampedAdd<intptr_t>(
@@ -93,9 +118,9 @@ bool ServerRetryThrottleData::RecordFailure() {
93
118
  return new_value > throttle_data->max_milli_tokens_ / 2;
94
119
  }
95
120
 
96
- void ServerRetryThrottleData::RecordSuccess() {
121
+ void RetryThrottler::RecordSuccess() {
97
122
  // First, check if we are stale and need to be replaced.
98
- ServerRetryThrottleData* throttle_data = this;
123
+ RetryThrottler* throttle_data = this;
99
124
  GetReplacementThrottleDataIfNeeded(&throttle_data);
100
125
  // We increment milli_tokens by milli_token_ratio for each success.
101
126
  ClampedAdd<intptr_t>(
@@ -105,45 +130,5 @@ void ServerRetryThrottleData::RecordSuccess() {
105
130
  std::numeric_limits<intptr_t>::max())));
106
131
  }
107
132
 
108
- //
109
- // ServerRetryThrottleMap
110
- //
111
-
112
- ServerRetryThrottleMap* ServerRetryThrottleMap::Get() {
113
- static ServerRetryThrottleMap* m = new ServerRetryThrottleMap();
114
- return m;
115
- }
116
-
117
- RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
118
- const std::string& server_name, uintptr_t max_milli_tokens,
119
- uintptr_t milli_token_ratio) {
120
- MutexLock lock(&mu_);
121
- auto& throttle_data = map_[server_name];
122
- if (throttle_data == nullptr ||
123
- throttle_data->max_milli_tokens() != max_milli_tokens ||
124
- throttle_data->milli_token_ratio() != milli_token_ratio) {
125
- // Entry not found, or found with old parameters. Create a new one.
126
- auto old_throttle_data = std::move(throttle_data);
127
- uintptr_t initial_milli_tokens = max_milli_tokens;
128
- // If there was a pre-existing entry for this server name, initialize
129
- // the token count by scaling proportionately to the old data. This
130
- // ensures that if we're already throttling retries on the old scale,
131
- // we will start out doing the same thing on the new one.
132
- if (old_throttle_data != nullptr) {
133
- double token_fraction =
134
- static_cast<double>(old_throttle_data->milli_tokens()) /
135
- static_cast<double>(old_throttle_data->max_milli_tokens());
136
- initial_milli_tokens =
137
- static_cast<uintptr_t>(token_fraction * max_milli_tokens);
138
- }
139
- throttle_data = MakeRefCounted<ServerRetryThrottleData>(
140
- max_milli_tokens, milli_token_ratio, initial_milli_tokens);
141
- if (old_throttle_data != nullptr) {
142
- old_throttle_data->SetReplacement(throttle_data);
143
- }
144
- }
145
- return throttle_data;
146
- }
147
-
148
133
  } // namespace internal
149
134
  } // namespace grpc_core
@@ -19,30 +19,29 @@
19
19
  #ifndef GRPC_SRC_CORE_CLIENT_CHANNEL_RETRY_THROTTLE_H
20
20
  #define GRPC_SRC_CORE_CLIENT_CHANNEL_RETRY_THROTTLE_H
21
21
 
22
- #include <grpc/support/port_platform.h>
23
22
  #include <stdint.h>
24
23
 
25
24
  #include <atomic>
26
- #include <map>
27
- #include <string>
28
25
 
29
- #include "absl/base/thread_annotations.h"
30
- #include "src/core/util/ref_counted.h"
26
+ #include "src/core/filter/blackboard.h"
31
27
  #include "src/core/util/ref_counted_ptr.h"
32
- #include "src/core/util/sync.h"
33
28
 
34
29
  namespace grpc_core {
35
30
  namespace internal {
36
31
 
37
- class ServerRetryThrottleMap;
38
-
39
32
  /// Tracks retry throttling data for an individual server name.
40
- class ServerRetryThrottleData final
41
- : public RefCounted<ServerRetryThrottleData> {
33
+ class RetryThrottler final : public Blackboard::Entry {
42
34
  public:
43
- ServerRetryThrottleData(uintptr_t max_milli_tokens,
44
- uintptr_t milli_token_ratio, uintptr_t milli_tokens);
45
- ~ServerRetryThrottleData() override;
35
+ static RefCountedPtr<RetryThrottler> Create(
36
+ uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
37
+ RefCountedPtr<RetryThrottler> previous);
38
+
39
+ static UniqueTypeName Type();
40
+
41
+ // Do not instantiate directly -- use Create() instead.
42
+ RetryThrottler(uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
43
+ uintptr_t milli_tokens);
44
+ ~RetryThrottler() override;
46
45
 
47
46
  /// Records a failure. Returns true if it's okay to send a retry.
48
47
  bool RecordFailure();
@@ -50,6 +49,7 @@ class ServerRetryThrottleData final
50
49
  /// Records a success.
51
50
  void RecordSuccess();
52
51
 
52
+ // Exposed for testing purposes only.
53
53
  uintptr_t max_milli_tokens() const { return max_milli_tokens_; }
54
54
  uintptr_t milli_token_ratio() const { return milli_token_ratio_; }
55
55
  intptr_t milli_tokens() const {
@@ -57,39 +57,17 @@ class ServerRetryThrottleData final
57
57
  }
58
58
 
59
59
  private:
60
- friend ServerRetryThrottleMap;
60
+ void SetReplacement(RefCountedPtr<RetryThrottler> replacement);
61
61
 
62
- void SetReplacement(RefCountedPtr<ServerRetryThrottleData> replacement);
63
-
64
- void GetReplacementThrottleDataIfNeeded(
65
- ServerRetryThrottleData** throttle_data);
62
+ void GetReplacementThrottleDataIfNeeded(RetryThrottler** throttle_data);
66
63
 
67
64
  const uintptr_t max_milli_tokens_;
68
65
  const uintptr_t milli_token_ratio_;
69
66
  std::atomic<intptr_t> milli_tokens_;
70
- // A pointer to the replacement for this ServerRetryThrottleData entry.
67
+ // A pointer to the replacement for this RetryThrottler entry.
71
68
  // If non-nullptr, then this entry is stale and must not be used.
72
69
  // We hold a reference to the replacement.
73
- std::atomic<ServerRetryThrottleData*> replacement_{nullptr};
74
- };
75
-
76
- /// Global map of server name to retry throttle data.
77
- class ServerRetryThrottleMap final {
78
- public:
79
- static ServerRetryThrottleMap* Get();
80
-
81
- /// Returns the failure data for \a server_name, creating a new entry if
82
- /// needed.
83
- RefCountedPtr<ServerRetryThrottleData> GetDataForServer(
84
- const std::string& server_name, uintptr_t max_milli_tokens,
85
- uintptr_t milli_token_ratio);
86
-
87
- private:
88
- using StringToDataMap =
89
- std::map<std::string, RefCountedPtr<ServerRetryThrottleData>>;
90
-
91
- Mutex mu_;
92
- StringToDataMap map_ ABSL_GUARDED_BY(mu_);
70
+ std::atomic<RetryThrottler*> replacement_{nullptr};
93
71
  };
94
72
 
95
73
  } // namespace internal
@@ -117,7 +117,7 @@ class LegacyConnectedSubchannel : public ConnectedSubchannel {
117
117
  channel_stack_.reset(DEBUG_LOCATION, "ConnectedSubchannel");
118
118
  }
119
119
 
120
- channelz::SubchannelNode* channelz_node() const {
120
+ channelz::SubchannelNode* channelz_node() const override {
121
121
  return channelz_node_.get();
122
122
  }
123
123
 
@@ -220,6 +220,8 @@ class NewConnectedSubchannel : public ConnectedSubchannel {
220
220
  Crash("legacy ping method called in call v3 impl");
221
221
  }
222
222
 
223
+ channelz::SubchannelNode* channelz_node() const override { return nullptr; }
224
+
223
225
  private:
224
226
  RefCountedPtr<UnstartedCallDestination> call_destination_;
225
227
  RefCountedPtr<TransportCallDestination> transport_;
@@ -410,23 +412,37 @@ class Subchannel::ConnectedSubchannelStateWatcher final
410
412
  // we will see TRANSIENT_FAILURE followed by SHUTDOWN, but if not, we
411
413
  // will see only SHUTDOWN. Either way, we react to the first one we
412
414
  // see, ignoring anything that happens after that.
413
- if (c->connected_subchannel_ == nullptr) return;
414
415
  if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
415
416
  new_state == GRPC_CHANNEL_SHUTDOWN) {
417
+ RefCountedPtr<ConnectedSubchannel> connected_subchannel =
418
+ std::move(c->connected_subchannel_);
419
+ if (connected_subchannel == nullptr) return;
416
420
  GRPC_TRACE_LOG(subchannel, INFO)
417
421
  << "subchannel " << c << " " << c->key_.ToString()
418
- << ": Connected subchannel " << c->connected_subchannel_.get()
422
+ << ": Connected subchannel " << connected_subchannel.get()
419
423
  << " reports " << ConnectivityStateName(new_state) << ": "
420
424
  << status;
421
- c->connected_subchannel_.reset();
422
425
  if (c->channelz_node() != nullptr) {
423
- c->channelz_node()->SetChildSocket(nullptr);
426
+ if (connected_subchannel->channelz_node() != nullptr) {
427
+ connected_subchannel->channelz_node()->RemoveParent(
428
+ c->channelz_node());
429
+ }
424
430
  }
425
- // Even though we're reporting IDLE instead of TRANSIENT_FAILURE here,
426
- // pass along the status from the transport, since it may have
427
- // keepalive info attached to it that the channel needs.
428
- // TODO(roth): Consider whether there's a cleaner way to do this.
429
- c->SetConnectivityStateLocked(GRPC_CHANNEL_IDLE, status);
431
+ // If the subchannel was created from an endpoint, then we report
432
+ // TRANSIENT_FAILURE here instead of IDLE. The subchannel will never
433
+ // leave TRANSIENT_FAILURE state, because there is no way for us to
434
+ // establish a new connection.
435
+ //
436
+ // Otherwise, we report IDLE here. Note that even though we're not
437
+ // reporting TRANSIENT_FAILURE, we pass along the status from the
438
+ // transport, since it may have keepalive info attached to it that the
439
+ // channel needs.
440
+ // TODO(roth): Consider whether there's a cleaner way to propagate the
441
+ // keepalive info.
442
+ c->SetConnectivityStateLocked(c->created_from_endpoint_
443
+ ? GRPC_CHANNEL_TRANSIENT_FAILURE
444
+ : GRPC_CHANNEL_IDLE,
445
+ status);
430
446
  c->backoff_.Reset();
431
447
  }
432
448
  }
@@ -509,6 +525,7 @@ Subchannel::Subchannel(SubchannelKey key,
509
525
  ? "Subchannel"
510
526
  : nullptr),
511
527
  key_(std::move(key)),
528
+ created_from_endpoint_(args.Contains(GRPC_ARG_SUBCHANNEL_ENDPOINT)),
512
529
  args_(args),
513
530
  pollset_set_(grpc_pollset_set_create()),
514
531
  connector_(std::move(connector)),
@@ -546,9 +563,7 @@ Subchannel::Subchannel(SubchannelKey key,
546
563
  grpc_sockaddr_to_uri(&key_.address())
547
564
  .value_or("<unknown address type>"),
548
565
  channel_tracer_max_memory);
549
- channelz_node_->AddTraceEvent(
550
- channelz::ChannelTrace::Severity::Info,
551
- grpc_slice_from_static_string("subchannel created"));
566
+ GRPC_CHANNELZ_LOG(channelz_node_) << "subchannel created";
552
567
  channelz_node_->SetChannelArgs(args_);
553
568
  args_ = args_.SetObject<channelz::BaseNode>(channelz_node_);
554
569
  }
@@ -556,9 +571,7 @@ Subchannel::Subchannel(SubchannelKey key,
556
571
 
557
572
  Subchannel::~Subchannel() {
558
573
  if (channelz_node_ != nullptr) {
559
- channelz_node_->AddTraceEvent(
560
- channelz::ChannelTrace::Severity::Info,
561
- grpc_slice_from_static_string("Subchannel destroyed"));
574
+ GRPC_CHANNELZ_LOG(channelz_node_) << "Subchannel destroyed";
562
575
  channelz_node_->UpdateConnectivityState(GRPC_CHANNEL_SHUTDOWN);
563
576
  }
564
577
  connector_.reset();
@@ -578,6 +591,15 @@ RefCountedPtr<Subchannel> Subchannel::Create(
578
591
  return c;
579
592
  }
580
593
  c = MakeRefCounted<Subchannel>(std::move(key), std::move(connector), args);
594
+ if (c->created_from_endpoint_) {
595
+ // We don't interact with the subchannel pool in this case.
596
+ // Instead, we unconditionally return the newly created subchannel.
597
+ // Before returning, we explicitly trigger a connection attempt
598
+ // by calling RequestConnection(), which sets the subchannel’s
599
+ // connectivity state to CONNECTING.
600
+ c->RequestConnection();
601
+ return c;
602
+ }
581
603
  // Try to register the subchannel before setting the subchannel pool.
582
604
  // Otherwise, in case of a registration race, unreffing c in
583
605
  // RegisterSubchannel() will cause c to be tried to be unregistered, while
@@ -702,12 +724,15 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
702
724
  }
703
725
  if (channelz_node_ != nullptr) {
704
726
  channelz_node_->UpdateConnectivityState(state);
705
- channelz_node_->AddTraceEvent(
706
- channelz::ChannelTrace::Severity::Info,
707
- grpc_slice_from_cpp_string(absl::StrCat(
708
- "Subchannel connectivity state changed to ",
709
- ConnectivityStateName(state),
710
- status.ok() ? "" : absl::StrCat(": ", status_.ToString()))));
727
+ if (status.ok()) {
728
+ GRPC_CHANNELZ_LOG(channelz_node_)
729
+ << "Subchannel connectivity state changed to "
730
+ << ConnectivityStateName(state);
731
+ } else {
732
+ GRPC_CHANNELZ_LOG(channelz_node_)
733
+ << "Subchannel connectivity state changed to "
734
+ << ConnectivityStateName(state) << ": " << status;
735
+ }
711
736
  }
712
737
  // Notify watchers.
713
738
  watcher_list_.NotifyLocked(state, status_);
@@ -767,10 +792,15 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
767
792
  next_attempt_time_ - Timestamp::Now();
768
793
  GRPC_TRACE_LOG(subchannel, INFO)
769
794
  << "subchannel " << this << " " << key_.ToString()
770
- << ": connect failed (" << StatusToString(error)
771
- << "), backing off for " << time_until_next_attempt.millis() << " ms";
795
+ << ": connect failed (" << StatusToString(error) << ")"
796
+ << (created_from_endpoint_
797
+ ? ", no retry will be attempted (created from endpoint); "
798
+ "remaining in TRANSIENT_FAILURE"
799
+ : ", backing off for " +
800
+ std::to_string(time_until_next_attempt.millis()) + " ms");
772
801
  SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
773
802
  grpc_error_to_absl_status(error));
803
+ if (created_from_endpoint_) return;
774
804
  retry_timer_handle_ = event_engine_->RunAfter(
775
805
  time_until_next_attempt,
776
806
  [self = WeakRef(DEBUG_LOCATION, "RetryTimer")]() mutable {
@@ -856,7 +886,9 @@ bool Subchannel::PublishTransportLocked() {
856
886
  << "subchannel " << this << " " << key_.ToString()
857
887
  << ": new connected subchannel at " << connected_subchannel_.get();
858
888
  if (channelz_node_ != nullptr) {
859
- channelz_node_->SetChildSocket(std::move(socket_node));
889
+ if (socket_node != nullptr) {
890
+ socket_node->AddParent(channelz_node_.get());
891
+ }
860
892
  }
861
893
  // Start watching connected subchannel.
862
894
  connected_subchannel_->StartWatch(
@@ -58,6 +58,11 @@
58
58
  #include "src/core/util/unique_type_name.h"
59
59
  #include "src/core/util/work_serializer.h"
60
60
 
61
+ /** This arg is intended for internal use only, primarily
62
+ * for passing endpoint information during subchannel creation or connection.
63
+ */
64
+ #define GRPC_ARG_SUBCHANNEL_ENDPOINT "grpc.internal.subchannel_endpoint"
65
+
61
66
  namespace grpc_core {
62
67
 
63
68
  class SubchannelCall;
@@ -80,6 +85,8 @@ class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
80
85
  virtual size_t GetInitialCallSizeEstimate() const = 0;
81
86
  virtual void Ping(grpc_closure* on_initiate, grpc_closure* on_ack) = 0;
82
87
 
88
+ virtual channelz::SubchannelNode* channelz_node() const = 0;
89
+
83
90
  protected:
84
91
  explicit ConnectedSubchannel(const ChannelArgs& args);
85
92
 
@@ -328,6 +335,9 @@ class Subchannel final : public DualRefCounted<Subchannel> {
328
335
  RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
329
336
  // Subchannel key that identifies this subchannel in the subchannel pool.
330
337
  const SubchannelKey key_;
338
+ // boolean value that identifies this subchannel is created from event engine
339
+ // endpoint.
340
+ const bool created_from_endpoint_;
331
341
  // Actual address to connect to. May be different than the address in
332
342
  // key_ if overridden by proxy mapper.
333
343
  grpc_resolved_address address_for_connect_;
@@ -30,7 +30,9 @@
30
30
  #endif // !GPR_DEFAULT_LOG_VERBOSITY_STRING
31
31
 
32
32
  #ifdef GRPC_ENABLE_FORK_SUPPORT
33
+ #ifndef GRPC_ENABLE_FORK_SUPPORT_DEFAULT
33
34
  #define GRPC_ENABLE_FORK_SUPPORT_DEFAULT true
35
+ #endif // !defined(GRPC_ENABLE_FORK_SUPPORT_DEFAULT)
34
36
  #else
35
37
  #define GRPC_ENABLE_FORK_SUPPORT_DEFAULT false
36
38
  #endif // GRPC_ENABLE_FORK_SUPPORT