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
@@ -495,24 +495,13 @@ class ClientChannel::ClientChannelControlHelper
495
495
  return *client_channel_->stats_plugin_group_;
496
496
  }
497
497
 
498
- void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
498
+ void AddTraceEvent(absl::string_view message) override
499
499
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*client_channel_->work_serializer_) {
500
500
  if (client_channel_->resolver_ == nullptr) return; // Shutting down.
501
- if (client_channel_->channelz_node_ != nullptr) {
502
- client_channel_->channelz_node_->AddTraceEvent(
503
- ConvertSeverityEnum(severity),
504
- grpc_slice_from_copied_buffer(message.data(), message.size()));
505
- }
501
+ GRPC_CHANNELZ_LOG(client_channel_->channelz_node_) << std::string(message);
506
502
  }
507
503
 
508
504
  private:
509
- static channelz::ChannelTrace::Severity ConvertSeverityEnum(
510
- TraceSeverity severity) {
511
- if (severity == TRACE_INFO) return channelz::ChannelTrace::Info;
512
- if (severity == TRACE_WARNING) return channelz::ChannelTrace::Warning;
513
- return channelz::ChannelTrace::Error;
514
- }
515
-
516
505
  WeakRefCountedPtr<ClientChannel> client_channel_;
517
506
  };
518
507
 
@@ -1158,12 +1147,8 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1158
1147
  }
1159
1148
  // Add channel trace event.
1160
1149
  if (!trace_strings.empty()) {
1161
- std::string message =
1162
- absl::StrCat("Resolution event: ", absl::StrJoin(trace_strings, ", "));
1163
- if (channelz_node_ != nullptr) {
1164
- channelz_node_->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
1165
- grpc_slice_from_cpp_string(message));
1166
- }
1150
+ GRPC_CHANNELZ_LOG(channelz_node_)
1151
+ << "Resolution event: " << absl::StrJoin(trace_strings, ", ");
1167
1152
  }
1168
1153
  }
1169
1154
 
