grpc 1.76.0 → 1.78.0.pre1
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 +11 -5
- data/include/grpc/credentials.h +6 -1
- data/include/grpc/event_engine/memory_allocator.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 +1 -1
- data/src/core/call/call_filters.h +175 -1
- data/src/core/call/call_spine.cc +1 -1
- data/src/core/call/call_spine.h +27 -5
- data/src/core/call/channelz_context.h +30 -0
- data/src/core/call/client_call.cc +43 -5
- data/src/core/call/client_call.h +6 -3
- data/src/core/call/filter_fusion.h +4 -4
- 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 +7 -6
- 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 +1 -1
- data/src/core/call/security_context.h +1 -1
- data/src/core/call/server_call.cc +1 -1
- data/src/core/call/server_call.h +5 -3
- 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 +13 -11
- data/src/core/channelz/channelz.h +41 -6
- data/src/core/channelz/channelz_registry.cc +2 -2
- data/src/core/channelz/channelz_registry.h +42 -2
- data/src/core/channelz/property_list.h +6 -4
- data/src/core/channelz/v2tov1/convert.cc +6 -6
- data/src/core/channelz/v2tov1/legacy_api.cc +4 -5
- data/src/core/channelz/v2tov1/property_list.cc +1 -1
- data/src/core/channelz/ztrace_collector.h +14 -2
- data/src/core/client_channel/backup_poller.cc +2 -2
- 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 +124 -71
- 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 +393 -663
- data/src/core/client_channel/client_channel_filter.h +57 -150
- data/src/core/client_channel/client_channel_internal.h +5 -1
- 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 +2 -2
- data/src/core/client_channel/connector.h +2 -0
- data/src/core/client_channel/dynamic_filters.cc +2 -2
- data/src/core/client_channel/global_subchannel_pool.h +1 -1
- data/src/core/client_channel/lb_metadata.h +1 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +3 -5
- data/src/core/client_channel/load_balanced_call_destination.h +1 -1
- data/src/core/client_channel/retry_filter.cc +2 -2
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -7
- 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 +106 -17
- 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 +1 -1
- data/src/core/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/config/config_vars.cc +8 -2
- data/src/core/config/config_vars.h +5 -0
- data/src/core/config/core_configuration.h +1 -1
- data/src/core/config/load_config.cc +1 -1
- data/src/core/credentials/call/call_credentials.h +2 -2
- 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 +3 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +2 -2
- data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +6 -6
- 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 +6 -6
- 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 +2 -2
- 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 +4 -4
- data/src/core/credentials/call/jwt/jwt_credentials.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
- data/src/core/credentials/call/jwt/jwt_verifier.cc +5 -5
- 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 +29 -60
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
- data/src/core/credentials/call/plugin/plugin_credentials.cc +4 -4
- 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 +3 -3
- data/src/core/credentials/transport/alts/alts_security_connector.cc +3 -3
- 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 +1 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +1 -1
- 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 +2 -2
- 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 +5 -5
- data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +5 -11
- data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
- data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
- data/src/core/credentials/transport/local/local_security_connector.cc +5 -5
- data/src/core/credentials/transport/security_connector.cc +1 -1
- data/src/core/credentials/transport/security_connector.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +5 -5
- data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +1 -1
- data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +1 -1
- 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 +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +3 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +1 -1
- 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 +4 -4
- data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +1 -1
- data/src/core/credentials/transport/tls/tls_security_connector.cc +4 -4
- data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
- data/src/core/credentials/transport/transport_credentials.cc +1 -1
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- 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 +5 -5
- 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 +1 -1
- 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 +3 -3
- data/src/core/ext/filters/http/message_compress/compression_filter.h +21 -2
- 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 +7 -7
- 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/client/chttp2_connector.cc +50 -37
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -17
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +210 -60
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +213 -78
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +46 -1
- data/src/core/ext/transport/chttp2/transport/frame.cc +147 -21
- data/src/core/ext/transport/chttp2/transport/frame.h +44 -10
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -5
- 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 +3 -3
- 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 +175 -51
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1177 -511
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +264 -174
- 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 -6
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +320 -82
- data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +286 -7
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +187 -19
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +57 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +25 -5
- 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 +24 -15
- data/src/core/ext/transport/chttp2/transport/parsing.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +7 -3
- 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 +139 -59
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +225 -98
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +5 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +27 -11
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -2
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +8 -5
- 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 +3 -3
- 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 +5 -5
- 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 +11 -11
- 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 +4 -4
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +7 -7
- data/src/core/handshaker/security/secure_endpoint.cc +15 -5
- data/src/core/handshaker/security/security_handshaker.cc +8 -5
- data/src/core/handshaker/security/security_handshaker.h +1 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
- 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 +22 -21
- data/src/core/lib/channel/channel_stack.h +5 -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 +7 -13
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +63 -8
- data/src/core/lib/channel/promise_based_filter.h +23 -8
- data/src/core/lib/compression/compression_internal.cc +4 -4
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +1 -1
- 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 +8 -8
- data/src/core/lib/event_engine/ares_resolver.h +4 -4
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- 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 +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +1 -1
- 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 +1 -1
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
- 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 +4 -4
- 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 +5 -5
- 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 +1 -1
- 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 +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +6 -6
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +7 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +7 -4
- 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 +4 -4
- 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 +1 -1
- 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.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 +2 -2
- 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/tcp_socket_utils.cc +4 -4
- 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 +4 -4
- 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 +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
- data/src/core/lib/event_engine/windows/iocp.cc +1 -1
- 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 +1 -1
- data/src/core/lib/event_engine/windows/win_socket.h +2 -2
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -5
- data/src/core/lib/event_engine/windows/windows_engine.cc +4 -4
- data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
- 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 +174 -48
- data/src/core/lib/experiments/experiments.h +76 -24
- data/src/core/lib/iomgr/buffer_list.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +1 -1
- 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 +1 -1
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- 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 +4 -4
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
- 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 +5 -5
- 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 +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +1 -1
- data/src/core/lib/iomgr/polling_entity.cc +1 -1
- 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 +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_posix.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_windows.cc +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- 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 +2 -2
- data/src/core/lib/promise/activity.h +5 -4
- 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 +1 -1
- data/src/core/lib/promise/detail/join_state.h +1 -1
- 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 +3 -3
- data/src/core/lib/promise/detail/status.h +1 -1
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
- data/src/core/lib/promise/for_each.h +3 -3
- 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 +3 -3
- data/src/core/lib/promise/latch.h +2 -2
- 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 +5 -4
- data/src/core/lib/promise/observable.h +2 -2
- data/src/core/lib/promise/party.cc +14 -8
- data/src/core/lib/promise/party.h +11 -4
- data/src/core/lib/promise/pipe.h +16 -2
- data/src/core/lib/promise/poll.h +2 -2
- data/src/core/lib/promise/promise.h +2 -2
- data/src/core/lib/promise/sleep.h +1 -1
- data/src/core/lib/promise/status_flag.h +2 -2
- data/src/core/lib/promise/try_join.h +3 -3
- data/src/core/lib/promise/try_seq.h +3 -3
- 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/connection_quota.h +1 -1
- data/src/core/lib/resource_quota/memory_quota.cc +3 -3
- data/src/core/lib/resource_quota/memory_quota.h +9 -5
- 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 +1 -0
- data/src/core/lib/resource_quota/thread_quota.h +1 -1
- data/src/core/lib/security/authorization/audit_logging.cc +3 -3
- 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_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 +1 -1
- 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/call.cc +42 -14
- data/src/core/lib/surface/call.h +12 -5
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/call_utils.cc +5 -5
- data/src/core/lib/surface/call_utils.h +83 -18
- data/src/core/lib/surface/channel.cc +2 -1
- data/src/core/lib/surface/channel.h +13 -3
- data/src/core/lib/surface/channel_create.cc +2 -2
- data/src/core/lib/surface/channel_create.h +1 -1
- data/src/core/lib/surface/channel_init.cc +5 -5
- data/src/core/lib/surface/channel_init.h +4 -2
- data/src/core/lib/surface/completion_queue.cc +4 -4
- data/src/core/lib/surface/filter_stack_call.cc +13 -8
- data/src/core/lib/surface/filter_stack_call.h +3 -3
- 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 +3 -3
- 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 +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- 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 +1 -1
- data/src/core/lib/transport/promise_endpoint.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- 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 +4 -4
- 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 +4 -4
- 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 +13 -24
- 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 +9 -5
- data/src/core/load_balancing/health_check_client_internal.h +3 -3
- 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 +2 -2
- data/src/core/load_balancing/lb_policy_registry.h +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +7 -3
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +7 -15
- data/src/core/load_balancing/pick_first/pick_first.cc +48 -18
- data/src/core/load_balancing/priority/priority.cc +6 -6
- data/src/core/load_balancing/ring_hash/ring_hash.cc +8 -8
- data/src/core/load_balancing/rls/rls.cc +10 -10
- data/src/core/load_balancing/round_robin/round_robin.cc +7 -7
- data/src/core/load_balancing/subchannel_interface.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +1 -1
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +9 -15
- data/src/core/load_balancing/weighted_target/weighted_target.cc +9 -9
- data/src/core/load_balancing/xds/cds.cc +5 -5
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +22 -39
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
- data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
- 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 +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +6 -6
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +2 -2
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +8 -8
- 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 +4 -4
- data/src/core/resolver/endpoint_addresses.h +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +3 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.cc +5 -5
- 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 +1 -1
- 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 +2 -2
- data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
- data/src/core/resolver/xds/xds_resolver.cc +16 -13
- 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 +9 -5
- 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 +5 -1
- data/src/core/server/server_config_selector.h +2 -2
- data/src/core/server/server_config_selector_filter.cc +3 -3
- 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 +10 -10
- 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 +2 -2
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/telemetry/call_tracer.h +2 -2
- data/src/core/telemetry/default_tcp_tracer.h +3 -3
- data/src/core/telemetry/histogram.h +1 -1
- data/src/core/telemetry/instrument.cc +550 -270
- data/src/core/telemetry/instrument.h +301 -128
- data/src/core/telemetry/metrics.cc +2 -0
- data/src/core/telemetry/metrics.h +33 -4
- data/src/core/telemetry/stats.h +2 -2
- data/src/core/telemetry/stats_data.cc +1 -1
- data/src/core/telemetry/stats_data.h +2 -2
- data/src/core/transport/auth_context.cc +1 -1
- 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 +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +9 -7
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +1 -1
- 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 +1 -1
- 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 +9 -1
- 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 +15 -2
- data/src/core/tsi/fake_transport_security.cc +2 -1
- data/src/core/tsi/local_transport_security.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +6 -6
- data/src/core/tsi/ssl_transport_security.h +1 -1
- data/src/core/tsi/ssl_transport_security_utils.cc +2 -2
- 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/crash.h +1 -1
- data/src/core/util/dual_ref_counted.h +2 -2
- data/src/core/util/event_log.cc +1 -1
- data/src/core/util/event_log.h +3 -3
- data/src/core/util/gcp_metadata_query.cc +5 -5
- data/src/core/util/gcp_metadata_query.h +2 -2
- data/src/core/util/grpc_check.cc +2 -0
- data/src/core/util/grpc_check.h +1 -1
- 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 +3 -3
- 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 +1 -1
- 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 +192 -24
- 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 +1 -1
- data/src/core/util/matchers.h +1 -1
- data/src/core/util/memory_usage.h +3 -3
- 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/stat.cc +2 -2
- data/src/core/util/posix/thd.cc +2 -2
- data/src/core/util/posix/tmpfile.cc +2 -2
- data/src/core/util/ref_counted.h +2 -2
- data/src/core/util/ref_counted_ptr.h +1 -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/unique_ptr_with_bitset.h +1 -1
- 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 +2 -2
- data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
- data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
- data/src/core/xds/grpc/xds_client_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- 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 +5 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- 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 +5 -5
- 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.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 +6 -6
- data/src/core/xds/grpc/xds_listener_parser.h +1 -1
- data/src/core/xds/grpc/xds_matcher.cc +1 -1
- data/src/core/xds/grpc/xds_matcher.h +3 -3
- data/src/core/xds/grpc/xds_matcher_input.h +1 -1
- data/src/core/xds/grpc/xds_metadata.cc +1 -1
- 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 +8 -8
- data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
- data/src/core/xds/grpc/xds_routing.cc +4 -4
- 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 +1 -1
- data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
- data/src/core/xds/xds_client/lrs_client.cc +3 -3
- 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 +8 -8
- 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_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
- metadata +16 -6
|
@@ -20,15 +20,18 @@
|
|
|
20
20
|
#include <cstdint>
|
|
21
21
|
#include <string>
|
|
22
22
|
#include <utility>
|
|
23
|
+
#include <vector>
|
|
23
24
|
|
|
24
|
-
#include "
|
|
25
|
-
#include "absl/strings/str_cat.h"
|
|
25
|
+
#include "src/core/call/message.h"
|
|
26
26
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
27
|
+
#include "src/core/lib/debug/trace_impl.h"
|
|
27
28
|
#include "src/core/lib/slice/slice.h"
|
|
28
29
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
29
30
|
#include "src/core/util/crash.h"
|
|
30
31
|
#include "src/core/util/grpc_check.h"
|
|
31
32
|
#include "src/core/util/memory_usage.h"
|
|
33
|
+
#include "absl/log/log.h"
|
|
34
|
+
#include "absl/strings/str_cat.h"
|
|
32
35
|
|
|
33
36
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
|
34
37
|
// framing code
|
|
@@ -39,6 +42,9 @@ using grpc_core::http2::ValueOrHttp2Status;
|
|
|
39
42
|
|
|
40
43
|
namespace grpc_core {
|
|
41
44
|
|
|
45
|
+
#define GRPC_HTTP2_FRAME_DLOG \
|
|
46
|
+
DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
|
|
47
|
+
|
|
42
48
|
///////////////////////////////////////////////////////////////////////////////
|
|
43
49
|
// Settings Frame Validations
|
|
44
50
|
|
|
@@ -214,6 +220,11 @@ class SerializeHeaderAndPayload {
|
|
|
214
220
|
serialize_return_(serialize_return) {}
|
|
215
221
|
|
|
216
222
|
void operator()(Http2DataFrame& frame) {
|
|
223
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
224
|
+
<< "SerializeHeaderAndPayload Http2DataFrame Type:0 { stream_id:"
|
|
225
|
+
<< frame.stream_id << ", end_stream:" << frame.end_stream
|
|
226
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
227
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
|
|
217
228
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
218
229
|
Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
|
|
219
230
|
static_cast<uint8_t>(FrameType::kData),
|
|
@@ -226,6 +237,12 @@ class SerializeHeaderAndPayload {
|
|
|
226
237
|
}
|
|
227
238
|
|
|
228
239
|
void operator()(Http2HeaderFrame& frame) {
|
|
240
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
241
|
+
<< "SerializeHeaderAndPayload Http2HeaderFrame Type:1 { stream_id:"
|
|
242
|
+
<< frame.stream_id << ", end_headers:" << frame.end_headers
|
|
243
|
+
<< ", end_stream:" << frame.end_stream
|
|
244
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
245
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
|
|
229
246
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
230
247
|
Http2FrameHeader{
|
|
231
248
|
static_cast<uint32_t>(frame.payload.Length()),
|
|
@@ -240,6 +257,13 @@ class SerializeHeaderAndPayload {
|
|
|
240
257
|
}
|
|
241
258
|
|
|
242
259
|
void operator()(Http2ContinuationFrame& frame) {
|
|
260
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2ContinuationFrame "
|
|
261
|
+
"Type:9 { stream_id:"
|
|
262
|
+
<< frame.stream_id
|
|
263
|
+
<< ", end_headers:" << frame.end_headers
|
|
264
|
+
<< ", payload_length:" << frame.payload.Length()
|
|
265
|
+
<< ", payload:" << MaybeTruncatePayload(frame.payload)
|
|
266
|
+
<< "}";
|
|
243
267
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
244
268
|
Http2FrameHeader{
|
|
245
269
|
static_cast<uint32_t>(frame.payload.Length()),
|
|
@@ -253,6 +277,9 @@ class SerializeHeaderAndPayload {
|
|
|
253
277
|
}
|
|
254
278
|
|
|
255
279
|
void operator()(Http2RstStreamFrame& frame) {
|
|
280
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
281
|
+
<< "SerializeHeaderAndPayload Http2RstStreamFrame Type:3 { stream_id:"
|
|
282
|
+
<< frame.stream_id << ", error_code:" << frame.error_code << "}";
|
|
256
283
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
|
|
257
284
|
Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kRstStream), 0,
|
|
258
285
|
frame.stream_id}
|
|
@@ -262,6 +289,10 @@ class SerializeHeaderAndPayload {
|
|
|
262
289
|
}
|
|
263
290
|
|
|
264
291
|
void operator()(Http2SettingsFrame& frame) {
|
|
292
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
293
|
+
<< "SerializeHeaderAndPayload Http2SettingsFrame Type:4 { ack:"
|
|
294
|
+
<< frame.ack << ", length:" << frame.settings.size() << ", settings:["
|
|
295
|
+
<< DebugStringSettings(frame.settings) << "] }";
|
|
265
296
|
// Six bytes per setting (u16 id, u32 value)
|
|
266
297
|
const size_t payload_size = 6 * frame.settings.size();
|
|
267
298
|
auto hdr_and_payload =
|
|
@@ -280,6 +311,9 @@ class SerializeHeaderAndPayload {
|
|
|
280
311
|
}
|
|
281
312
|
|
|
282
313
|
void operator()(Http2PingFrame& frame) {
|
|
314
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
315
|
+
<< "SerializeHeaderAndPayload Http2PingFrame Type:6 { ack:" << frame.ack
|
|
316
|
+
<< ", opaque:" << frame.opaque << "}";
|
|
283
317
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
|
|
284
318
|
Http2FrameHeader{8, static_cast<uint8_t>(FrameType::kPing),
|
|
285
319
|
MaybeFlag(frame.ack, kFlagAck), 0}
|
|
@@ -289,6 +323,10 @@ class SerializeHeaderAndPayload {
|
|
|
289
323
|
}
|
|
290
324
|
|
|
291
325
|
void operator()(Http2GoawayFrame& frame) {
|
|
326
|
+
GRPC_HTTP2_FRAME_DLOG
|
|
327
|
+
<< "SerializeHeaderAndPayload Http2GoawayFrame Type:7 { last_stream_id:"
|
|
328
|
+
<< frame.last_stream_id << ", error_code:" << frame.error_code
|
|
329
|
+
<< ", debug_data:" << frame.debug_data.as_string_view() << "}";
|
|
292
330
|
auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
|
|
293
331
|
Http2FrameHeader{static_cast<uint32_t>(8 + frame.debug_data.length()),
|
|
294
332
|
static_cast<uint8_t>(FrameType::kGoaway), 0, 0}
|
|
@@ -306,6 +344,10 @@ class SerializeHeaderAndPayload {
|
|
|
306
344
|
}
|
|
307
345
|
|
|
308
346
|
void operator()(Http2WindowUpdateFrame& frame) {
|
|
347
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2WindowUpdateFrame "
|
|
348
|
+
"Type:8 { stream_id:"
|
|
349
|
+
<< frame.stream_id
|
|
350
|
+
<< ", increment:" << frame.increment << "}";
|
|
309
351
|
auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
|
|
310
352
|
Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kWindowUpdate), 0,
|
|
311
353
|
frame.stream_id}
|
|
@@ -321,6 +363,9 @@ class SerializeHeaderAndPayload {
|
|
|
321
363
|
}
|
|
322
364
|
|
|
323
365
|
void operator()(Http2SecurityFrame& frame) {
|
|
366
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2SecurityFrame "
|
|
367
|
+
"Type:200 { payload_length:"
|
|
368
|
+
<< frame.payload.Length() << ", payload: redacted}";
|
|
324
369
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
|
325
370
|
Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
|
|
326
371
|
static_cast<uint8_t>(FrameType::kCustomSecurity), 0, 0}
|
|
@@ -331,9 +376,21 @@ class SerializeHeaderAndPayload {
|
|
|
331
376
|
|
|
332
377
|
void operator()(Http2UnknownFrame&) { Crash("unreachable"); }
|
|
333
378
|
|
|
334
|
-
void operator()(Http2EmptyFrame&) {
|
|
379
|
+
void operator()(Http2EmptyFrame&) {
|
|
380
|
+
GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2EmptyFrame {}";
|
|
381
|
+
}
|
|
335
382
|
|
|
336
383
|
private:
|
|
384
|
+
std::string DebugStringSettings(
|
|
385
|
+
const std::vector<Http2SettingsFrame::Setting>& settings) {
|
|
386
|
+
std::string settings_str;
|
|
387
|
+
for (const auto& setting : settings) {
|
|
388
|
+
absl::StrAppend(&settings_str, " {id:", setting.id,
|
|
389
|
+
", value:", setting.value, "}");
|
|
390
|
+
}
|
|
391
|
+
return settings_str;
|
|
392
|
+
}
|
|
393
|
+
|
|
337
394
|
SliceBuffer& out_;
|
|
338
395
|
MutableSlice extra_bytes_;
|
|
339
396
|
SerializeReturn& serialize_return_;
|
|
@@ -390,6 +447,8 @@ ValueOrHttp2Status<Http2Frame> ParseDataFrame(const Http2FrameHeader& hdr,
|
|
|
390
447
|
std::move(payload)});
|
|
391
448
|
}
|
|
392
449
|
|
|
450
|
+
// This function MUST NOT return a Http2StreamError. Doing this will cause the
|
|
451
|
+
// HPACK state to be corrupted.
|
|
393
452
|
ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
|
|
394
453
|
SliceBuffer& payload) {
|
|
395
454
|
if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
|
|
@@ -426,6 +485,8 @@ ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
|
|
|
426
485
|
ExtractFlag(hdr.flags, kFlagEndStream), std::move(payload)});
|
|
427
486
|
}
|
|
428
487
|
|
|
488
|
+
// This function MUST NOT return a Http2StreamError. Doing this will cause the
|
|
489
|
+
// HPACK state to be corrupted.
|
|
429
490
|
ValueOrHttp2Status<Http2Frame> ParseContinuationFrame(
|
|
430
491
|
const Http2FrameHeader& hdr, SliceBuffer& payload) {
|
|
431
492
|
if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
|
|
@@ -577,15 +638,14 @@ ValueOrHttp2Status<Http2Frame> ParseWindowUpdateFrame(
|
|
|
577
638
|
payload.CopyToBuffer(buffer);
|
|
578
639
|
const uint32_t window_size_increment = Read31bits(buffer);
|
|
579
640
|
if (GPR_UNLIKELY(window_size_increment == 0)) {
|
|
580
|
-
if
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
}
|
|
641
|
+
// According to RFC9113, if window_size_increment == 0, and (stream id != 0)
|
|
642
|
+
// the receiver MUST treat this as a stream error of type PROTOCOL_ERROR.
|
|
643
|
+
// However we will be treating this too as a connection error
|
|
644
|
+
// 1. To be consistent with CHTTP2 transport
|
|
645
|
+
// 2. To be less lenient as compared to the RFC9113 for security reasons.
|
|
646
|
+
return Http2Status::Http2ConnectionError(
|
|
647
|
+
Http2ErrorCode::kProtocolError,
|
|
648
|
+
absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
|
|
589
649
|
}
|
|
590
650
|
return ValueOrHttp2Status<Http2Frame>(
|
|
591
651
|
Http2WindowUpdateFrame{hdr.stream_id, window_size_increment});
|
|
@@ -699,10 +759,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
|
699
759
|
}
|
|
700
760
|
}
|
|
701
761
|
|
|
702
|
-
http2::Http2ErrorCode
|
|
762
|
+
http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(
|
|
703
763
|
const uint32_t error_code) {
|
|
704
764
|
if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
|
|
705
|
-
LOG(ERROR) << "
|
|
765
|
+
LOG(ERROR) << "FrameErrorCodeToHttp2ErrorCode: Invalid error code "
|
|
706
766
|
"received from RST_STREAM frame: "
|
|
707
767
|
<< error_code;
|
|
708
768
|
return http2::Http2ErrorCode::kInternalError;
|
|
@@ -710,9 +770,10 @@ http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(
|
|
|
710
770
|
return static_cast<http2::Http2ErrorCode>(error_code);
|
|
711
771
|
}
|
|
712
772
|
|
|
713
|
-
uint32_t
|
|
773
|
+
uint32_t Http2ErrorCodeToFrameErrorCode(
|
|
714
774
|
const http2::Http2ErrorCode error_code) {
|
|
715
|
-
|
|
775
|
+
GRPC_DCHECK_LE(static_cast<uint8_t>(error_code),
|
|
776
|
+
http2::GetMaxHttp2ErrorCode());
|
|
716
777
|
return static_cast<uint32_t>(error_code);
|
|
717
778
|
}
|
|
718
779
|
|
|
@@ -722,28 +783,73 @@ size_t GetFrameMemoryUsage(const Http2Frame& frame) {
|
|
|
722
783
|
|
|
723
784
|
///////////////////////////////////////////////////////////////////////////////
|
|
724
785
|
// GRPC Header
|
|
786
|
+
namespace {
|
|
787
|
+
ValueOrHttp2Status<uint32_t> ParseGrpcMessageFlags(const uint8_t flags) {
|
|
788
|
+
switch (flags) {
|
|
789
|
+
case kGrpcMessageHeaderNoFlags:
|
|
790
|
+
return 0u;
|
|
791
|
+
case kGrpcMessageHeaderWriteInternalCompress:
|
|
792
|
+
return GRPC_WRITE_INTERNAL_COMPRESS;
|
|
793
|
+
default:
|
|
794
|
+
LOG(ERROR) << "Invalid gRPC header flags: "
|
|
795
|
+
<< static_cast<uint32_t>(flags);
|
|
796
|
+
return Http2Status::Http2StreamError(
|
|
797
|
+
Http2ErrorCode::kInternalError,
|
|
798
|
+
absl::StrCat("Invalid gRPC header flags: ", flags));
|
|
799
|
+
}
|
|
800
|
+
}
|
|
725
801
|
|
|
726
|
-
|
|
802
|
+
uint8_t SerializeGrpcMessageFlags(const uint32_t flags) {
|
|
803
|
+
return (flags & GRPC_WRITE_INTERNAL_COMPRESS)
|
|
804
|
+
? kGrpcMessageHeaderWriteInternalCompress
|
|
805
|
+
: kGrpcMessageHeaderNoFlags;
|
|
806
|
+
}
|
|
807
|
+
} // namespace
|
|
808
|
+
|
|
809
|
+
ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(SliceBuffer& payload) {
|
|
727
810
|
GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
|
|
728
811
|
uint8_t buffer[kGrpcHeaderSizeInBytes];
|
|
729
812
|
payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
|
|
730
813
|
GrpcMessageHeader header;
|
|
731
|
-
|
|
814
|
+
ValueOrHttp2Status<uint32_t> message_flags = ParseGrpcMessageFlags(buffer[0]);
|
|
815
|
+
if (!message_flags.IsOk()) {
|
|
816
|
+
return message_flags.TakeStatus(std::move(message_flags));
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
header.flags = message_flags.value();
|
|
732
820
|
header.length = Read4b(buffer + 1);
|
|
733
821
|
return header;
|
|
734
822
|
}
|
|
735
823
|
|
|
736
|
-
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const
|
|
824
|
+
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint32_t flags,
|
|
737
825
|
const uint32_t length) {
|
|
738
826
|
uint8_t* frame_hdr = payload.AddTiny(kGrpcHeaderSizeInBytes);
|
|
739
|
-
frame_hdr[0] = flags;
|
|
827
|
+
frame_hdr[0] = SerializeGrpcMessageFlags(flags);
|
|
740
828
|
Write4b(length, frame_hdr + 1);
|
|
741
829
|
}
|
|
742
830
|
|
|
743
831
|
Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
|
|
744
832
|
const bool incoming_header_in_progress,
|
|
745
833
|
const uint32_t incoming_header_stream_id,
|
|
746
|
-
Http2FrameHeader& current_frame_header
|
|
834
|
+
Http2FrameHeader& current_frame_header,
|
|
835
|
+
const uint32_t last_stream_id,
|
|
836
|
+
const bool is_client,
|
|
837
|
+
const bool is_first_settings_processed) {
|
|
838
|
+
if (GPR_UNLIKELY(!is_first_settings_processed)) {
|
|
839
|
+
// This check works only because we pause the read loop after reading the
|
|
840
|
+
// first SETTINGS frame.
|
|
841
|
+
const bool is_settings_frame =
|
|
842
|
+
(current_frame_header.type ==
|
|
843
|
+
static_cast<uint8_t>(FrameType::kSettings) &&
|
|
844
|
+
!ExtractFlag(current_frame_header.flags, kFlagAck));
|
|
845
|
+
if (GPR_UNLIKELY(!is_settings_frame)) {
|
|
846
|
+
return Http2Status::Http2ConnectionError(
|
|
847
|
+
Http2ErrorCode::kProtocolError,
|
|
848
|
+
std::string(is_client ? RFC9113::kFirstSettingsFrameClient
|
|
849
|
+
: RFC9113::kFirstSettingsFrameServer));
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
|
|
747
853
|
if (GPR_UNLIKELY(current_frame_header.length > max_frame_size_setting)) {
|
|
748
854
|
return Http2Status::Http2ConnectionError(
|
|
749
855
|
Http2ErrorCode::kFrameSizeError,
|
|
@@ -760,8 +866,28 @@ Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
|
|
|
760
866
|
Http2ErrorCode::kProtocolError,
|
|
761
867
|
std::string(RFC9113::kAssemblerContiguousSequenceError));
|
|
762
868
|
}
|
|
869
|
+
// If a frame is received with a stream id larger than the last stream id sent
|
|
870
|
+
// by the transport, it is a protocol error. This condition holds for clients
|
|
871
|
+
// as in gRPC only clients can initiate a stream. last_stream_id is the stream
|
|
872
|
+
// id of the last stream created by the transport. If no streams were created
|
|
873
|
+
// by the transport, last_stream_id is 0.
|
|
874
|
+
// TODO(akshitpatel) : [PH2][P3] : Revisit this for server.
|
|
875
|
+
if (is_client && current_frame_header.stream_id > last_stream_id) {
|
|
876
|
+
return Http2Status::Http2ConnectionError(
|
|
877
|
+
Http2ErrorCode::kProtocolError, std::string(RFC9113::kUnknownStreamId));
|
|
878
|
+
}
|
|
763
879
|
// TODO(tjagtap) : [PH2][P2]:Consider validating MAX_CONCURRENT_STREAMS here
|
|
880
|
+
// for server.
|
|
764
881
|
return Http2Status::Ok();
|
|
765
882
|
}
|
|
766
883
|
|
|
884
|
+
std::string MaybeTruncatePayload(SliceBuffer& payload, const uint32_t length) {
|
|
885
|
+
if (payload.Length() <= length) {
|
|
886
|
+
return payload.JoinIntoString();
|
|
887
|
+
}
|
|
888
|
+
std::string result(length, '\0');
|
|
889
|
+
payload.CopyFirstNBytesIntoBuffer(length, result.data());
|
|
890
|
+
return absl::StrCat(result, "<clipped>");
|
|
891
|
+
}
|
|
892
|
+
|
|
767
893
|
} // namespace grpc_core
|
|
@@ -22,16 +22,20 @@
|
|
|
22
22
|
#include <variant>
|
|
23
23
|
#include <vector>
|
|
24
24
|
|
|
25
|
-
#include "absl/status/statusor.h"
|
|
26
|
-
#include "absl/strings/string_view.h"
|
|
27
|
-
#include "absl/types/span.h"
|
|
28
25
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
29
26
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
30
27
|
#include "src/core/lib/slice/slice.h"
|
|
31
28
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
29
|
+
#include "absl/status/statusor.h"
|
|
30
|
+
#include "absl/strings/string_view.h"
|
|
31
|
+
#include "absl/types/span.h"
|
|
32
32
|
|
|
33
33
|
namespace grpc_core {
|
|
34
34
|
|
|
35
|
+
// Prints the first `length` bytes of the payload. If the payload is longer than
|
|
36
|
+
// `length`, it appends "<clipped>" to the output.
|
|
37
|
+
std::string MaybeTruncatePayload(SliceBuffer& payload, uint32_t length = 15);
|
|
38
|
+
|
|
35
39
|
///////////////////////////////////////////////////////////////////////////////
|
|
36
40
|
// Frame types
|
|
37
41
|
//
|
|
@@ -242,8 +246,8 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
|
242
246
|
// move things out of frames)
|
|
243
247
|
SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
|
|
244
248
|
|
|
245
|
-
http2::Http2ErrorCode
|
|
246
|
-
uint32_t
|
|
249
|
+
http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
|
|
250
|
+
uint32_t Http2ErrorCodeToFrameErrorCode(http2::Http2ErrorCode error_code);
|
|
247
251
|
|
|
248
252
|
// Returns approximate memory usage of the frame.
|
|
249
253
|
size_t GetFrameMemoryUsage(const Http2Frame& frame);
|
|
@@ -252,19 +256,22 @@ size_t GetFrameMemoryUsage(const Http2Frame& frame);
|
|
|
252
256
|
// GRPC Header
|
|
253
257
|
|
|
254
258
|
constexpr uint8_t kGrpcHeaderSizeInBytes = 5;
|
|
259
|
+
constexpr uint8_t kGrpcMessageHeaderNoFlags = 0;
|
|
260
|
+
constexpr uint8_t kGrpcMessageHeaderWriteInternalCompress = 1;
|
|
255
261
|
|
|
256
262
|
struct GrpcMessageHeader {
|
|
257
|
-
|
|
263
|
+
uint32_t flags = 0;
|
|
258
264
|
uint32_t length = 0;
|
|
259
265
|
};
|
|
260
266
|
|
|
261
267
|
// If the payload SliceBuffer is too small to hold a gRPC header, this function
|
|
262
268
|
// will crash. The calling function MUST ensure that the payload SliceBuffer
|
|
263
269
|
// has length greater than or equal to the gRPC header.
|
|
264
|
-
GrpcMessageHeader ExtractGrpcHeader(
|
|
270
|
+
http2::ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(
|
|
271
|
+
SliceBuffer& payload);
|
|
265
272
|
|
|
266
|
-
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload,
|
|
267
|
-
|
|
273
|
+
void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, uint32_t flags,
|
|
274
|
+
uint32_t length);
|
|
268
275
|
|
|
269
276
|
///////////////////////////////////////////////////////////////////////////////
|
|
270
277
|
// Validations
|
|
@@ -275,7 +282,9 @@ http2::Http2Status ValidateSettingsValues(
|
|
|
275
282
|
http2::Http2Status ValidateFrameHeader(uint32_t max_frame_size_setting,
|
|
276
283
|
bool incoming_header_in_progress,
|
|
277
284
|
uint32_t incoming_header_stream_id,
|
|
278
|
-
Http2FrameHeader& current_frame_header
|
|
285
|
+
Http2FrameHeader& current_frame_header,
|
|
286
|
+
uint32_t last_stream_id, bool is_client,
|
|
287
|
+
bool is_first_settings_processed);
|
|
279
288
|
|
|
280
289
|
///////////////////////////////////////////////////////////////////////////////
|
|
281
290
|
// RFC9113 Related Strings and Consts
|
|
@@ -309,6 +318,9 @@ inline constexpr absl::string_view kSettingsStreamIdMustBeZero =
|
|
|
309
318
|
"RFC9113: If an endpoint receives a SETTINGS frame whose Stream "
|
|
310
319
|
"Identifier field is anything other than 0x00, the endpoint MUST respond "
|
|
311
320
|
"with a connection error";
|
|
321
|
+
inline constexpr absl::string_view kUnknownStreamId =
|
|
322
|
+
"RFC9113: An endpoint that receives an unexpected stream identifier MUST "
|
|
323
|
+
"respond with a connection error";
|
|
312
324
|
|
|
313
325
|
// Frame length related errors
|
|
314
326
|
inline constexpr absl::string_view kRstStreamLength4 =
|
|
@@ -368,6 +380,18 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
|
|
|
368
380
|
inline constexpr absl::string_view kSettingsTimeout =
|
|
369
381
|
"Settings timeout. The HTTP2 settings frame was not ACKed within the "
|
|
370
382
|
"timeout. Connection will be closed";
|
|
383
|
+
inline constexpr absl::string_view kLastStreamClosed =
|
|
384
|
+
"Closing last stream and cannot create any more streams.";
|
|
385
|
+
inline constexpr absl::string_view kFirstSettingsFrameClient =
|
|
386
|
+
"RFC9113: The server connection preface consists of a potentially empty "
|
|
387
|
+
"SETTINGS frame that MUST be the first frame the server sends in the "
|
|
388
|
+
"HTTP/2 connection. Clients and servers MUST treat an invalid connection "
|
|
389
|
+
"preface as a connection error of type PROTOCOL_ERROR.";
|
|
390
|
+
inline constexpr absl::string_view kFirstSettingsFrameServer =
|
|
391
|
+
"RFC9113: The client connection preface starts with a sequence of 24 "
|
|
392
|
+
"octets. This sequence is followed by a SETTINGS frame, which MAY be "
|
|
393
|
+
"empty. Clients and servers MUST treat an invalid connection preface as a "
|
|
394
|
+
"connection error of type PROTOCOL_ERROR.";
|
|
371
395
|
|
|
372
396
|
inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
|
|
373
397
|
inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
|
|
@@ -378,6 +402,16 @@ inline constexpr uint32_t kMaximumFrameSize = 16777215;
|
|
|
378
402
|
inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
|
|
379
403
|
|
|
380
404
|
} // namespace RFC9113
|
|
405
|
+
|
|
406
|
+
namespace GrpcErrors {
|
|
407
|
+
inline constexpr absl::string_view kTooManyMetadata =
|
|
408
|
+
"gRPC Error : A gRPC server can send upto 1 initial metadata followed by "
|
|
409
|
+
"upto 1 trailing metadata.";
|
|
410
|
+
inline constexpr absl::string_view kOutOfOrderDataFrame =
|
|
411
|
+
"gRPC Error : DATA frames must follow initial metadata and precede "
|
|
412
|
+
"trailing metadata.";
|
|
413
|
+
} // namespace GrpcErrors
|
|
414
|
+
|
|
381
415
|
} // namespace grpc_core
|
|
382
416
|
|
|
383
417
|
#endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H
|
|
@@ -22,8 +22,6 @@
|
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
|
23
23
|
#include <stdlib.h>
|
|
24
24
|
|
|
25
|
-
#include "absl/status/status.h"
|
|
26
|
-
#include "absl/strings/str_format.h"
|
|
27
25
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
28
26
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
29
27
|
#include "src/core/lib/experiments/experiments.h"
|
|
@@ -33,6 +31,8 @@
|
|
|
33
31
|
#include "src/core/telemetry/stats.h"
|
|
34
32
|
#include "src/core/util/grpc_check.h"
|
|
35
33
|
#include "src/core/util/status_helper.h"
|
|
34
|
+
#include "absl/status/status.h"
|
|
35
|
+
#include "absl/strings/str_format.h"
|
|
36
36
|
|
|
37
37
|
absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
|
|
38
38
|
uint32_t stream_id,
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
#include <grpc/support/port_platform.h>
|
|
26
26
|
#include <stdint.h>
|
|
27
27
|
|
|
28
|
-
#include "absl/status/status.h"
|
|
29
28
|
#include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
|
|
30
29
|
#include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
|
|
31
30
|
#include "src/core/lib/iomgr/error.h"
|
|
@@ -33,6 +32,7 @@
|
|
|
33
32
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
34
33
|
#include "src/core/lib/transport/transport.h"
|
|
35
34
|
#include "src/core/telemetry/call_tracer.h"
|
|
35
|
+
#include "absl/status/status.h"
|
|
36
36
|
|
|
37
37
|
// start processing a new data frame
|
|
38
38
|
absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
#include <grpc/support/port_platform.h>
|
|
24
24
|
#include <string.h>
|
|
25
25
|
|
|
26
|
+
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
27
|
+
#include "src/core/util/grpc_check.h"
|
|
26
28
|
#include "absl/base/attributes.h"
|
|
27
29
|
#include "absl/status/status.h"
|
|
28
30
|
#include "absl/strings/str_format.h"
|
|
29
31
|
#include "absl/strings/string_view.h"
|
|
30
|
-
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
31
|
-
#include "src/core/util/grpc_check.h"
|
|
32
32
|
|
|
33
33
|
void grpc_chttp2_goaway_parser_init(grpc_chttp2_goaway_parser* p) {
|
|
34
34
|
p->debug_data = nullptr;
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
|
|
26
26
|
#include <algorithm>
|
|
27
27
|
|
|
28
|
-
#include "absl/container/flat_hash_map.h"
|
|
29
|
-
#include "absl/log/log.h"
|
|
30
|
-
#include "absl/status/status.h"
|
|
31
|
-
#include "absl/strings/str_format.h"
|
|
32
28
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
33
29
|
#include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
|
|
34
30
|
#include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
|
|
35
31
|
#include "src/core/lib/debug/trace.h"
|
|
36
32
|
#include "src/core/util/grpc_check.h"
|
|
33
|
+
#include "absl/container/flat_hash_map.h"
|
|
34
|
+
#include "absl/log/log.h"
|
|
35
|
+
#include "absl/status/status.h"
|
|
36
|
+
#include "absl/strings/str_format.h"
|
|
37
37
|
|
|
38
38
|
grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
|
|
39
39
|
grpc_slice slice = GRPC_SLICE_MALLOC(9 + 8);
|
|
@@ -22,11 +22,6 @@
|
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
|
23
23
|
#include <stddef.h>
|
|
24
24
|
|
|
25
|
-
#include "absl/log/log.h"
|
|
26
|
-
#include "absl/random/distributions.h"
|
|
27
|
-
#include "absl/status/status.h"
|
|
28
|
-
#include "absl/strings/str_cat.h"
|
|
29
|
-
#include "absl/strings/str_format.h"
|
|
30
25
|
#include "src/core/call/metadata_batch.h"
|
|
31
26
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
32
27
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
|
@@ -38,6 +33,11 @@
|
|
|
38
33
|
#include "src/core/util/grpc_check.h"
|
|
39
34
|
#include "src/core/util/shared_bit_gen.h"
|
|
40
35
|
#include "src/core/util/status_helper.h"
|
|
36
|
+
#include "absl/log/log.h"
|
|
37
|
+
#include "absl/random/distributions.h"
|
|
38
|
+
#include "absl/status/status.h"
|
|
39
|
+
#include "absl/strings/str_cat.h"
|
|
40
|
+
#include "absl/strings/str_format.h"
|
|
41
41
|
|
|
42
42
|
using grpc_core::http2::Http2ErrorCode;
|
|
43
43
|
|
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
#include <cstddef>
|
|
20
20
|
#include <cstdint>
|
|
21
21
|
|
|
22
|
-
#include "absl/status/status.h"
|
|
23
22
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
|
24
23
|
#include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
|
|
25
24
|
#include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
|
|
26
25
|
#include "src/core/lib/slice/slice.h"
|
|
27
26
|
#include "src/core/lib/slice/slice_buffer.h"
|
|
28
27
|
#include "src/core/lib/transport/transport_framing_endpoint_extension.h"
|
|
28
|
+
#include "absl/status/status.h"
|
|
29
29
|
|
|
30
30
|
absl::Status grpc_chttp2_security_frame_parser_parse(void* parser,
|
|
31
31
|
grpc_chttp2_transport* t,
|
|
@@ -24,10 +24,6 @@
|
|
|
24
24
|
|
|
25
25
|
#include <string>
|
|
26
26
|
|
|
27
|
-
#include "absl/base/attributes.h"
|
|
28
|
-
#include "absl/log/log.h"
|
|
29
|
-
#include "absl/status/status.h"
|
|
30
|
-
#include "absl/strings/str_format.h"
|
|
31
27
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
32
28
|
#include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
|
|
33
29
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
|
@@ -40,6 +36,10 @@
|
|
|
40
36
|
#include "src/core/telemetry/stats.h"
|
|
41
37
|
#include "src/core/util/debug_location.h"
|
|
42
38
|
#include "src/core/util/useful.h"
|
|
39
|
+
#include "absl/base/attributes.h"
|
|
40
|
+
#include "absl/log/log.h"
|
|
41
|
+
#include "absl/status/status.h"
|
|
42
|
+
#include "absl/strings/str_format.h"
|
|
43
43
|
|
|
44
44
|
using grpc_core::http2::Http2ErrorCode;
|
|
45
45
|
|
|
@@ -135,21 +135,13 @@ grpc_error_handle grpc_chttp2_settings_parser_parse(void* p,
|
|
|
135
135
|
t->http2_ztrace_collector.Append(
|
|
136
136
|
[]() { return grpc_core::H2SettingsTrace<false>{true, {}}; });
|
|
137
137
|
*parser->target_settings = *parser->incoming_settings;
|
|
138
|
+
t->MaybeNotifyStateWatcherOfPeerMaxConcurrentStreamsLocked();
|
|
138
139
|
t->num_pending_induced_frames++;
|
|
139
140
|
grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
|
|
140
141
|
grpc_chttp2_initiate_write(t,
|
|
141
142
|
GRPC_CHTTP2_INITIATE_WRITE_SETTINGS_ACK);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
grpc_endpoint_delete_from_pollset_set(
|
|
145
|
-
t->ep.get(), t->interested_parties_until_recv_settings);
|
|
146
|
-
t->interested_parties_until_recv_settings = nullptr;
|
|
147
|
-
}
|
|
148
|
-
grpc_core::ExecCtx::Run(DEBUG_LOCATION,
|
|
149
|
-
t->notify_on_receive_settings,
|
|
150
|
-
absl::OkStatus());
|
|
151
|
-
t->notify_on_receive_settings = nullptr;
|
|
152
|
-
}
|
|
143
|
+
t->MaybeNotifyOnReceiveSettingsLocked(
|
|
144
|
+
parser->target_settings->max_concurrent_streams());
|
|
153
145
|
}
|
|
154
146
|
return absl::OkStatus();
|
|
155
147
|
}
|
|
@@ -21,9 +21,6 @@
|
|
|
21
21
|
#include <grpc/support/port_platform.h>
|
|
22
22
|
#include <stddef.h>
|
|
23
23
|
|
|
24
|
-
#include "absl/status/status.h"
|
|
25
|
-
#include "absl/strings/str_cat.h"
|
|
26
|
-
#include "absl/strings/str_format.h"
|
|
27
24
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
|
28
25
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
|
29
26
|
#include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
|
|
@@ -32,6 +29,9 @@
|
|
|
32
29
|
#include "src/core/telemetry/stats.h"
|
|
33
30
|
#include "src/core/util/grpc_check.h"
|
|
34
31
|
#include "src/core/util/time.h"
|
|
32
|
+
#include "absl/status/status.h"
|
|
33
|
+
#include "absl/strings/str_cat.h"
|
|
34
|
+
#include "absl/strings/str_format.h"
|
|
35
35
|
|
|
36
36
|
grpc_slice grpc_chttp2_window_update_create(
|
|
37
37
|
uint32_t id, uint32_t window_delta,
|