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.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- 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(
|
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
|
-
|
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
|
-
|
1162
|
-
|
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,
|
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
|
-
|
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(
|
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
|
-
|
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
|
-
|
1337
|
-
|
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
|
-
|
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(
|
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*
|
140
|
+
const Blackboard* blackboard) {
|
141
141
|
ChannelStackBuilderImpl builder("DynamicFilters", GRPC_CLIENT_DYNAMIC, args);
|
142
|
-
builder.
|
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*
|
153
|
+
const Blackboard* blackboard) {
|
154
154
|
// Attempt to create channel stack from requested filters.
|
155
|
-
auto p = CreateChannelStack(args, std::move(filters),
|
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
|
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*
|
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)
|
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::
|
97
|
-
|
98
|
-
|
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
|
100
|
+
service_config.GetGlobalParsedConfig(
|
107
101
|
RetryServiceConfigParser::ParserIndex()));
|
108
102
|
if (config == nullptr) return;
|
109
|
-
// Get
|
110
|
-
|
111
|
-
if (
|
112
|
-
|
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
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
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::
|
64
|
-
return
|
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
|
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
|
-
|
90
|
-
|
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::
|
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_->
|
541
|
-
calld_->
|
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_->
|
566
|
-
!calld_->
|
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
|
-
|
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::
|
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
|
-
|
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
|
-
|
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 (
|
71
|
-
|
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 (
|
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
|
168
|
-
|
169
|
-
|
170
|
-
|
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
|
-
|
173
|
-
|
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::
|
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
|
-
|
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_->
|
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
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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::
|
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
|
-
|
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::
|
153
|
+
const RefCountedPtr<internal::RetryThrottler> retry_throttler_;
|
153
154
|
};
|
154
155
|
|
155
156
|
} // namespace grpc_core
|