@@ -1279,8 +1264,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked(
1279
1264
  ChannelArgs new_args = args.SetObject(this).SetObject(saved_service_config_);
1280
1265
  // Construct filter stack.
1281
1266
  auto new_blackboard = MakeRefCounted<Blackboard>();
1282
- InterceptionChainBuilder builder(new_args, blackboard_.get(),
1283
- new_blackboard.get());
1267
+ InterceptionChainBuilder builder(new_args, new_blackboard.get());
1284
1268
  if (idle_timeout_ != Duration::Zero()) {
1285
1269
  builder.AddOnServerTrailingMetadata([this](ServerMetadata&) {
1286
1270
  if (idle_state_.DecreaseCallCount()) StartIdleTimer();
@@ -1289,16 +1273,18 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked(
1289
1273
  CoreConfiguration::Get().channel_init().AddToInterceptionChainBuilder(
1290
1274
  GRPC_CLIENT_CHANNEL, builder);
1291
1275
  // Add filters returned by the config selector (e.g., xDS HTTP filters).
1292
- config_selector->AddFilters(builder);
1276
+ config_selector->AddFilters(builder, blackboard_.get(), new_blackboard.get());
1293
1277
  const bool enable_retries =
1294
1278
  !channel_args_.WantMinimalStack() &&
1295
1279
  channel_args_.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1296
1280
  if (enable_retries) {
1281
+ RetryInterceptor::UpdateBlackboard(*saved_service_config_,
1282
+ blackboard_.get(), new_blackboard.get());
1297
1283
  builder.Add<RetryInterceptor>();
1298
1284
  }
1285
+ blackboard_ = std::move(new_blackboard);
1299
1286
  // Create call destination.
1300
1287
  auto top_of_stack_call_destination = builder.Build(call_destination_);
1301
- blackboard_ = std::move(new_blackboard);
1302
1288
  // Send result to data plane.
1303
1289
  if (!top_of_stack_call_destination.ok()) {
1304
1290
  resolver_data_for_calls_.Set(MaybeRewriteIllegalStatusCode(
@@ -1319,13 +1305,16 @@ void ClientChannel::UpdateStateLocked(grpc_connectivity_state state,
1319
1305
  state_tracker_.SetState(state, status, reason);
1320
1306
  if (channelz_node_ != nullptr) {
1321
1307
  channelz_node_->SetConnectivityState(state);
1322
- std::string trace =
1323
- channelz::ChannelNode::GetChannelConnectivityStateChangeString(state);
1324
1308
  if (!status.ok() || state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1325
- absl::StrAppend(&trace, " status:", status.ToString());
1309
+ GRPC_CHANNELZ_LOG(channelz_node_)
1310
+ << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1311
+ state)
1312
+ << " status: " << status;
1313
+ } else {
1314
+ GRPC_CHANNELZ_LOG(channelz_node_)
1315
+ << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1316
+ state);
1326
1317
  }
1327
- channelz_node_->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
1328
- grpc_slice_from_cpp_string(std::move(trace)));
1329
1318
  }
1330
1319
  }
1331
1320
 
@@ -980,24 +980,13 @@ class ClientChannelFilter::ClientChannelControlHelper final
980
980
  return **chand_->owning_stack_->stats_plugin_group;
981
981
  }
982
982
 
983
- void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
983
+ void AddTraceEvent(absl::string_view message) override
984
984
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
985
985
  if (chand_->resolver_ == nullptr) return; // Shutting down.
986
- if (chand_->channelz_node_ != nullptr) {
987
- chand_->channelz_node_->AddTraceEvent(
988
- ConvertSeverityEnum(severity),
989
- grpc_slice_from_copied_buffer(message.data(), message.size()));
990
- }
986
+ GRPC_CHANNELZ_LOG(chand_->channelz_node_) << std::string(message);
991
987
  }
992
988
 
993
989
  private:
994
- static channelz::ChannelTrace::Severity ConvertSeverityEnum(
995
- TraceSeverity severity) {
996
- if (severity == TRACE_INFO) return channelz::ChannelTrace::Info;
997
- if (severity == TRACE_WARNING) return channelz::ChannelTrace::Warning;
998
- return channelz::ChannelTrace::Error;
999
- }
1000
-
1001
990
  ClientChannelFilter* chand_;
1002
991
  };
1003
992
 
@@ -1333,12 +1322,8 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1333
1322
  }
1334
1323
  // Add channel trace event.
1335
1324
  if (!trace_strings.empty()) {
1336
- std::string message =
1337
- absl::StrCat("Resolution event: ", absl::StrJoin(trace_strings, ", "));
1338
- if (channelz_node_ != nullptr) {
1339
- channelz_node_->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
1340
- grpc_slice_from_cpp_string(message));
1341
- }
1325
+ GRPC_CHANNELZ_LOG(channelz_node_)
1326
+ << "Resolution event: " << absl::StrJoin(trace_strings, ", ");
1342
1327
  }
1343
1328
  }
1344
1329
 
