grpc 1.73.0 → 1.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +116 -53
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +18 -6
- 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/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +274 -192
- data/src/core/channelz/channelz.h +224 -72
- data/src/core/channelz/channelz_registry.cc +2 -163
- data/src/core/channelz/channelz_registry.h +37 -6
- data/src/core/channelz/property_list.cc +353 -0
- data/src/core/channelz/property_list.h +204 -0
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -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 +24 -33
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- 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/load_balanced_call_destination.cc +6 -5
- 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 +57 -25
- data/src/core/client_channel/subchannel.h +10 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +4 -1
- data/src/core/config/core_configuration.h +23 -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/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- 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/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- 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 +165 -117
- 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.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +40 -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 +290 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -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 +1233 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- 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 +121 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -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 +4 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -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_data_queue.h +607 -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/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- 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 +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -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/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -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 +133 -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 +2 -27
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/filter/fused_filters.cc +154 -0
- 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 +7 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +98 -38
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- 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.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +11 -10
- 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 +51 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -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 +139 -169
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- 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 +30 -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/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
- 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 +11 -171
- 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 +6 -1
- 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 +165 -99
- data/src/core/lib/experiments/experiments.h +65 -52
- data/src/core/lib/iomgr/combiner.cc +1 -1
- 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/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +15 -9
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +3 -2
- 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 +55 -6
- data/src/core/lib/promise/party.h +68 -3
- data/src/core/lib/promise/poll.h +10 -0
- 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/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- 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/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +19 -10
- 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/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- 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 +15 -5
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- 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 +22 -7
- 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 +84 -13
- data/src/core/server/server.h +21 -2
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- 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_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +369 -343
- data/src/core/telemetry/stats_data.h +341 -244
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- 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 +205 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -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/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +249 -189
- 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 +7 -4
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +144 -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/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -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_certificate_provider.cc +5 -6
- 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 +70 -557
- 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 +2 -2
- 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
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +192 -68
- 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/src/core/util/ring_buffer.h +0 -122
- 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
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -35,11 +35,10 @@ size_t GetMaxPerRpcRetryBufferSize(const ChannelArgs& args) {
|
|
35
35
|
|
36
36
|
namespace retry_detail {
|
37
37
|
|
38
|
-
RetryState::RetryState(
|
39
|
-
|
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
|
@@ -18,14 +18,9 @@
|
|
18
18
|
|
19
19
|
#include "src/core/client_channel/retry_throttle.h"
|
20
20
|
|
21
|
-
#include <grpc/support/port_platform.h>
|
22
|
-
|
23
21
|
#include <atomic>
|
24
22
|
#include <cstdint>
|
25
23
|
#include <limits>
|
26
|
-
#include <map>
|
27
|
-
#include <string>
|
28
|
-
#include <utility>
|
29
24
|
|
30
25
|
#include "src/core/util/useful.h"
|
31
26
|
|
@@ -33,6 +28,7 @@ namespace grpc_core {
|
|
33
28
|
namespace internal {
|
34
29
|
|
35
30
|
namespace {
|
31
|
+
|
36
32
|
template <typename T>
|
37
33
|
T ClampedAdd(std::atomic<T>& value, T delta, T min, T max) {
|
38
34
|
T prev_value = value.load(std::memory_order_relaxed);
|
@@ -43,45 +39,74 @@ T ClampedAdd(std::atomic<T>& value, T delta, T min, T max) {
|
|
43
39
|
std::memory_order_relaxed));
|
44
40
|
return new_value;
|
45
41
|
}
|
42
|
+
|
46
43
|
} // namespace
|
47
44
|
|
48
45
|
//
|
49
|
-
//
|
46
|
+
// RetryThrottler
|
50
47
|
//
|
51
48
|
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
RefCountedPtr<RetryThrottler> RetryThrottler::Create(
|
50
|
+
uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
|
51
|
+
RefCountedPtr<RetryThrottler> previous) {
|
52
|
+
if (previous != nullptr && previous->max_milli_tokens_ == max_milli_tokens &&
|
53
|
+
previous->milli_token_ratio_ == milli_token_ratio) {
|
54
|
+
return previous;
|
55
|
+
}
|
56
|
+
// previous is null or has different parameters. Create a new one.
|
57
|
+
uintptr_t initial_milli_tokens = max_milli_tokens;
|
58
|
+
// If there was a pre-existing entry for this server name, initialize
|
59
|
+
// the token count by scaling proportionately to the old data. This
|
60
|
+
// ensures that if we're already throttling retries on the old scale,
|
61
|
+
// we will start out doing the same thing on the new one.
|
62
|
+
if (previous != nullptr) {
|
63
|
+
double token_fraction = static_cast<double>(previous->milli_tokens_) /
|
64
|
+
static_cast<double>(previous->max_milli_tokens_);
|
65
|
+
initial_milli_tokens =
|
66
|
+
static_cast<uintptr_t>(token_fraction * max_milli_tokens);
|
67
|
+
}
|
68
|
+
auto throttle_data = MakeRefCounted<RetryThrottler>(
|
69
|
+
max_milli_tokens, milli_token_ratio, initial_milli_tokens);
|
70
|
+
if (previous != nullptr) previous->SetReplacement(throttle_data);
|
71
|
+
return throttle_data;
|
72
|
+
}
|
73
|
+
|
74
|
+
UniqueTypeName RetryThrottler::Type() {
|
75
|
+
static UniqueTypeName::Factory factory("retry_throttle");
|
76
|
+
return factory.Create();
|
77
|
+
}
|
78
|
+
|
79
|
+
RetryThrottler::RetryThrottler(uintptr_t max_milli_tokens,
|
80
|
+
uintptr_t milli_token_ratio,
|
81
|
+
uintptr_t milli_tokens)
|
55
82
|
: max_milli_tokens_(max_milli_tokens),
|
56
83
|
milli_token_ratio_(milli_token_ratio),
|
57
84
|
milli_tokens_(milli_tokens) {}
|
58
85
|
|
59
|
-
|
60
|
-
|
61
|
-
replacement_.load(std::memory_order_acquire);
|
86
|
+
RetryThrottler::~RetryThrottler() {
|
87
|
+
RetryThrottler* replacement = replacement_.load(std::memory_order_acquire);
|
62
88
|
if (replacement != nullptr) {
|
63
89
|
replacement->Unref();
|
64
90
|
}
|
65
91
|
}
|
66
92
|
|
67
|
-
void
|
68
|
-
RefCountedPtr<ServerRetryThrottleData> replacement) {
|
93
|
+
void RetryThrottler::SetReplacement(RefCountedPtr<RetryThrottler> replacement) {
|
69
94
|
replacement_.store(replacement.release(), std::memory_order_release);
|
70
95
|
}
|
71
96
|
|
72
|
-
void
|
73
|
-
|
97
|
+
void RetryThrottler::GetReplacementThrottleDataIfNeeded(
|
98
|
+
RetryThrottler** throttle_data) {
|
74
99
|
while (true) {
|
75
|
-
|
100
|
+
RetryThrottler* new_throttle_data =
|
76
101
|
(*throttle_data)->replacement_.load(std::memory_order_acquire);
|
77
102
|
if (new_throttle_data == nullptr) return;
|
78
103
|
*throttle_data = new_throttle_data;
|
79
104
|
}
|
80
105
|
}
|
81
106
|
|
82
|
-
bool
|
107
|
+
bool RetryThrottler::RecordFailure() {
|
83
108
|
// First, check if we are stale and need to be replaced.
|
84
|
-
|
109
|
+
RetryThrottler* throttle_data = this;
|
85
110
|
GetReplacementThrottleDataIfNeeded(&throttle_data);
|
86
111
|
// We decrement milli_tokens by 1000 (1 token) for each failure.
|
87
112
|
const uintptr_t new_value = ClampedAdd<intptr_t>(
|
@@ -93,9 +118,9 @@ bool ServerRetryThrottleData::RecordFailure() {
|
|
93
118
|
return new_value > throttle_data->max_milli_tokens_ / 2;
|
94
119
|
}
|
95
120
|
|
96
|
-
void
|
121
|
+
void RetryThrottler::RecordSuccess() {
|
97
122
|
// First, check if we are stale and need to be replaced.
|
98
|
-
|
123
|
+
RetryThrottler* throttle_data = this;
|
99
124
|
GetReplacementThrottleDataIfNeeded(&throttle_data);
|
100
125
|
// We increment milli_tokens by milli_token_ratio for each success.
|
101
126
|
ClampedAdd<intptr_t>(
|
@@ -105,45 +130,5 @@ void ServerRetryThrottleData::RecordSuccess() {
|
|
105
130
|
std::numeric_limits<intptr_t>::max())));
|
106
131
|
}
|
107
132
|
|
108
|
-
//
|
109
|
-
// ServerRetryThrottleMap
|
110
|
-
//
|
111
|
-
|
112
|
-
ServerRetryThrottleMap* ServerRetryThrottleMap::Get() {
|
113
|
-
static ServerRetryThrottleMap* m = new ServerRetryThrottleMap();
|
114
|
-
return m;
|
115
|
-
}
|
116
|
-
|
117
|
-
RefCountedPtr<ServerRetryThrottleData> ServerRetryThrottleMap::GetDataForServer(
|
118
|
-
const std::string& server_name, uintptr_t max_milli_tokens,
|
119
|
-
uintptr_t milli_token_ratio) {
|
120
|
-
MutexLock lock(&mu_);
|
121
|
-
auto& throttle_data = map_[server_name];
|
122
|
-
if (throttle_data == nullptr ||
|
123
|
-
throttle_data->max_milli_tokens() != max_milli_tokens ||
|
124
|
-
throttle_data->milli_token_ratio() != milli_token_ratio) {
|
125
|
-
// Entry not found, or found with old parameters. Create a new one.
|
126
|
-
auto old_throttle_data = std::move(throttle_data);
|
127
|
-
uintptr_t initial_milli_tokens = max_milli_tokens;
|
128
|
-
// If there was a pre-existing entry for this server name, initialize
|
129
|
-
// the token count by scaling proportionately to the old data. This
|
130
|
-
// ensures that if we're already throttling retries on the old scale,
|
131
|
-
// we will start out doing the same thing on the new one.
|
132
|
-
if (old_throttle_data != nullptr) {
|
133
|
-
double token_fraction =
|
134
|
-
static_cast<double>(old_throttle_data->milli_tokens()) /
|
135
|
-
static_cast<double>(old_throttle_data->max_milli_tokens());
|
136
|
-
initial_milli_tokens =
|
137
|
-
static_cast<uintptr_t>(token_fraction * max_milli_tokens);
|
138
|
-
}
|
139
|
-
throttle_data = MakeRefCounted<ServerRetryThrottleData>(
|
140
|
-
max_milli_tokens, milli_token_ratio, initial_milli_tokens);
|
141
|
-
if (old_throttle_data != nullptr) {
|
142
|
-
old_throttle_data->SetReplacement(throttle_data);
|
143
|
-
}
|
144
|
-
}
|
145
|
-
return throttle_data;
|
146
|
-
}
|
147
|
-
|
148
133
|
} // namespace internal
|
149
134
|
} // namespace grpc_core
|
@@ -19,30 +19,29 @@
|
|
19
19
|
#ifndef GRPC_SRC_CORE_CLIENT_CHANNEL_RETRY_THROTTLE_H
|
20
20
|
#define GRPC_SRC_CORE_CLIENT_CHANNEL_RETRY_THROTTLE_H
|
21
21
|
|
22
|
-
#include <grpc/support/port_platform.h>
|
23
22
|
#include <stdint.h>
|
24
23
|
|
25
24
|
#include <atomic>
|
26
|
-
#include <map>
|
27
|
-
#include <string>
|
28
25
|
|
29
|
-
#include "
|
30
|
-
#include "src/core/util/ref_counted.h"
|
26
|
+
#include "src/core/filter/blackboard.h"
|
31
27
|
#include "src/core/util/ref_counted_ptr.h"
|
32
|
-
#include "src/core/util/sync.h"
|
33
28
|
|
34
29
|
namespace grpc_core {
|
35
30
|
namespace internal {
|
36
31
|
|
37
|
-
class ServerRetryThrottleMap;
|
38
|
-
|
39
32
|
/// Tracks retry throttling data for an individual server name.
|
40
|
-
class
|
41
|
-
: public RefCounted<ServerRetryThrottleData> {
|
33
|
+
class RetryThrottler final : public Blackboard::Entry {
|
42
34
|
public:
|
43
|
-
|
44
|
-
|
45
|
-
|
35
|
+
static RefCountedPtr<RetryThrottler> Create(
|
36
|
+
uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
|
37
|
+
RefCountedPtr<RetryThrottler> previous);
|
38
|
+
|
39
|
+
static UniqueTypeName Type();
|
40
|
+
|
41
|
+
// Do not instantiate directly -- use Create() instead.
|
42
|
+
RetryThrottler(uintptr_t max_milli_tokens, uintptr_t milli_token_ratio,
|
43
|
+
uintptr_t milli_tokens);
|
44
|
+
~RetryThrottler() override;
|
46
45
|
|
47
46
|
/// Records a failure. Returns true if it's okay to send a retry.
|
48
47
|
bool RecordFailure();
|
@@ -50,6 +49,7 @@ class ServerRetryThrottleData final
|
|
50
49
|
/// Records a success.
|
51
50
|
void RecordSuccess();
|
52
51
|
|
52
|
+
// Exposed for testing purposes only.
|
53
53
|
uintptr_t max_milli_tokens() const { return max_milli_tokens_; }
|
54
54
|
uintptr_t milli_token_ratio() const { return milli_token_ratio_; }
|
55
55
|
intptr_t milli_tokens() const {
|
@@ -57,39 +57,17 @@ class ServerRetryThrottleData final
|
|
57
57
|
}
|
58
58
|
|
59
59
|
private:
|
60
|
-
|
60
|
+
void SetReplacement(RefCountedPtr<RetryThrottler> replacement);
|
61
61
|
|
62
|
-
void
|
63
|
-
|
64
|
-
void GetReplacementThrottleDataIfNeeded(
|
65
|
-
ServerRetryThrottleData** throttle_data);
|
62
|
+
void GetReplacementThrottleDataIfNeeded(RetryThrottler** throttle_data);
|
66
63
|
|
67
64
|
const uintptr_t max_milli_tokens_;
|
68
65
|
const uintptr_t milli_token_ratio_;
|
69
66
|
std::atomic<intptr_t> milli_tokens_;
|
70
|
-
// A pointer to the replacement for this
|
67
|
+
// A pointer to the replacement for this RetryThrottler entry.
|
71
68
|
// If non-nullptr, then this entry is stale and must not be used.
|
72
69
|
// We hold a reference to the replacement.
|
73
|
-
std::atomic<
|
74
|
-
};
|
75
|
-
|
76
|
-
/// Global map of server name to retry throttle data.
|
77
|
-
class ServerRetryThrottleMap final {
|
78
|
-
public:
|
79
|
-
static ServerRetryThrottleMap* Get();
|
80
|
-
|
81
|
-
/// Returns the failure data for \a server_name, creating a new entry if
|
82
|
-
/// needed.
|
83
|
-
RefCountedPtr<ServerRetryThrottleData> GetDataForServer(
|
84
|
-
const std::string& server_name, uintptr_t max_milli_tokens,
|
85
|
-
uintptr_t milli_token_ratio);
|
86
|
-
|
87
|
-
private:
|
88
|
-
using StringToDataMap =
|
89
|
-
std::map<std::string, RefCountedPtr<ServerRetryThrottleData>>;
|
90
|
-
|
91
|
-
Mutex mu_;
|
92
|
-
StringToDataMap map_ ABSL_GUARDED_BY(mu_);
|
70
|
+
std::atomic<RetryThrottler*> replacement_{nullptr};
|
93
71
|
};
|
94
72
|
|
95
73
|
} // namespace internal
|
@@ -117,7 +117,7 @@ class LegacyConnectedSubchannel : public ConnectedSubchannel {
|
|
117
117
|
channel_stack_.reset(DEBUG_LOCATION, "ConnectedSubchannel");
|
118
118
|
}
|
119
119
|
|
120
|
-
channelz::SubchannelNode* channelz_node() const {
|
120
|
+
channelz::SubchannelNode* channelz_node() const override {
|
121
121
|
return channelz_node_.get();
|
122
122
|
}
|
123
123
|
|
@@ -220,6 +220,8 @@ class NewConnectedSubchannel : public ConnectedSubchannel {
|
|
220
220
|
Crash("legacy ping method called in call v3 impl");
|
221
221
|
}
|
222
222
|
|
223
|
+
channelz::SubchannelNode* channelz_node() const override { return nullptr; }
|
224
|
+
|
223
225
|
private:
|
224
226
|
RefCountedPtr<UnstartedCallDestination> call_destination_;
|
225
227
|
RefCountedPtr<TransportCallDestination> transport_;
|
@@ -410,23 +412,37 @@ class Subchannel::ConnectedSubchannelStateWatcher final
|
|
410
412
|
// we will see TRANSIENT_FAILURE followed by SHUTDOWN, but if not, we
|
411
413
|
// will see only SHUTDOWN. Either way, we react to the first one we
|
412
414
|
// see, ignoring anything that happens after that.
|
413
|
-
if (c->connected_subchannel_ == nullptr) return;
|
414
415
|
if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
415
416
|
new_state == GRPC_CHANNEL_SHUTDOWN) {
|
417
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel =
|
418
|
+
std::move(c->connected_subchannel_);
|
419
|
+
if (connected_subchannel == nullptr) return;
|
416
420
|
GRPC_TRACE_LOG(subchannel, INFO)
|
417
421
|
<< "subchannel " << c << " " << c->key_.ToString()
|
418
|
-
<< ": Connected subchannel " <<
|
422
|
+
<< ": Connected subchannel " << connected_subchannel.get()
|
419
423
|
<< " reports " << ConnectivityStateName(new_state) << ": "
|
420
424
|
<< status;
|
421
|
-
c->connected_subchannel_.reset();
|
422
425
|
if (c->channelz_node() != nullptr) {
|
423
|
-
|
426
|
+
if (connected_subchannel->channelz_node() != nullptr) {
|
427
|
+
connected_subchannel->channelz_node()->RemoveParent(
|
428
|
+
c->channelz_node());
|
429
|
+
}
|
424
430
|
}
|
425
|
-
//
|
426
|
-
//
|
427
|
-
//
|
428
|
-
//
|
429
|
-
|
431
|
+
// If the subchannel was created from an endpoint, then we report
|
432
|
+
// TRANSIENT_FAILURE here instead of IDLE. The subchannel will never
|
433
|
+
// leave TRANSIENT_FAILURE state, because there is no way for us to
|
434
|
+
// establish a new connection.
|
435
|
+
//
|
436
|
+
// Otherwise, we report IDLE here. Note that even though we're not
|
437
|
+
// reporting TRANSIENT_FAILURE, we pass along the status from the
|
438
|
+
// transport, since it may have keepalive info attached to it that the
|
439
|
+
// channel needs.
|
440
|
+
// TODO(roth): Consider whether there's a cleaner way to propagate the
|
441
|
+
// keepalive info.
|
442
|
+
c->SetConnectivityStateLocked(c->created_from_endpoint_
|
443
|
+
? GRPC_CHANNEL_TRANSIENT_FAILURE
|
444
|
+
: GRPC_CHANNEL_IDLE,
|
445
|
+
status);
|
430
446
|
c->backoff_.Reset();
|
431
447
|
}
|
432
448
|
}
|
@@ -509,6 +525,7 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
509
525
|
? "Subchannel"
|
510
526
|
: nullptr),
|
511
527
|
key_(std::move(key)),
|
528
|
+
created_from_endpoint_(args.Contains(GRPC_ARG_SUBCHANNEL_ENDPOINT)),
|
512
529
|
args_(args),
|
513
530
|
pollset_set_(grpc_pollset_set_create()),
|
514
531
|
connector_(std::move(connector)),
|
@@ -546,9 +563,7 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
546
563
|
grpc_sockaddr_to_uri(&key_.address())
|
547
564
|
.value_or("<unknown address type>"),
|
548
565
|
channel_tracer_max_memory);
|
549
|
-
channelz_node_
|
550
|
-
channelz::ChannelTrace::Severity::Info,
|
551
|
-
grpc_slice_from_static_string("subchannel created"));
|
566
|
+
GRPC_CHANNELZ_LOG(channelz_node_) << "subchannel created";
|
552
567
|
channelz_node_->SetChannelArgs(args_);
|
553
568
|
args_ = args_.SetObject<channelz::BaseNode>(channelz_node_);
|
554
569
|
}
|
@@ -556,9 +571,7 @@ Subchannel::Subchannel(SubchannelKey key,
|
|
556
571
|
|
557
572
|
Subchannel::~Subchannel() {
|
558
573
|
if (channelz_node_ != nullptr) {
|
559
|
-
channelz_node_
|
560
|
-
channelz::ChannelTrace::Severity::Info,
|
561
|
-
grpc_slice_from_static_string("Subchannel destroyed"));
|
574
|
+
GRPC_CHANNELZ_LOG(channelz_node_) << "Subchannel destroyed";
|
562
575
|
channelz_node_->UpdateConnectivityState(GRPC_CHANNEL_SHUTDOWN);
|
563
576
|
}
|
564
577
|
connector_.reset();
|
@@ -578,6 +591,15 @@ RefCountedPtr<Subchannel> Subchannel::Create(
|
|
578
591
|
return c;
|
579
592
|
}
|
580
593
|
c = MakeRefCounted<Subchannel>(std::move(key), std::move(connector), args);
|
594
|
+
if (c->created_from_endpoint_) {
|
595
|
+
// We don't interact with the subchannel pool in this case.
|
596
|
+
// Instead, we unconditionally return the newly created subchannel.
|
597
|
+
// Before returning, we explicitly trigger a connection attempt
|
598
|
+
// by calling RequestConnection(), which sets the subchannel’s
|
599
|
+
// connectivity state to CONNECTING.
|
600
|
+
c->RequestConnection();
|
601
|
+
return c;
|
602
|
+
}
|
581
603
|
// Try to register the subchannel before setting the subchannel pool.
|
582
604
|
// Otherwise, in case of a registration race, unreffing c in
|
583
605
|
// RegisterSubchannel() will cause c to be tried to be unregistered, while
|
@@ -702,12 +724,15 @@ void Subchannel::SetConnectivityStateLocked(grpc_connectivity_state state,
|
|
702
724
|
}
|
703
725
|
if (channelz_node_ != nullptr) {
|
704
726
|
channelz_node_->UpdateConnectivityState(state);
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
727
|
+
if (status.ok()) {
|
728
|
+
GRPC_CHANNELZ_LOG(channelz_node_)
|
729
|
+
<< "Subchannel connectivity state changed to "
|
730
|
+
<< ConnectivityStateName(state);
|
731
|
+
} else {
|
732
|
+
GRPC_CHANNELZ_LOG(channelz_node_)
|
733
|
+
<< "Subchannel connectivity state changed to "
|
734
|
+
<< ConnectivityStateName(state) << ": " << status;
|
735
|
+
}
|
711
736
|
}
|
712
737
|
// Notify watchers.
|
713
738
|
watcher_list_.NotifyLocked(state, status_);
|
@@ -767,10 +792,15 @@ void Subchannel::OnConnectingFinishedLocked(grpc_error_handle error) {
|
|
767
792
|
next_attempt_time_ - Timestamp::Now();
|
768
793
|
GRPC_TRACE_LOG(subchannel, INFO)
|
769
794
|
<< "subchannel " << this << " " << key_.ToString()
|
770
|
-
<< ": connect failed (" << StatusToString(error)
|
771
|
-
<<
|
795
|
+
<< ": connect failed (" << StatusToString(error) << ")"
|
796
|
+
<< (created_from_endpoint_
|
797
|
+
? ", no retry will be attempted (created from endpoint); "
|
798
|
+
"remaining in TRANSIENT_FAILURE"
|
799
|
+
: ", backing off for " +
|
800
|
+
std::to_string(time_until_next_attempt.millis()) + " ms");
|
772
801
|
SetConnectivityStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE,
|
773
802
|
grpc_error_to_absl_status(error));
|
803
|
+
if (created_from_endpoint_) return;
|
774
804
|
retry_timer_handle_ = event_engine_->RunAfter(
|
775
805
|
time_until_next_attempt,
|
776
806
|
[self = WeakRef(DEBUG_LOCATION, "RetryTimer")]() mutable {
|
@@ -856,7 +886,9 @@ bool Subchannel::PublishTransportLocked() {
|
|
856
886
|
<< "subchannel " << this << " " << key_.ToString()
|
857
887
|
<< ": new connected subchannel at " << connected_subchannel_.get();
|
858
888
|
if (channelz_node_ != nullptr) {
|
859
|
-
|
889
|
+
if (socket_node != nullptr) {
|
890
|
+
socket_node->AddParent(channelz_node_.get());
|
891
|
+
}
|
860
892
|
}
|
861
893
|
// Start watching connected subchannel.
|
862
894
|
connected_subchannel_->StartWatch(
|
@@ -58,6 +58,11 @@
|
|
58
58
|
#include "src/core/util/unique_type_name.h"
|
59
59
|
#include "src/core/util/work_serializer.h"
|
60
60
|
|
61
|
+
/** This arg is intended for internal use only, primarily
|
62
|
+
* for passing endpoint information during subchannel creation or connection.
|
63
|
+
*/
|
64
|
+
#define GRPC_ARG_SUBCHANNEL_ENDPOINT "grpc.internal.subchannel_endpoint"
|
65
|
+
|
61
66
|
namespace grpc_core {
|
62
67
|
|
63
68
|
class SubchannelCall;
|
@@ -80,6 +85,8 @@ class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
|
|
80
85
|
virtual size_t GetInitialCallSizeEstimate() const = 0;
|
81
86
|
virtual void Ping(grpc_closure* on_initiate, grpc_closure* on_ack) = 0;
|
82
87
|
|
88
|
+
virtual channelz::SubchannelNode* channelz_node() const = 0;
|
89
|
+
|
83
90
|
protected:
|
84
91
|
explicit ConnectedSubchannel(const ChannelArgs& args);
|
85
92
|
|
@@ -328,6 +335,9 @@ class Subchannel final : public DualRefCounted<Subchannel> {
|
|
328
335
|
RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
|
329
336
|
// Subchannel key that identifies this subchannel in the subchannel pool.
|
330
337
|
const SubchannelKey key_;
|
338
|
+
// boolean value that identifies this subchannel is created from event engine
|
339
|
+
// endpoint.
|
340
|
+
const bool created_from_endpoint_;
|
331
341
|
// Actual address to connect to. May be different than the address in
|
332
342
|
// key_ if overridden by proxy mapper.
|
333
343
|
grpc_resolved_address address_for_connect_;
|
@@ -30,7 +30,9 @@
|
|
30
30
|
#endif // !GPR_DEFAULT_LOG_VERBOSITY_STRING
|
31
31
|
|
32
32
|
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
33
|
+
#ifndef GRPC_ENABLE_FORK_SUPPORT_DEFAULT
|
33
34
|
#define GRPC_ENABLE_FORK_SUPPORT_DEFAULT true
|
35
|
+
#endif // !defined(GRPC_ENABLE_FORK_SUPPORT_DEFAULT)
|
34
36
|
#else
|
35
37
|
#define GRPC_ENABLE_FORK_SUPPORT_DEFAULT false
|
36
38
|
#endif // GRPC_ENABLE_FORK_SUPPORT
|