grpc 1.75.0 → 1.78.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 +24 -5
- data/include/grpc/credentials.h +27 -6
- data/include/grpc/event_engine/memory_allocator.h +2 -0
- data/include/grpc/event_engine/memory_request.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +5 -0
- data/include/grpc/support/metrics.h +7 -1
- data/src/core/call/call_filters.cc +5 -5
- data/src/core/call/call_filters.h +211 -37
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +54 -32
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +49 -10
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +9 -9
- data/src/core/call/interception_chain.h +7 -6
- data/src/core/call/metadata_batch.cc +49 -55
- data/src/core/call/metadata_batch.h +10 -9
- data/src/core/call/metadata_info.cc +1 -1
- data/src/core/call/parsed_metadata.h +2 -2
- data/src/core/call/request_buffer.cc +1 -1
- data/src/core/call/security_context.cc +2 -2
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +5 -5
- data/src/core/call/server_call.h +6 -4
- data/src/core/call/simple_slice_based_metadata.h +1 -1
- data/src/core/call/status_util.cc +1 -1
- data/src/core/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +3 -3
- data/src/core/channelz/channelz.cc +25 -29
- data/src/core/channelz/channelz.h +73 -22
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +53 -2
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +15 -4
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +17 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
- data/src/core/channelz/v2tov1/property_list.cc +2 -1
- data/src/core/channelz/ztrace_collector.h +260 -87
- data/src/core/client_channel/backup_poller.cc +7 -8
- data/src/core/client_channel/buffered_call.cc +140 -0
- data/src/core/client_channel/buffered_call.h +104 -0
- data/src/core/client_channel/client_channel.cc +144 -84
- data/src/core/client_channel/client_channel.h +8 -11
- data/src/core/client_channel/client_channel_factory.h +1 -1
- data/src/core/client_channel/client_channel_filter.cc +424 -686
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +8 -5
- data/src/core/client_channel/client_channel_service_config.cc +43 -3
- data/src/core/client_channel/client_channel_service_config.h +12 -1
- data/src/core/client_channel/config_selector.h +5 -5
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +5 -5
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +1 -28
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
- data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
- data/src/core/client_channel/retry_service_config.cc +3 -3
- data/src/core/client_channel/retry_service_config.h +1 -1
- data/src/core/client_channel/subchannel.cc +114 -25
- data/src/core/client_channel/subchannel.h +24 -8
- data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
- data/src/core/client_channel/subchannel_pool_interface.h +1 -1
- data/src/core/client_channel/subchannel_stream_client.cc +5 -5
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +38 -3
- data/src/core/config/config_vars.h +26 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +8 -8
- data/src/core/config/load_config.cc +13 -1
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +4 -4
- data/src/core/credentials/call/call_creds_registry.h +1 -1
- data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
- data/src/core/credentials/call/call_creds_util.cc +7 -6
- data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
- data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
- data/src/core/credentials/call/external/external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +7 -7
- data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
- data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
- data/src/core/credentials/call/iam/iam_credentials.h +1 -1
- data/src/core/credentials/call/json_util.cc +1 -1
- data/src/core/credentials/call/jwt/json_token.cc +7 -7
- data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
- data/src/core/credentials/call/jwt_util.cc +3 -3
- data/src/core/credentials/call/jwt_util.h +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +49 -72
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
- data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -5
- data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
- data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- data/src/core/credentials/transport/channel_creds_registry.h +1 -1
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
- data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
- data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
- data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
- data/src/core/credentials/transport/security_connector.cc +6 -6
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +8 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
- data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
- data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
- data/src/core/credentials/transport/tls/ssl_utils.cc +18 -13
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
- data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +3 -3
- data/src/core/credentials/transport/transport_credentials.h +4 -4
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
- data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
- data/src/core/ext/filters/http/client_authority_filter.h +4 -1
- data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +11 -11
- data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +14 -14
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
- data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
- data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
- data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +194 -54
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +30 -21
- data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
- data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
- data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
- data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- data/src/core/filter/auth/auth_filters.h +7 -1
- data/src/core/filter/auth/client_auth_filter.cc +2 -2
- data/src/core/filter/auth/server_auth_filter.cc +5 -5
- data/src/core/filter/blackboard.h +2 -2
- data/src/core/filter/filter_args.h +40 -2
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
- data/src/core/handshaker/handshaker.cc +8 -8
- data/src/core/handshaker/handshaker.h +2 -2
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +12 -12
- data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
- data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper.h +1 -1
- data/src/core/handshaker/proxy_mapper_registry.h +1 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
- data/src/core/handshaker/security/secure_endpoint.cc +31 -11
- data/src/core/handshaker/security/security_handshaker.cc +11 -8
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -5
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
- data/src/core/lib/channel/channel_args.cc +1 -1
- data/src/core/lib/channel/channel_args.h +2 -2
- data/src/core/lib/channel/channel_stack.cc +29 -25
- data/src/core/lib/channel/channel_stack.h +8 -3
- data/src/core/lib/channel/channel_stack_builder.cc +8 -4
- data/src/core/lib/channel/channel_stack_builder.h +10 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/promise_based_filter.cc +132 -72
- data/src/core/lib/channel/promise_based_filter.h +39 -23
- data/src/core/lib/compression/compression_internal.cc +6 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +8 -8
- data/src/core/lib/debug/trace.cc +2 -5
- data/src/core/lib/debug/trace.h +10 -0
- data/src/core/lib/debug/trace_flags.cc +2 -2
- data/src/core/lib/debug/trace_flags.h +1 -1
- data/src/core/lib/event_engine/ares_resolver.cc +30 -28
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
- data/src/core/lib/event_engine/default_event_engine.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +1 -1
- data/src/core/lib/event_engine/extensions/channelz.h +3 -3
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -12
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -27
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +9 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
- data/src/core/lib/event_engine/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
- data/src/core/lib/event_engine/utils.cc +3 -3
- data/src/core/lib/event_engine/utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +32 -32
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +11 -11
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
- data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
- data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
- data/src/core/lib/experiments/config.cc +4 -4
- data/src/core/lib/experiments/experiments.cc +255 -42
- data/src/core/lib/experiments/experiments.h +105 -21
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +4 -4
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/closure.h +2 -2
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -7
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
- data/src/core/lib/iomgr/error.cc +1 -1
- data/src/core/lib/iomgr/error.h +2 -2
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +10 -9
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +9 -9
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +4 -4
- data/src/core/lib/iomgr/resolve_address.cc +1 -1
- data/src/core/lib/iomgr/resolve_address.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
- data/src/core/lib/iomgr/socket_windows.cc +6 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +47 -47
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
- data/src/core/lib/iomgr/tcp_windows.cc +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +5 -5
- data/src/core/lib/iomgr/timer_manager.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/vsock.h +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
- data/src/core/lib/promise/activity.cc +3 -3
- data/src/core/lib/promise/activity.h +11 -10
- data/src/core/lib/promise/all_ok.h +3 -3
- data/src/core/lib/promise/arena_promise.h +47 -6
- data/src/core/lib/promise/context.h +3 -3
- data/src/core/lib/promise/detail/join_state.h +10 -10
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/detail/promise_like.h +1 -1
- data/src/core/lib/promise/detail/seq_state.h +16 -16
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +8 -8
- data/src/core/lib/promise/if.h +1 -1
- data/src/core/lib/promise/inter_activity_latch.h +3 -3
- data/src/core/lib/promise/inter_activity_mutex.h +1 -1
- data/src/core/lib/promise/interceptor_list.h +5 -5
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/loop.h +2 -2
- data/src/core/lib/promise/map.h +2 -2
- data/src/core/lib/promise/mpsc.cc +31 -30
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +6 -6
- data/src/core/lib/promise/party.cc +43 -30
- data/src/core/lib/promise/party.h +27 -23
- data/src/core/lib/promise/pipe.h +31 -17
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/promise.h +2 -4
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +8 -8
- data/src/core/lib/promise/try_join.h +5 -5
- data/src/core/lib/promise/try_seq.h +5 -5
- data/src/core/lib/promise/wait_set.h +2 -2
- data/src/core/lib/resource_quota/api.cc +1 -1
- data/src/core/lib/resource_quota/arena.cc +1 -1
- data/src/core/lib/resource_quota/arena.h +15 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +48 -27
- data/src/core/lib/resource_quota/memory_quota.h +56 -20
- data/src/core/lib/resource_quota/periodic_update.h +1 -1
- data/src/core/lib/resource_quota/resource_quota.cc +8 -0
- data/src/core/lib/resource_quota/resource_quota.h +2 -1
- data/src/core/lib/resource_quota/stream_quota.cc +22 -0
- data/src/core/lib/resource_quota/stream_quota.h +31 -0
- data/src/core/lib/resource_quota/telemetry.h +55 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +7 -7
- data/src/core/lib/security/authorization/audit_logging.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
- data/src/core/lib/security/authorization/matchers.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/slice/percent_encoding.cc +1 -1
- data/src/core/lib/slice/slice.cc +1 -1
- data/src/core/lib/slice/slice.h +2 -2
- data/src/core/lib/slice/slice_buffer.cc +1 -1
- data/src/core/lib/slice/slice_internal.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +58 -28
- data/src/core/lib/surface/call.h +13 -6
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +7 -7
- data/src/core/lib/surface/call_utils.h +85 -20
- data/src/core/lib/surface/channel.cc +6 -5
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +12 -8
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +84 -27
- data/src/core/lib/surface/channel_init.h +30 -13
- data/src/core/lib/surface/completion_queue.cc +21 -20
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +25 -31
- data/src/core/lib/surface/filter_stack_call.h +6 -7
- data/src/core/lib/surface/init.cc +4 -4
- data/src/core/lib/surface/lame_client.cc +2 -2
- data/src/core/lib/surface/lame_client.h +3 -3
- data/src/core/lib/surface/legacy_channel.cc +10 -10
- data/src/core/lib/surface/legacy_channel.h +1 -1
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -3
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +5 -5
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/promise_endpoint.cc +4 -4
- data/src/core/lib/transport/promise_endpoint.h +11 -11
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +3 -3
- data/src/core/lib/transport/transport.h +62 -4
- data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/load_balancing/address_filtering.cc +1 -1
- data/src/core/load_balancing/address_filtering.h +2 -2
- data/src/core/load_balancing/backend_metric_parser.cc +1 -1
- data/src/core/load_balancing/backend_metric_parser.h +1 -1
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +2 -2
- data/src/core/load_balancing/endpoint_list.cc +6 -6
- data/src/core/load_balancing/endpoint_list.h +2 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
- data/src/core/load_balancing/grpclb/grpclb.cc +37 -48
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +13 -9
- data/src/core/load_balancing/health_check_client_internal.h +5 -5
- data/src/core/load_balancing/lb_policy.h +11 -8
- data/src/core/load_balancing/lb_policy_factory.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +3 -3
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +11 -7
- data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
- data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
- data/src/core/load_balancing/priority/priority.cc +29 -30
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
- data/src/core/load_balancing/rls/rls.cc +23 -23
- data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
- data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
- data/src/core/load_balancing/xds/cds.cc +81 -37
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
- data/src/core/load_balancing/xds/xds_override_host.h +1 -1
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
- data/src/core/resolver/endpoint_addresses.cc +6 -6
- data/src/core/resolver/endpoint_addresses.h +4 -1
- data/src/core/resolver/fake/fake_resolver.cc +3 -3
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
- data/src/core/resolver/polling_resolver.cc +8 -8
- data/src/core/resolver/polling_resolver.h +1 -1
- data/src/core/resolver/resolver.h +2 -2
- data/src/core/resolver/resolver_factory.h +2 -2
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/resolver_registry.h +1 -1
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
- data/src/core/resolver/xds/xds_config.cc +1 -1
- data/src/core/resolver/xds/xds_config.h +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +7 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +25 -22
- data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
- data/src/core/server/add_port.cc +2 -2
- data/src/core/server/server.cc +47 -43
- data/src/core/server/server.h +8 -7
- data/src/core/server/server_call_tracer_filter.cc +1 -1
- data/src/core/server/server_call_tracer_filter.h +9 -5
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +5 -5
- data/src/core/server/xds_channel_stack_modifier.cc +3 -2
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +19 -18
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
- data/src/core/service_config/service_config_impl.cc +3 -3
- data/src/core/service_config/service_config_impl.h +4 -4
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +201 -24
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +999 -0
- data/src/core/telemetry/instrument.h +1105 -0
- data/src/core/telemetry/metrics.cc +15 -5
- data/src/core/telemetry/metrics.h +36 -5
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -20
- data/src/core/telemetry/stats_data.h +2 -21
- data/src/core/transport/auth_context.cc +3 -3
- data/src/core/transport/auth_context.h +2 -1
- data/src/core/transport/auth_context_comparator_registry.h +1 -1
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +81 -48
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +18 -5
- data/src/core/tsi/fake_transport_security.cc +6 -5
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +30 -30
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
- data/src/core/tsi/ssl_transport_security_utils.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/alloc.cc +1 -1
- data/src/core/util/backoff.h +1 -1
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/crash.h +1 -1
- data/src/core/util/dual_ref_counted.h +2 -2
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +7 -7
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/glob.cc +2 -0
- data/src/core/util/grpc_check.cc +24 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
- data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
- data/src/core/util/http_client/format_request.cc +1 -1
- data/src/core/util/http_client/httpcli.cc +6 -6
- data/src/core/util/http_client/httpcli.h +4 -4
- data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/json/json_channel_args.h +1 -1
- data/src/core/util/json/json_object_loader.h +6 -6
- data/src/core/util/json/json_reader.cc +2 -2
- data/src/core/util/json/json_reader.h +1 -1
- data/src/core/util/json/json_util.h +3 -3
- data/src/core/util/json/json_writer.cc +1 -1
- data/src/core/util/latent_see.cc +45 -24
- data/src/core/util/latent_see.h +199 -28
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +1 -1
- data/src/core/util/load_file.h +1 -1
- data/src/core/util/log.cc +3 -3
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +17 -1
- data/src/core/util/mpscq.h +1 -1
- data/src/core/util/notification.h +1 -1
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/stat.cc +2 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +6 -1
- data/src/core/util/ref_counted_string.h +1 -1
- data/src/core/util/single_set_ptr.h +3 -1
- data/src/core/util/status_helper.cc +8 -8
- data/src/core/util/status_helper.h +1 -1
- data/src/core/util/string.cc +2 -2
- data/src/core/util/sync_abseil.cc +1 -1
- data/src/core/util/table.h +1 -1
- data/src/core/util/time.cc +1 -1
- data/src/core/util/time_precise.cc +1 -1
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/util/unique_type_name.h +1 -1
- data/src/core/util/upb_utils.h +6 -1
- data/src/core/util/validation_errors.cc +2 -2
- data/src/core/util/validation_errors.h +2 -3
- data/src/core/util/wait_for_single_owner.h +2 -2
- data/src/core/util/windows/directory_reader.cc +1 -1
- data/src/core/util/windows/stat.cc +2 -2
- data/src/core/util/windows/thd.cc +2 -2
- data/src/core/util/windows/time.cc +1 -1
- data/src/core/util/work_serializer.cc +3 -3
- data/src/core/util/work_serializer.h +2 -2
- data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
- data/src/core/xds/grpc/certificate_provider_store.h +2 -2
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -3
- data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
- data/src/core/xds/grpc/xds_client_grpc.h +6 -3
- data/src/core/xds/grpc/xds_cluster.cc +2 -2
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
- data/src/core/xds/grpc/xds_endpoint.h +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
- data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
- data/src/core/xds/grpc/xds_health_status.cc +1 -1
- data/src/core/xds/grpc/xds_health_status.h +1 -1
- data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_filter.h +3 -3
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
- data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +2 -2
- data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- data/src/core/xds/grpc/xds_metadata.h +3 -3
- data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
- data/src/core/xds/grpc/xds_route_config.cc +3 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +14 -14
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +6 -6
- data/src/core/xds/grpc/xds_routing.h +2 -2
- data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.cc +11 -11
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +9 -9
- data/src/core/xds/xds_client/lrs_client.h +4 -4
- data/src/core/xds/xds_client/xds_api.h +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
- data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +17 -17
- data/src/core/xds/xds_client/xds_client.h +5 -5
- data/src/core/xds/xds_client/xds_locality.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type.h +2 -2
- data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
- data/src/core/xds/xds_client/xds_transport.h +2 -2
- data/src/ruby/ext/grpc/extconf.rb +14 -12
- data/src/ruby/ext/grpc/rb_call.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +51 -6
|
@@ -29,13 +29,9 @@
|
|
|
29
29
|
#include <string>
|
|
30
30
|
#include <utility>
|
|
31
31
|
|
|
32
|
-
#include "absl/base/thread_annotations.h"
|
|
33
|
-
#include "absl/container/flat_hash_set.h"
|
|
34
|
-
#include "absl/functional/any_invocable.h"
|
|
35
|
-
#include "absl/status/status.h"
|
|
36
|
-
#include "absl/strings/string_view.h"
|
|
37
32
|
#include "src/core/call/metadata_batch.h"
|
|
38
33
|
#include "src/core/channelz/channelz.h"
|
|
34
|
+
#include "src/core/client_channel/buffered_call.h"
|
|
39
35
|
#include "src/core/client_channel/client_channel_args.h"
|
|
40
36
|
#include "src/core/client_channel/client_channel_factory.h"
|
|
41
37
|
#include "src/core/client_channel/config_selector.h"
|
|
@@ -67,6 +63,12 @@
|
|
|
67
63
|
#include "src/core/util/time.h"
|
|
68
64
|
#include "src/core/util/time_precise.h"
|
|
69
65
|
#include "src/core/util/work_serializer.h"
|
|
66
|
+
#include "absl/base/thread_annotations.h"
|
|
67
|
+
#include "absl/container/flat_hash_map.h"
|
|
68
|
+
#include "absl/container/flat_hash_set.h"
|
|
69
|
+
#include "absl/functional/any_invocable.h"
|
|
70
|
+
#include "absl/status/status.h"
|
|
71
|
+
#include "absl/strings/string_view.h"
|
|
70
72
|
|
|
71
73
|
//
|
|
72
74
|
// Client channel filter
|
|
@@ -79,16 +81,6 @@
|
|
|
79
81
|
// Calls on a disconnected client channel are queued until a connection is
|
|
80
82
|
// established.
|
|
81
83
|
|
|
82
|
-
// Max number of batches that can be pending on a call at any given
|
|
83
|
-
// time. This includes one batch for each of the following ops:
|
|
84
|
-
// recv_initial_metadata
|
|
85
|
-
// send_initial_metadata
|
|
86
|
-
// recv_message
|
|
87
|
-
// send_message
|
|
88
|
-
// recv_trailing_metadata
|
|
89
|
-
// send_trailing_metadata
|
|
90
|
-
#define MAX_PENDING_BATCHES 6
|
|
91
|
-
|
|
92
84
|
namespace grpc_core {
|
|
93
85
|
|
|
94
86
|
class ClientChannelFilter final {
|
|
@@ -96,7 +88,6 @@ class ClientChannelFilter final {
|
|
|
96
88
|
static const grpc_channel_filter kFilter;
|
|
97
89
|
|
|
98
90
|
class LoadBalancedCall;
|
|
99
|
-
class FilterBasedLoadBalancedCall;
|
|
100
91
|
|
|
101
92
|
// Flag that this object gets stored in channel args as a raw pointer.
|
|
102
93
|
struct RawPointerChannelArgTag {};
|
|
@@ -143,14 +134,13 @@ class ClientChannelFilter final {
|
|
|
143
134
|
void RemoveConnectivityWatcher(
|
|
144
135
|
AsyncConnectivityStateWatcherInterface* watcher);
|
|
145
136
|
|
|
146
|
-
OrphanablePtr<
|
|
137
|
+
OrphanablePtr<LoadBalancedCall> CreateLoadBalancedCall(
|
|
147
138
|
const grpc_call_element_args& args, grpc_polling_entity* pollent,
|
|
148
139
|
grpc_closure* on_call_destruction_complete,
|
|
149
140
|
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry);
|
|
150
141
|
|
|
151
142
|
private:
|
|
152
143
|
class CallData;
|
|
153
|
-
class FilterBasedCallData;
|
|
154
144
|
class ResolverResultHandler;
|
|
155
145
|
class SubchannelWrapper;
|
|
156
146
|
class ClientChannelControlHelper;
|
|
@@ -318,15 +308,12 @@ class ClientChannelFilter final {
|
|
|
318
308
|
ABSL_GUARDED_BY(*work_serializer_);
|
|
319
309
|
RefCountedPtr<SubchannelPoolInterface> subchannel_pool_
|
|
320
310
|
ABSL_GUARDED_BY(*work_serializer_);
|
|
321
|
-
// The
|
|
322
|
-
|
|
323
|
-
ABSL_GUARDED_BY(*work_serializer_);
|
|
324
|
-
// The set of SubchannelWrappers that currently exist.
|
|
325
|
-
// No need to hold a ref, since the map is updated in the control-plane
|
|
311
|
+
// The set of SubchannelWrapper instances referencing a given Subchannel.
|
|
312
|
+
// No need to hold refs, since the map is updated in the control-plane
|
|
326
313
|
// work_serializer when the SubchannelWrappers are created and destroyed.
|
|
327
|
-
absl::flat_hash_set<SubchannelWrapper
|
|
328
|
-
ABSL_GUARDED_BY(*work_serializer_);
|
|
329
|
-
|
|
314
|
+
absl::flat_hash_map<Subchannel*, absl::flat_hash_set<SubchannelWrapper*>>
|
|
315
|
+
subchannel_map_ ABSL_GUARDED_BY(*work_serializer_);
|
|
316
|
+
Duration keepalive_time_ ABSL_GUARDED_BY(*work_serializer_);
|
|
330
317
|
grpc_error_handle disconnect_error_ ABSL_GUARDED_BY(*work_serializer_);
|
|
331
318
|
|
|
332
319
|
//
|
|
@@ -352,15 +339,26 @@ class ClientChannelFilter final {
|
|
|
352
339
|
|
|
353
340
|
// TODO(roth): As part of simplifying cancellation in the filter stack,
|
|
354
341
|
// this should no longer need to be ref-counted.
|
|
355
|
-
class ClientChannelFilter::LoadBalancedCall
|
|
342
|
+
class ClientChannelFilter::LoadBalancedCall final
|
|
356
343
|
: public InternallyRefCounted<LoadBalancedCall, UnrefCallDtor> {
|
|
357
344
|
public:
|
|
358
|
-
|
|
345
|
+
// If on_call_destruction_complete is non-null, then it will be
|
|
346
|
+
// invoked once the LoadBalancedCall is completely destroyed.
|
|
347
|
+
// If it is null, then the caller is responsible for checking whether
|
|
348
|
+
// the LB call has a subchannel call and ensuring that the
|
|
349
|
+
// on_call_destruction_complete closure passed down from the surface
|
|
350
|
+
// is not invoked until after the subchannel call stack is destroyed.
|
|
351
|
+
LoadBalancedCall(ClientChannelFilter* chand,
|
|
352
|
+
const grpc_call_element_args& args,
|
|
353
|
+
grpc_polling_entity* pollent,
|
|
354
|
+
grpc_closure* on_call_destruction_complete,
|
|
359
355
|
absl::AnyInvocable<void()> on_commit,
|
|
360
356
|
bool is_transparent_retry);
|
|
361
357
|
~LoadBalancedCall() override;
|
|
362
358
|
|
|
363
|
-
void Orphan() override
|
|
359
|
+
void Orphan() override;
|
|
360
|
+
|
|
361
|
+
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
|
|
364
362
|
|
|
365
363
|
// Called by channel when removing a call from the list of queued calls.
|
|
366
364
|
void RemoveCallFromLbQueuedCallsLocked()
|
|
@@ -368,22 +366,22 @@ class ClientChannelFilter::LoadBalancedCall
|
|
|
368
366
|
|
|
369
367
|
// Called by the channel for each queued call when a new picker
|
|
370
368
|
// becomes available.
|
|
371
|
-
|
|
372
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_)
|
|
369
|
+
void RetryPickLocked()
|
|
370
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
|
|
373
371
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer() const {
|
|
377
|
-
return call_attempt_tracer_;
|
|
378
|
-
}
|
|
379
|
-
ConnectedSubchannel* connected_subchannel() const {
|
|
380
|
-
return connected_subchannel_.get();
|
|
372
|
+
RefCountedPtr<SubchannelCall> subchannel_call() const {
|
|
373
|
+
return subchannel_call_;
|
|
381
374
|
}
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
375
|
+
|
|
376
|
+
private:
|
|
377
|
+
class LbCallState;
|
|
378
|
+
class Metadata;
|
|
379
|
+
class BackendMetricAccessor;
|
|
380
|
+
class LbQueuedCallCanceller;
|
|
381
|
+
|
|
382
|
+
grpc_metadata_batch* send_initial_metadata() const {
|
|
383
|
+
return buffered_call_.send_initial_metadata();
|
|
385
384
|
}
|
|
386
|
-
Arena* arena() const { return arena_; }
|
|
387
385
|
|
|
388
386
|
void Commit() {
|
|
389
387
|
auto on_commit = std::move(on_commit_);
|
|
@@ -409,14 +407,6 @@ class ClientChannelFilter::LoadBalancedCall
|
|
|
409
407
|
|
|
410
408
|
void RecordLatency();
|
|
411
409
|
|
|
412
|
-
private:
|
|
413
|
-
class LbCallState;
|
|
414
|
-
class Metadata;
|
|
415
|
-
class BackendMetricAccessor;
|
|
416
|
-
|
|
417
|
-
virtual grpc_polling_entity* pollent() = 0;
|
|
418
|
-
virtual grpc_metadata_batch* send_initial_metadata() const = 0;
|
|
419
|
-
|
|
420
410
|
// Helper function for performing an LB pick with a specified picker.
|
|
421
411
|
// Returns true if the pick is complete.
|
|
422
412
|
bool PickSubchannelImpl(LoadBalancingPolicy::SubchannelPicker* picker,
|
|
@@ -425,94 +415,6 @@ class ClientChannelFilter::LoadBalancedCall
|
|
|
425
415
|
void AddCallToLbQueuedCallsLocked()
|
|
426
416
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
|
|
427
417
|
|
|
428
|
-
// Called when adding the call to the LB queue.
|
|
429
|
-
virtual void OnAddToQueueLocked()
|
|
430
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_) = 0;
|
|
431
|
-
|
|
432
|
-
ClientChannelFilter* chand_;
|
|
433
|
-
// When we start a new attempt for a call, we might not have cleaned up the
|
|
434
|
-
// previous attempt yet leading to a situation where we have two active call
|
|
435
|
-
// attempt tracers, and so we cannot rely on the arena to give us the right
|
|
436
|
-
// tracer when performing cleanup.
|
|
437
|
-
ClientCallTracerInterface::CallAttemptTracer* call_attempt_tracer_;
|
|
438
|
-
|
|
439
|
-
absl::AnyInvocable<void()> on_commit_;
|
|
440
|
-
|
|
441
|
-
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
|
442
|
-
const BackendMetricData* backend_metric_data_ = nullptr;
|
|
443
|
-
std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
|
|
444
|
-
lb_subchannel_call_tracker_;
|
|
445
|
-
Arena* const arena_;
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
class ClientChannelFilter::FilterBasedLoadBalancedCall final
|
|
449
|
-
: public ClientChannelFilter::LoadBalancedCall {
|
|
450
|
-
public:
|
|
451
|
-
// If on_call_destruction_complete is non-null, then it will be
|
|
452
|
-
// invoked once the LoadBalancedCall is completely destroyed.
|
|
453
|
-
// If it is null, then the caller is responsible for checking whether
|
|
454
|
-
// the LB call has a subchannel call and ensuring that the
|
|
455
|
-
// on_call_destruction_complete closure passed down from the surface
|
|
456
|
-
// is not invoked until after the subchannel call stack is destroyed.
|
|
457
|
-
FilterBasedLoadBalancedCall(ClientChannelFilter* chand,
|
|
458
|
-
const grpc_call_element_args& args,
|
|
459
|
-
grpc_polling_entity* pollent,
|
|
460
|
-
grpc_closure* on_call_destruction_complete,
|
|
461
|
-
absl::AnyInvocable<void()> on_commit,
|
|
462
|
-
bool is_transparent_retry);
|
|
463
|
-
~FilterBasedLoadBalancedCall() override;
|
|
464
|
-
|
|
465
|
-
void Orphan() override;
|
|
466
|
-
|
|
467
|
-
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch);
|
|
468
|
-
|
|
469
|
-
RefCountedPtr<SubchannelCall> subchannel_call() const {
|
|
470
|
-
return subchannel_call_;
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
private:
|
|
474
|
-
class LbQueuedCallCanceller;
|
|
475
|
-
|
|
476
|
-
// Work-around for Windows compilers that don't allow nested classes
|
|
477
|
-
// to access protected members of the enclosing class's parent class.
|
|
478
|
-
using LoadBalancedCall::chand;
|
|
479
|
-
using LoadBalancedCall::Commit;
|
|
480
|
-
|
|
481
|
-
grpc_polling_entity* pollent() override { return pollent_; }
|
|
482
|
-
grpc_metadata_batch* send_initial_metadata() const override {
|
|
483
|
-
return pending_batches_[0]
|
|
484
|
-
->payload->send_initial_metadata.send_initial_metadata;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// Returns the index into pending_batches_ to be used for batch.
|
|
488
|
-
static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
|
|
489
|
-
void PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
|
|
490
|
-
static void FailPendingBatchInCallCombiner(void* arg,
|
|
491
|
-
grpc_error_handle error);
|
|
492
|
-
// A predicate type and some useful implementations for PendingBatchesFail().
|
|
493
|
-
typedef bool (*YieldCallCombinerPredicate)(
|
|
494
|
-
const CallCombinerClosureList& closures);
|
|
495
|
-
static bool YieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
|
|
496
|
-
return true;
|
|
497
|
-
}
|
|
498
|
-
static bool NoYieldCallCombiner(const CallCombinerClosureList& /*closures*/) {
|
|
499
|
-
return false;
|
|
500
|
-
}
|
|
501
|
-
static bool YieldCallCombinerIfPendingBatchesFound(
|
|
502
|
-
const CallCombinerClosureList& closures) {
|
|
503
|
-
return closures.size() > 0;
|
|
504
|
-
}
|
|
505
|
-
// Fails all pending batches.
|
|
506
|
-
// If yield_call_combiner_predicate returns true, assumes responsibility for
|
|
507
|
-
// yielding the call combiner.
|
|
508
|
-
void PendingBatchesFail(
|
|
509
|
-
grpc_error_handle error,
|
|
510
|
-
YieldCallCombinerPredicate yield_call_combiner_predicate);
|
|
511
|
-
static void ResumePendingBatchInCallCombiner(void* arg,
|
|
512
|
-
grpc_error_handle ignored);
|
|
513
|
-
// Resumes all pending batches on subchannel_call_.
|
|
514
|
-
void PendingBatchesResume();
|
|
515
|
-
|
|
516
418
|
static void SendInitialMetadataOnComplete(void* arg, grpc_error_handle error);
|
|
517
419
|
static void RecvInitialMetadataReady(void* arg, grpc_error_handle error);
|
|
518
420
|
static void RecvTrailingMetadataReady(void* arg, grpc_error_handle error);
|
|
@@ -521,14 +423,15 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
|
|
|
521
423
|
// and when it is queued and the channel gets a new picker.
|
|
522
424
|
void TryPick(bool was_queued);
|
|
523
425
|
|
|
524
|
-
void OnAddToQueueLocked() override
|
|
525
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
|
|
526
|
-
|
|
527
|
-
void RetryPickLocked() override
|
|
528
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::lb_mu_);
|
|
529
|
-
|
|
530
426
|
void CreateSubchannelCall();
|
|
531
427
|
|
|
428
|
+
ClientChannelFilter* chand_;
|
|
429
|
+
// When we start a new attempt for a call, we might not have cleaned up the
|
|
430
|
+
// previous attempt yet leading to a situation where we have two active call
|
|
431
|
+
// attempt tracers, and so we cannot rely on the arena to give us the right
|
|
432
|
+
// tracer when performing cleanup.
|
|
433
|
+
CallAttemptTracer* call_attempt_tracer_;
|
|
434
|
+
|
|
532
435
|
// TODO(roth): Instead of duplicating these fields in every filter
|
|
533
436
|
// that uses any one of them, we should store them in the call
|
|
534
437
|
// context. This will save per-call memory overhead.
|
|
@@ -536,6 +439,15 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
|
|
|
536
439
|
CallCombiner* call_combiner_;
|
|
537
440
|
grpc_polling_entity* pollent_;
|
|
538
441
|
grpc_closure* on_call_destruction_complete_;
|
|
442
|
+
Arena* const arena_;
|
|
443
|
+
|
|
444
|
+
absl::AnyInvocable<void()> on_commit_;
|
|
445
|
+
|
|
446
|
+
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
|
447
|
+
const BackendMetricData* backend_metric_data_ = nullptr;
|
|
448
|
+
std::unique_ptr<LoadBalancingPolicy::SubchannelCallTrackerInterface>
|
|
449
|
+
lb_subchannel_call_tracker_;
|
|
450
|
+
|
|
539
451
|
std::optional<Slice> peer_string_;
|
|
540
452
|
|
|
541
453
|
// Set when we get a cancel_stream op.
|
|
@@ -560,12 +472,7 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall final
|
|
|
560
472
|
grpc_closure recv_trailing_metadata_ready_;
|
|
561
473
|
grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
|
|
562
474
|
|
|
563
|
-
|
|
564
|
-
// They are removed when we are done handling the batch (i.e., when
|
|
565
|
-
// either we have invoked all of the batch's callbacks or we have
|
|
566
|
-
// passed the batch down to the subchannel call and are not
|
|
567
|
-
// intercepting any of its callbacks).
|
|
568
|
-
grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
|
|
475
|
+
BufferedCall buffered_call_;
|
|
569
476
|
};
|
|
570
477
|
|
|
571
478
|
} // namespace grpc_core
|
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
|
|
22
22
|
#include <utility>
|
|
23
23
|
|
|
24
|
-
#include "absl/functional/any_invocable.h"
|
|
25
|
-
#include "absl/log/check.h"
|
|
26
24
|
#include "src/core/call/call_destination.h"
|
|
27
25
|
#include "src/core/lib/resource_quota/arena.h"
|
|
28
26
|
#include "src/core/load_balancing/lb_policy.h"
|
|
29
27
|
#include "src/core/service_config/service_config_call_data.h"
|
|
30
28
|
#include "src/core/telemetry/call_tracer.h"
|
|
31
29
|
#include "src/core/util/down_cast.h"
|
|
30
|
+
#include "src/core/util/grpc_check.h"
|
|
32
31
|
#include "src/core/util/unique_type_name.h"
|
|
32
|
+
#include "absl/functional/any_invocable.h"
|
|
33
33
|
|
|
34
34
|
//
|
|
35
35
|
// This file contains internal interfaces used to allow various plugins
|
|
@@ -41,6 +41,10 @@
|
|
|
41
41
|
#define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
|
|
42
42
|
"grpc.internal.health_check_service_name"
|
|
43
43
|
|
|
44
|
+
// Max number of connections per subchannel.
|
|
45
|
+
#define GRPC_ARG_MAX_CONNECTIONS_PER_SUBCHANNEL \
|
|
46
|
+
"grpc.internal.max_connections_per_subchannel"
|
|
47
|
+
|
|
44
48
|
namespace grpc_core {
|
|
45
49
|
|
|
46
50
|
// Internal type for LB call state interface. Provides an interface for
|
|
@@ -54,8 +58,7 @@ class ClientChannelLbCallState : public LoadBalancingPolicy::CallState {
|
|
|
54
58
|
|
|
55
59
|
virtual ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
|
|
56
60
|
UniqueTypeName type) const = 0;
|
|
57
|
-
virtual
|
|
58
|
-
const = 0;
|
|
61
|
+
virtual CallAttemptTracer* GetCallAttemptTracer() const = 0;
|
|
59
62
|
};
|
|
60
63
|
|
|
61
64
|
// Internal type for ServiceConfigCallData. Handles call commits.
|
|
@@ -65,7 +68,7 @@ class ClientChannelServiceConfigCallData final : public ServiceConfigCallData {
|
|
|
65
68
|
: ServiceConfigCallData(arena) {}
|
|
66
69
|
|
|
67
70
|
void SetOnCommit(absl::AnyInvocable<void()> on_commit) {
|
|
68
|
-
|
|
71
|
+
GRPC_CHECK(on_commit_ == nullptr);
|
|
69
72
|
on_commit_ = std::move(on_commit);
|
|
70
73
|
}
|
|
71
74
|
|
|
@@ -22,11 +22,12 @@
|
|
|
22
22
|
#include <optional>
|
|
23
23
|
#include <utility>
|
|
24
24
|
|
|
25
|
+
#include "src/core/load_balancing/lb_policy_registry.h"
|
|
26
|
+
#include "src/core/util/env.h"
|
|
25
27
|
#include "absl/status/status.h"
|
|
26
28
|
#include "absl/status/statusor.h"
|
|
27
29
|
#include "absl/strings/ascii.h"
|
|
28
30
|
#include "absl/strings/str_cat.h"
|
|
29
|
-
#include "src/core/load_balancing/lb_policy_registry.h"
|
|
30
31
|
|
|
31
32
|
// As per the retry design, we do not allow more than 5 retry attempts.
|
|
32
33
|
#define MAX_MAX_RETRY_ATTEMPTS 5
|
|
@@ -34,6 +35,27 @@
|
|
|
34
35
|
namespace grpc_core {
|
|
35
36
|
namespace internal {
|
|
36
37
|
|
|
38
|
+
namespace {
|
|
39
|
+
|
|
40
|
+
bool ConnectionScalingEnabled() {
|
|
41
|
+
auto value =
|
|
42
|
+
GetEnv("GRPC_EXPERIMENTAL_MAX_CONCURRENT_STREAMS_CONNECTION_SCALING");
|
|
43
|
+
if (!value.has_value()) return false;
|
|
44
|
+
bool parsed_value;
|
|
45
|
+
bool parse_succeeded = gpr_parse_bool_value(value->c_str(), &parsed_value);
|
|
46
|
+
return parse_succeeded && parsed_value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
class ConnectionScalingJsonArgs final : public JsonArgs {
|
|
50
|
+
public:
|
|
51
|
+
bool IsEnabled(absl::string_view key) const override {
|
|
52
|
+
if (key == "connection_scaling") return ConnectionScalingEnabled();
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
} // namespace
|
|
58
|
+
|
|
37
59
|
//
|
|
38
60
|
// ClientChannelGlobalParsedConfig::HealthCheckConfig
|
|
39
61
|
//
|
|
@@ -48,6 +70,21 @@ ClientChannelGlobalParsedConfig::HealthCheckConfig::JsonLoader(
|
|
|
48
70
|
return loader;
|
|
49
71
|
}
|
|
50
72
|
|
|
73
|
+
//
|
|
74
|
+
// ClientChannelGlobalParsedConfig::ConnectionScaling
|
|
75
|
+
//
|
|
76
|
+
|
|
77
|
+
const JsonLoaderInterface*
|
|
78
|
+
ClientChannelGlobalParsedConfig::ConnectionScaling::JsonLoader(
|
|
79
|
+
const JsonArgs&) {
|
|
80
|
+
static const auto* loader =
|
|
81
|
+
JsonObjectLoader<ConnectionScaling>()
|
|
82
|
+
.OptionalField("maxConnectionsPerSubchannel",
|
|
83
|
+
&ConnectionScaling::max_connections_per_subchannel)
|
|
84
|
+
.Finish();
|
|
85
|
+
return loader;
|
|
86
|
+
}
|
|
87
|
+
|
|
51
88
|
//
|
|
52
89
|
// ClientChannelGlobalParsedConfig
|
|
53
90
|
//
|
|
@@ -63,6 +100,9 @@ const JsonLoaderInterface* ClientChannelGlobalParsedConfig::JsonLoader(
|
|
|
63
100
|
&ClientChannelGlobalParsedConfig::parsed_deprecated_lb_policy_)
|
|
64
101
|
.OptionalField("healthCheckConfig",
|
|
65
102
|
&ClientChannelGlobalParsedConfig::health_check_config_)
|
|
103
|
+
.OptionalField("connectionScaling",
|
|
104
|
+
&ClientChannelGlobalParsedConfig::connection_scaling_,
|
|
105
|
+
"connection_scaling")
|
|
66
106
|
.Finish();
|
|
67
107
|
return loader;
|
|
68
108
|
}
|
|
@@ -138,14 +178,14 @@ ClientChannelServiceConfigParser::ParseGlobalParams(const ChannelArgs& /*args*/,
|
|
|
138
178
|
const Json& json,
|
|
139
179
|
ValidationErrors* errors) {
|
|
140
180
|
return LoadFromJson<std::unique_ptr<ClientChannelGlobalParsedConfig>>(
|
|
141
|
-
json,
|
|
181
|
+
json, ConnectionScalingJsonArgs(), errors);
|
|
142
182
|
}
|
|
143
183
|
|
|
144
184
|
std::unique_ptr<ServiceConfigParser::ParsedConfig>
|
|
145
185
|
ClientChannelServiceConfigParser::ParsePerMethodParams(
|
|
146
186
|
const ChannelArgs& /*args*/, const Json& json, ValidationErrors* errors) {
|
|
147
187
|
return LoadFromJson<std::unique_ptr<ClientChannelMethodParsedConfig>>(
|
|
148
|
-
json,
|
|
188
|
+
json, ConnectionScalingJsonArgs(), errors);
|
|
149
189
|
}
|
|
150
190
|
|
|
151
191
|
} // namespace internal
|
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
#include <optional>
|
|
25
25
|
#include <string>
|
|
26
26
|
|
|
27
|
-
#include "absl/strings/string_view.h"
|
|
28
27
|
#include "src/core/config/core_configuration.h"
|
|
29
28
|
#include "src/core/lib/channel/channel_args.h"
|
|
30
29
|
#include "src/core/load_balancing/lb_policy.h"
|
|
@@ -35,6 +34,7 @@
|
|
|
35
34
|
#include "src/core/util/ref_counted_ptr.h"
|
|
36
35
|
#include "src/core/util/time.h"
|
|
37
36
|
#include "src/core/util/validation_errors.h"
|
|
37
|
+
#include "absl/strings/string_view.h"
|
|
38
38
|
|
|
39
39
|
namespace grpc_core {
|
|
40
40
|
namespace internal {
|
|
@@ -54,6 +54,10 @@ class ClientChannelGlobalParsedConfig final
|
|
|
54
54
|
return health_check_config_.service_name;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
uint32_t max_connections_per_subchannel() const {
|
|
58
|
+
return connection_scaling_.max_connections_per_subchannel;
|
|
59
|
+
}
|
|
60
|
+
|
|
57
61
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
|
58
62
|
void JsonPostLoad(const Json& json, const JsonArgs&,
|
|
59
63
|
ValidationErrors* errors);
|
|
@@ -65,9 +69,16 @@ class ClientChannelGlobalParsedConfig final
|
|
|
65
69
|
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
|
66
70
|
};
|
|
67
71
|
|
|
72
|
+
struct ConnectionScaling {
|
|
73
|
+
uint32_t max_connections_per_subchannel = 0;
|
|
74
|
+
|
|
75
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
|
|
76
|
+
};
|
|
77
|
+
|
|
68
78
|
RefCountedPtr<LoadBalancingPolicy::Config> parsed_lb_config_;
|
|
69
79
|
std::string parsed_deprecated_lb_policy_;
|
|
70
80
|
HealthCheckConfig health_check_config_;
|
|
81
|
+
ConnectionScaling connection_scaling_;
|
|
71
82
|
};
|
|
72
83
|
|
|
73
84
|
class ClientChannelMethodParsedConfig final
|
|
@@ -24,9 +24,6 @@
|
|
|
24
24
|
#include <utility>
|
|
25
25
|
#include <vector>
|
|
26
26
|
|
|
27
|
-
#include "absl/log/check.h"
|
|
28
|
-
#include "absl/status/status.h"
|
|
29
|
-
#include "absl/strings/string_view.h"
|
|
30
27
|
#include "src/core/call/interception_chain.h"
|
|
31
28
|
#include "src/core/call/metadata_batch.h"
|
|
32
29
|
#include "src/core/client_channel/client_channel_internal.h"
|
|
@@ -35,10 +32,13 @@
|
|
|
35
32
|
#include "src/core/lib/resource_quota/arena.h"
|
|
36
33
|
#include "src/core/lib/slice/slice.h"
|
|
37
34
|
#include "src/core/service_config/service_config.h"
|
|
35
|
+
#include "src/core/util/grpc_check.h"
|
|
38
36
|
#include "src/core/util/ref_counted.h"
|
|
39
37
|
#include "src/core/util/ref_counted_ptr.h"
|
|
40
38
|
#include "src/core/util/unique_type_name.h"
|
|
41
39
|
#include "src/core/util/useful.h"
|
|
40
|
+
#include "absl/status/status.h"
|
|
41
|
+
#include "absl/strings/string_view.h"
|
|
42
42
|
|
|
43
43
|
// Channel arg key for ConfigSelector.
|
|
44
44
|
#define GRPC_ARG_CONFIG_SELECTOR "grpc.internal.config_selector"
|
|
@@ -100,7 +100,7 @@ class DefaultConfigSelector final : public ConfigSelector {
|
|
|
100
100
|
// The client channel code ensures that this will never be null.
|
|
101
101
|
// If neither the resolver nor the client application provide a
|
|
102
102
|
// config, a default empty config will be used.
|
|
103
|
-
|
|
103
|
+
GRPC_DCHECK(service_config_ != nullptr);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
UniqueTypeName name() const override {
|
|
@@ -110,7 +110,7 @@ class DefaultConfigSelector final : public ConfigSelector {
|
|
|
110
110
|
|
|
111
111
|
absl::Status GetCallConfig(GetCallConfigArgs args) override {
|
|
112
112
|
Slice* path = args.initial_metadata->get_pointer(HttpPathMetadata());
|
|
113
|
-
|
|
113
|
+
GRPC_CHECK_NE(path, nullptr);
|
|
114
114
|
auto* parsed_method_configs =
|
|
115
115
|
service_config_->GetMethodParsedConfigVector(path->c_slice());
|
|
116
116
|
args.service_config_call_data->SetServiceConfig(service_config_,
|
|
@@ -53,6 +53,8 @@ class SubchannelConnector : public InternallyRefCounted<SubchannelConnector> {
|
|
|
53
53
|
Transport* transport = nullptr;
|
|
54
54
|
// Channel args to be passed to filters.
|
|
55
55
|
ChannelArgs channel_args;
|
|
56
|
+
// Initial MAX_CONCURRENT_STREAMS value.
|
|
57
|
+
uint32_t max_concurrent_streams;
|
|
56
58
|
|
|
57
59
|
void Reset() {
|
|
58
60
|
if (transport != nullptr) {
|
|
@@ -22,9 +22,6 @@
|
|
|
22
22
|
#include <new>
|
|
23
23
|
#include <utility>
|
|
24
24
|
|
|
25
|
-
#include "absl/log/check.h"
|
|
26
|
-
#include "absl/log/log.h"
|
|
27
|
-
#include "absl/status/statusor.h"
|
|
28
25
|
#include "src/core/lib/channel/channel_args.h"
|
|
29
26
|
#include "src/core/lib/channel/channel_stack.h"
|
|
30
27
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
|
@@ -32,7 +29,10 @@
|
|
|
32
29
|
#include "src/core/lib/surface/channel_stack_type.h"
|
|
33
30
|
#include "src/core/lib/surface/lame_client.h"
|
|
34
31
|
#include "src/core/util/alloc.h"
|
|
32
|
+
#include "src/core/util/grpc_check.h"
|
|
35
33
|
#include "src/core/util/status_helper.h"
|
|
34
|
+
#include "absl/log/log.h"
|
|
35
|
+
#include "absl/status/statusor.h"
|
|
36
36
|
|
|
37
37
|
// Conversion between call and call stack.
|
|
38
38
|
#define CALL_TO_CALL_STACK(call) \
|
|
@@ -80,8 +80,8 @@ void DynamicFilters::Call::StartTransportStreamOpBatch(
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
void DynamicFilters::Call::SetAfterCallStackDestroy(grpc_closure* closure) {
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
GRPC_CHECK_EQ(after_call_stack_destroy_, nullptr);
|
|
84
|
+
GRPC_CHECK_NE(closure, nullptr);
|
|
85
85
|
after_call_stack_destroy_ = closure;
|
|
86
86
|
}
|
|
87
87
|
|
|
@@ -26,43 +26,6 @@
|
|
|
26
26
|
|
|
27
27
|
namespace grpc_core {
|
|
28
28
|
|
|
29
|
-
RefCountedPtr<LegacyGlobalSubchannelPool>
|
|
30
|
-
LegacyGlobalSubchannelPool::instance() {
|
|
31
|
-
static LegacyGlobalSubchannelPool* p = new LegacyGlobalSubchannelPool();
|
|
32
|
-
return p->RefAsSubclass<LegacyGlobalSubchannelPool>();
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::RegisterSubchannel(
|
|
36
|
-
const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) {
|
|
37
|
-
MutexLock lock(&mu_);
|
|
38
|
-
auto it = subchannel_map_.find(key);
|
|
39
|
-
if (it != subchannel_map_.end()) {
|
|
40
|
-
RefCountedPtr<Subchannel> existing = it->second->RefIfNonZero();
|
|
41
|
-
if (existing != nullptr) return existing;
|
|
42
|
-
}
|
|
43
|
-
subchannel_map_[key] = constructed.get();
|
|
44
|
-
return constructed;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
void LegacyGlobalSubchannelPool::UnregisterSubchannel(const SubchannelKey& key,
|
|
48
|
-
Subchannel* subchannel) {
|
|
49
|
-
MutexLock lock(&mu_);
|
|
50
|
-
auto it = subchannel_map_.find(key);
|
|
51
|
-
// delete only if key hasn't been re-registered to a different subchannel
|
|
52
|
-
// between strong-unreffing and unregistration of subchannel.
|
|
53
|
-
if (it != subchannel_map_.end() && it->second == subchannel) {
|
|
54
|
-
subchannel_map_.erase(it);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
RefCountedPtr<Subchannel> LegacyGlobalSubchannelPool::FindSubchannel(
|
|
59
|
-
const SubchannelKey& key) {
|
|
60
|
-
MutexLock lock(&mu_);
|
|
61
|
-
auto it = subchannel_map_.find(key);
|
|
62
|
-
if (it == subchannel_map_.end()) return nullptr;
|
|
63
|
-
return it->second->RefIfNonZero();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
29
|
RefCountedPtr<GlobalSubchannelPool> GlobalSubchannelPool::instance() {
|
|
67
30
|
static GlobalSubchannelPool* p = new GlobalSubchannelPool();
|
|
68
31
|
return p->RefAsSubclass<GlobalSubchannelPool>();
|
|
@@ -23,40 +23,13 @@
|
|
|
23
23
|
|
|
24
24
|
#include <map>
|
|
25
25
|
|
|
26
|
-
#include "absl/base/thread_annotations.h"
|
|
27
26
|
#include "src/core/client_channel/subchannel_pool_interface.h"
|
|
28
27
|
#include "src/core/util/ref_counted_ptr.h"
|
|
29
28
|
#include "src/core/util/sync.h"
|
|
29
|
+
#include "absl/base/thread_annotations.h"
|
|
30
30
|
|
|
31
31
|
namespace grpc_core {
|
|
32
32
|
|
|
33
|
-
// The global subchannel pool. It shares subchannels among channels. There
|
|
34
|
-
// should be only one instance of this class.
|
|
35
|
-
class LegacyGlobalSubchannelPool final : public SubchannelPoolInterface {
|
|
36
|
-
public:
|
|
37
|
-
// Gets the singleton instance.
|
|
38
|
-
static RefCountedPtr<LegacyGlobalSubchannelPool> instance();
|
|
39
|
-
|
|
40
|
-
// Implements interface methods.
|
|
41
|
-
RefCountedPtr<Subchannel> RegisterSubchannel(
|
|
42
|
-
const SubchannelKey& key, RefCountedPtr<Subchannel> constructed) override
|
|
43
|
-
ABSL_LOCKS_EXCLUDED(mu_);
|
|
44
|
-
void UnregisterSubchannel(const SubchannelKey& key,
|
|
45
|
-
Subchannel* subchannel) override
|
|
46
|
-
ABSL_LOCKS_EXCLUDED(mu_);
|
|
47
|
-
RefCountedPtr<Subchannel> FindSubchannel(const SubchannelKey& key) override
|
|
48
|
-
ABSL_LOCKS_EXCLUDED(mu_);
|
|
49
|
-
|
|
50
|
-
private:
|
|
51
|
-
LegacyGlobalSubchannelPool() {}
|
|
52
|
-
~LegacyGlobalSubchannelPool() override {}
|
|
53
|
-
|
|
54
|
-
// A map from subchannel key to subchannel.
|
|
55
|
-
std::map<SubchannelKey, Subchannel*> subchannel_map_ ABSL_GUARDED_BY(mu_);
|
|
56
|
-
// To protect subchannel_map_.
|
|
57
|
-
Mutex mu_;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
33
|
// The global subchannel pool. It shares subchannels among channels. There
|
|
61
34
|
// should be only one instance of this class.
|
|
62
35
|
class GlobalSubchannelPool final : public SubchannelPoolInterface {
|