@@ -1460,18 +1445,20 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked(
1460
1445
  !new_args.WantMinimalStack() &&
1461
1446
  new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1462
1447
  // Construct dynamic filter stack.
1448
+ auto new_blackboard = MakeRefCounted<Blackboard>();
1463
1449
  std::vector<const grpc_channel_filter*> filters =
1464
- config_selector->GetFilters();
1450
+ config_selector->GetFilters(blackboard_.get(), new_blackboard.get());
1465
1451
  if (enable_retries) {
1452
+ RetryFilter::UpdateBlackboard(*service_config, blackboard_.get(),
1453
+ new_blackboard.get());
1466
1454
  filters.push_back(&RetryFilter::kVtable);
1467
1455
  } else {
1468
1456
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1469
1457
  }
1470
- auto new_blackboard = MakeRefCounted<Blackboard>();
1471
- RefCountedPtr<DynamicFilters> dynamic_filters = DynamicFilters::Create(
1472
- new_args, std::move(filters), blackboard_.get(), new_blackboard.get());
1473
- CHECK(dynamic_filters != nullptr);
1474
1458
  blackboard_ = std::move(new_blackboard);
1459
+ RefCountedPtr<DynamicFilters> dynamic_filters =
1460
+ DynamicFilters::Create(new_args, std::move(filters), blackboard_.get());
1461
+ CHECK(dynamic_filters != nullptr);
1475
1462
  // Grab data plane lock to update service config.
1476
1463
  //
1477
1464
  // We defer unreffing the old values (and deallocating memory) until
@@ -1552,13 +1539,16 @@ void ClientChannelFilter::UpdateStateLocked(grpc_connectivity_state state,
1552
1539
  state_tracker_.SetState(state, status, reason);
1553
1540
  if (channelz_node_ != nullptr) {
1554
1541
  channelz_node_->SetConnectivityState(state);
1555
- std::string trace =
1556
- channelz::ChannelNode::GetChannelConnectivityStateChangeString(state);
1557
1542
  if (!status.ok() || state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1558
- absl::StrAppend(&trace, " status:", status.ToString());
1543
+ GRPC_CHANNELZ_LOG(channelz_node_)
1544
+ << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1545
+ state);
1546
+ } else {
1547
+ GRPC_CHANNELZ_LOG(channelz_node_)
1548
+ << channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1549
+ state)
1550
+ << " status: " << status.ToString();
1559
1551
  }
1560
- channelz_node_->AddTraceEvent(channelz::ChannelTrace::Severity::Info,
1561
- grpc_slice_from_cpp_string(std::move(trace)));
1562
1552
  }
1563
1553
  }
1564
1554
 
@@ -30,6 +30,7 @@
30
30
  #include "src/core/call/interception_chain.h"
31
31
  #include "src/core/call/metadata_batch.h"
32
32
  #include "src/core/client_channel/client_channel_internal.h"
33
+ #include "src/core/filter/blackboard.h"
33
34
  #include "src/core/lib/channel/channel_fwd.h"
34
35
  #include "src/core/lib/resource_quota/arena.h"
35
36
  #include "src/core/lib/slice/slice.h"
@@ -61,9 +62,14 @@ class ConfigSelector : public RefCounted<ConfigSelector> {
61
62
 
62
63
  // The channel will call this when the resolver returns a new ConfigSelector
63
64
  // to determine what set of dynamic filters will be configured.
64
- virtual void AddFilters(InterceptionChainBuilder& /*builder*/) {}
65
+ virtual void AddFilters(InterceptionChainBuilder& /*builder*/,
66
+ const Blackboard* /*old_blackboard*/,
67
+ Blackboard* /*new_blackboard*/) {}
65
68
  // TODO(roth): Remove this once the legacy filter stack goes away.
66
- virtual std::vector<const grpc_channel_filter*> GetFilters() { return {}; }
69
+ virtual std::vector<const grpc_channel_filter*> GetFilters(
70
+ const Blackboard* /*old_blackboard*/, Blackboard* /*new_blackboard*/) {
71
+ return {};
72
+ }
67
73
 
68
74
  // Gets the configuration for the call and stores it in service config
69
75
  // call data.
@@ -137,9 +137,9 @@ namespace {
137
137
 
138
138
  absl::StatusOr<RefCountedPtr<grpc_channel_stack>> CreateChannelStack(
139
139
  const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters,
140
- const Blackboard* old_blackboard, Blackboard* new_blackboard) {
140
+ const Blackboard* blackboard) {
141
141
  ChannelStackBuilderImpl builder("DynamicFilters", GRPC_CLIENT_DYNAMIC, args);
142
- builder.SetBlackboards(old_blackboard, new_blackboard);
142
+ builder.SetBlackboard(blackboard);
143
143
  for (auto filter : filters) {
144
144
  builder.AppendFilter(filter);
145
145
  }
@@ -150,16 +150,15 @@ absl::StatusOr<RefCountedPtr<grpc_channel_stack>> CreateChannelStack(
150
150
 
151
151
  RefCountedPtr<DynamicFilters> DynamicFilters::Create(
152
152
  const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters,
153
- const Blackboard* old_blackboard, Blackboard* new_blackboard) {
153
+ const Blackboard* blackboard) {
154
154
  // Attempt to create channel stack from requested filters.
155
- auto p = CreateChannelStack(args, std::move(filters), old_blackboard,
156
- new_blackboard);
155
+ auto p = CreateChannelStack(args, std::move(filters), blackboard);
157
156
  if (!p.ok()) {
158
157
  // Channel stack creation failed with requested filters.
159
158
  // Create with lame filter instead.
160
159
  auto error = p.status();
161
160
  p = CreateChannelStack(args.Set(MakeLameClientErrorArg(&error)),
162
- {&LameClientFilter::kFilter}, nullptr, nullptr);
161
+ {&LameClientFilter::kFilter}, nullptr);
163
162
  }
164
163
  return MakeRefCounted<DynamicFilters>(std::move(p.value()));
165
164
  }
@@ -90,7 +90,7 @@ class DynamicFilters final : public RefCounted<DynamicFilters> {
90
90
 
91
91
  static RefCountedPtr<DynamicFilters> Create(
92
92
  const ChannelArgs& args, std::vector<const grpc_channel_filter*> filters,
93
- const Blackboard* old_blackboard, Blackboard* new_blackboard);
93
+ const Blackboard* blackboard);
94
94
 
95
95
  explicit DynamicFilters(RefCountedPtr<grpc_channel_stack> channel_stack)
96
96
  : channel_stack_(std::move(channel_stack)) {}
@@ -77,7 +77,10 @@ RefCountedPtr<Subchannel> GlobalSubchannelPool::RegisterSubchannel(
77
77
  SubchannelMap old_map2;
78
78
  MutexLock lock(&write_shard.mu);
79
79
  auto* existing = write_shard.map.Lookup(key);
80
- if (existing != nullptr) return (*existing)->RefIfNonZero();
80
+ if (existing != nullptr) {
81
+ auto existing_ref = (*existing)->RefIfNonZero();
82
+ if (existing_ref != nullptr) return existing_ref;
83
+ }
81
84
  old_map1 = std::exchange(write_shard.map,
82
85
  write_shard.map.Add(key, constructed->WeakRef()));
83
86
  MutexLock lock_read(&read_shard.mu);
@@ -31,7 +31,6 @@
31
31
  #include "src/core/lib/channel/channel_args.h"
32
32
  #include "src/core/lib/channel/channel_stack.h"
33
33
  #include "src/core/lib/debug/trace.h"
34
- #include "src/core/lib/iomgr/error.h"
35
34
  #include "src/core/service_config/service_config.h"
36
35
  #include "src/core/service_config/service_config_call_data.h"
37
36
  #include "src/core/util/ref_counted_ptr.h"
@@ -93,39 +92,34 @@ namespace grpc_core {
93
92
  // RetryFilter
94
93
  //
95
94
 
96
- RetryFilter::RetryFilter(const ChannelArgs& args, grpc_error_handle* error)
97
- : client_channel_(args.GetObject<ClientChannelFilter>()),
98
- event_engine_(args.GetObject<EventEngine>()),
99
- per_rpc_retry_buffer_size_(GetMaxPerRpcRetryBufferSize(args)),
100
- service_config_parser_index_(
101
- internal::RetryServiceConfigParser::ParserIndex()) {
95
+ void RetryFilter::UpdateBlackboard(const ServiceConfig& service_config,
96
+ const Blackboard* old_blackboard,
97
+ Blackboard* new_blackboard) {
102
98
  // Get retry throttling parameters from service config.
103
- auto* service_config = args.GetObject<ServiceConfig>();
104
- if (service_config == nullptr) return;
105
99
  const auto* config = static_cast<const RetryGlobalConfig*>(
106
- service_config->GetGlobalParsedConfig(
100
+ service_config.GetGlobalParsedConfig(
107
101
  RetryServiceConfigParser::ParserIndex()));
108
102
  if (config == nullptr) return;
109
- // Get server name from target URI.
110
- auto server_uri = args.GetString(GRPC_ARG_SERVER_URI);
111
- if (!server_uri.has_value()) {
112
- *error = GRPC_ERROR_CREATE(
113
- "server URI channel arg missing or wrong type in client channel "
114
- "filter");
115
- return;
116
- }
117
- absl::StatusOr<URI> uri = URI::Parse(*server_uri);
118
- if (!uri.ok() || uri->path().empty()) {
119
- *error = GRPC_ERROR_CREATE("could not extract server name from target URI");
120
- return;
103
+ // Get throttler.
104
+ RefCountedPtr<internal::RetryThrottler> throttler;
105
+ if (old_blackboard != nullptr) {
106
+ throttler = old_blackboard->Get<internal::RetryThrottler>("");
121
107
  }
122
- std::string server_name(absl::StripPrefix(uri->path(), "/"));
123
- // Get throttling config for server_name.
124
- retry_throttle_data_ =
125
- internal::ServerRetryThrottleMap::Get()->GetDataForServer(
126
- server_name, config->max_milli_tokens(), config->milli_token_ratio());
108
+ throttler = internal::RetryThrottler::Create(config->max_milli_tokens(),
109
+ config->milli_token_ratio(),
110
+ std::move(throttler));
111
+ new_blackboard->Set("", std::move(throttler));
127
112
  }
128
113
 
114
+ RetryFilter::RetryFilter(const grpc_channel_element_args& args)
115
+ : client_channel_(args.channel_args.GetObject<ClientChannelFilter>()),
116
+ event_engine_(args.channel_args.GetObject<EventEngine>()),
117
+ per_rpc_retry_buffer_size_(
118
+ GetMaxPerRpcRetryBufferSize(args.channel_args)),
119
+ retry_throttler_(args.blackboard->Get<internal::RetryThrottler>("")),
120
+ service_config_parser_index_(
121
+ internal::RetryServiceConfigParser::ParserIndex()) {}
122
+
129
123
  const RetryMethodConfig* RetryFilter::GetRetryPolicy(Arena* arena) {
130
124
  auto* svc_cfg_call_data = arena->GetContext<ServiceConfigCallData>();
131
125
  if (svc_cfg_call_data == nullptr) return nullptr;
@@ -45,6 +45,10 @@ class RetryFilter final {
45
45
  public:
46
46
  static const grpc_channel_filter kVtable;
47
47
 
48
+ static void UpdateBlackboard(const ServiceConfig& service_config,
49
+ const Blackboard* old_blackboard,
50
+ Blackboard* blackboard);
51
+
48
52
  private:
49
53
  // Old filter-stack style call implementation, in
50
54
  // retry_filter_legacy_call_data.{h,cc}
@@ -60,8 +64,8 @@ class RetryFilter final {
60
64
 
61
65
  const internal::RetryMethodConfig* GetRetryPolicy(Arena* arena);
62
66
 
63
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data() const {
64
- return retry_throttle_data_;
67
+ RefCountedPtr<internal::RetryThrottler> retry_throttler() const {
68
+ return retry_throttler_;
65
69
  }
66
70
 
67
71
  ClientChannelFilter* client_channel() const { return client_channel_; }
@@ -80,15 +84,14 @@ class RetryFilter final {
80
84
  0, INT_MAX);
81
85
  }
82
86
 
83
- RetryFilter(const ChannelArgs& args, grpc_error_handle* error);
87
+ explicit RetryFilter(const grpc_channel_element_args& args);
84
88
 
85
89
  static grpc_error_handle Init(grpc_channel_element* elem,
86
90
  grpc_channel_element_args* args) {
87
91
  CHECK(args->is_last);
88
92
  CHECK(elem->filter == &kVtable);
89
- grpc_error_handle error;
90
- new (elem->channel_data) RetryFilter(args->channel_args, &error);
91
- return error;
93
+ new (elem->channel_data) RetryFilter(*args);
94
+ return absl::OkStatus();
92
95
  }
93
96
 
94
97
  static void Destroy(grpc_channel_element* elem) {
@@ -105,7 +108,7 @@ class RetryFilter final {
105
108
  ClientChannelFilter* client_channel_;
106
109
  grpc_event_engine::experimental::EventEngine* const event_engine_;
107
110
  size_t per_rpc_retry_buffer_size_;
108
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data_;
111
+ RefCountedPtr<internal::RetryThrottler> retry_throttler_;
109
112
  const size_t service_config_parser_index_;
110
113
  };
111
114
 
@@ -537,8 +537,8 @@ bool RetryFilter::LegacyCallData::CallAttempt::ShouldRetry(
537
537
  // Check status.
538
538
  if (status.has_value()) {
539
539
  if (GPR_LIKELY(*status == GRPC_STATUS_OK)) {
540
- if (calld_->retry_throttle_data_ != nullptr) {
541
- calld_->retry_throttle_data_->RecordSuccess();
540
+ if (calld_->retry_throttler_ != nullptr) {
541
+ calld_->retry_throttler_->RecordSuccess();
542
542
  }
543
543
  GRPC_TRACE_LOG(retry, INFO)
544
544
  << "chand=" << calld_->chand_ << " calld=" << calld_
@@ -562,8 +562,8 @@ bool RetryFilter::LegacyCallData::CallAttempt::ShouldRetry(
562
562
  // things like failures due to malformed requests (INVALID_ARGUMENT).
563
563
  // Conversely, it's important for this to come before the remaining
564
564
  // checks, so that we don't fail to record failures due to other factors.
565
- if (calld_->retry_throttle_data_ != nullptr &&
566
- !calld_->retry_throttle_data_->RecordFailure()) {
565
+ if (calld_->retry_throttler_ != nullptr &&
566
+ !calld_->retry_throttler_->RecordFailure()) {
567
567
  GRPC_TRACE_LOG(retry, INFO)
568
568
  << "chand=" << calld_->chand_ << " calld=" << calld_
569
569
  << " attempt=" << this << ": retries throttled";
@@ -1471,7 +1471,7 @@ void RetryFilter::LegacyCallData::SetPollent(grpc_call_element* elem,
1471
1471
  RetryFilter::LegacyCallData::LegacyCallData(RetryFilter* chand,
1472
1472
  const grpc_call_element_args& args)
1473
1473
  : chand_(chand),
1474
- retry_throttle_data_(chand->retry_throttle_data()),
1474
+ retry_throttler_(chand->retry_throttler()),
1475
1475
  retry_policy_(chand->GetRetryPolicy(args.arena)),
1476
1476
  retry_backoff_(
1477
1477
  BackOff::Options()
@@ -370,7 +370,7 @@ class RetryFilter::LegacyCallData final {
370
370
 
371
371
  RetryFilter* chand_;
372
372
  grpc_polling_entity* pollent_;
373
- RefCountedPtr<internal::ServerRetryThrottleData> retry_throttle_data_;
373
+ RefCountedPtr<internal::RetryThrottler> retry_throttler_;
374
374
  const internal::RetryMethodConfig* retry_policy_ = nullptr;
375
375
  BackOff retry_backoff_;
376
376
 
@@ -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