grpc 1.75.0.pre1 → 1.76.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 +18 -5
- data/include/grpc/credentials.h +21 -5
- data/src/core/call/call_filters.cc +4 -4
- data/src/core/call/call_filters.h +36 -36
- data/src/core/call/call_spine.h +27 -27
- data/src/core/call/client_call.cc +6 -5
- data/src/core/call/filter_fusion.h +5 -5
- data/src/core/call/metadata_batch.h +3 -3
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/server_call.cc +4 -4
- data/src/core/call/server_call.h +1 -1
- data/src/core/channelz/channelz.cc +12 -18
- data/src/core/channelz/channelz.h +32 -16
- data/src/core/channelz/channelz_registry.h +11 -0
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +10 -1
- 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 +11 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
- data/src/core/channelz/ztrace_collector.h +247 -86
- data/src/core/client_channel/backup_poller.cc +5 -6
- data/src/core/client_channel/client_channel.cc +20 -13
- data/src/core/client_channel/client_channel_filter.cc +53 -45
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +3 -4
- data/src/core/client_channel/config_selector.h +3 -3
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +0 -27
- data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/subchannel.cc +8 -8
- data/src/core/client_channel/subchannel_stream_client.cc +4 -4
- data/src/core/config/config_vars.cc +30 -1
- data/src/core/config/config_vars.h +21 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +7 -7
- data/src/core/config/load_config.cc +12 -0
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_util.cc +4 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
- data/src/core/credentials/call/jwt/json_token.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
- data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
- data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
- data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
- 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/composite/composite_channel_credentials.cc +5 -5
- data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
- data/src/core/credentials/transport/security_connector.cc +5 -5
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
- data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
- data/src/core/credentials/transport/transport_credentials.cc +2 -2
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
- data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
- data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
- 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/server_auth_filter.cc +2 -2
- data/src/core/handshaker/handshaker.cc +3 -3
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
- data/src/core/handshaker/security/secure_endpoint.cc +16 -6
- data/src/core/handshaker/security/security_handshaker.cc +3 -3
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/channel/channel_stack.cc +8 -5
- data/src/core/lib/channel/channel_stack.h +3 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +69 -64
- data/src/core/lib/channel/promise_based_filter.h +16 -15
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/message_compress.cc +7 -7
- data/src/core/lib/event_engine/ares_resolver.cc +22 -20
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
- 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 +2 -2
- data/src/core/lib/event_engine/extensions/channelz.h +2 -2
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.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/timer_manager.cc +3 -3
- 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 +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
- data/src/core/lib/event_engine/windows/iocp.cc +10 -10
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
- data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
- data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
- data/src/core/lib/experiments/experiments.cc +105 -18
- data/src/core/lib/experiments/experiments.h +43 -11
- data/src/core/lib/iomgr/call_combiner.cc +3 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +8 -8
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +3 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +42 -42
- 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 +47 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
- data/src/core/lib/iomgr/tcp_windows.cc +7 -7
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/context.h +2 -2
- data/src/core/lib/promise/detail/join_state.h +9 -9
- data/src/core/lib/promise/detail/seq_state.h +13 -13
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/for_each.h +5 -5
- data/src/core/lib/promise/interceptor_list.h +2 -2
- data/src/core/lib/promise/latch.h +7 -7
- data/src/core/lib/promise/mpsc.cc +26 -26
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +4 -4
- data/src/core/lib/promise/party.cc +32 -25
- data/src/core/lib/promise/party.h +16 -19
- data/src/core/lib/promise/pipe.h +15 -15
- data/src/core/lib/promise/poll.h +5 -4
- data/src/core/lib/promise/promise.h +0 -2
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/status_flag.h +7 -7
- data/src/core/lib/promise/try_join.h +2 -2
- data/src/core/lib/promise/try_seq.h +2 -2
- 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/memory_quota.cc +45 -24
- data/src/core/lib/resource_quota/memory_quota.h +48 -16
- data/src/core/lib/resource_quota/telemetry.h +54 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- 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 +5 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +16 -14
- data/src/core/lib/surface/call.h +1 -1
- data/src/core/lib/surface/call_utils.cc +2 -2
- data/src/core/lib/surface/call_utils.h +2 -2
- data/src/core/lib/surface/channel.cc +4 -4
- data/src/core/lib/surface/channel_create.cc +10 -6
- data/src/core/lib/surface/channel_init.cc +80 -23
- data/src/core/lib/surface/channel_init.h +26 -11
- data/src/core/lib/surface/completion_queue.cc +17 -16
- 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 +12 -23
- data/src/core/lib/surface/filter_stack_call.h +3 -4
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +2 -2
- 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 +3 -3
- data/src/core/lib/transport/promise_endpoint.cc +3 -3
- data/src/core/lib/transport/promise_endpoint.h +8 -8
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/endpoint_list.cc +2 -2
- data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
- data/src/core/load_balancing/health_check_client.cc +4 -4
- data/src/core/load_balancing/health_check_client_internal.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +4 -4
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
- data/src/core/load_balancing/priority/priority.cc +23 -24
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
- data/src/core/load_balancing/rls/rls.cc +13 -13
- data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
- 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 +33 -26
- data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
- data/src/core/load_balancing/xds/cds.cc +76 -32
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
- data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
- 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 +33 -33
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
- data/src/core/resolver/endpoint_addresses.cc +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
- data/src/core/resolver/polling_resolver.cc +3 -3
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
- data/src/core/resolver/xds/xds_resolver.cc +9 -9
- data/src/core/server/server.cc +38 -38
- data/src/core/server/server_call_tracer_filter.h +4 -4
- data/src/core/server/server_config_selector_filter.cc +2 -2
- data/src/core/server/xds_server_config_fetcher.cc +9 -8
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +199 -22
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +719 -0
- data/src/core/telemetry/instrument.h +932 -0
- data/src/core/telemetry/metrics.cc +13 -5
- data/src/core/telemetry/metrics.h +3 -1
- data/src/core/telemetry/stats_data.cc +0 -19
- data/src/core/telemetry/stats_data.h +0 -19
- data/src/core/transport/auth_context.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
- 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 +39 -31
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +26 -25
- data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/gcp_metadata_query.cc +2 -2
- data/src/core/util/grpc_check.cc +22 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/latent_see.h +7 -4
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/memory_usage.h +16 -0
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted_ptr.h +5 -0
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
- data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
- data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
- data/src/core/xds/grpc/xds_client_grpc.h +4 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
- 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_route_config_parser.cc +6 -6
- data/src/core/xds/grpc/xds_routing.cc +3 -3
- data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
- data/src/core/xds/xds_client/lrs_client.cc +6 -6
- data/src/core/xds/xds_client/xds_client.cc +9 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- 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 +37 -2
@@ -21,13 +21,14 @@
|
|
21
21
|
#include <string>
|
22
22
|
#include <utility>
|
23
23
|
|
24
|
-
#include "absl/log/check.h"
|
25
24
|
#include "absl/status/status.h"
|
26
25
|
#include "absl/strings/str_cat.h"
|
27
26
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
28
27
|
#include "src/core/lib/slice/slice.h"
|
29
28
|
#include "src/core/lib/slice/slice_buffer.h"
|
30
29
|
#include "src/core/util/crash.h"
|
30
|
+
#include "src/core/util/grpc_check.h"
|
31
|
+
#include "src/core/util/memory_usage.h"
|
31
32
|
|
32
33
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
33
34
|
// framing code
|
@@ -119,7 +120,7 @@ uint16_t Read2b(const uint8_t* input) {
|
|
119
120
|
}
|
120
121
|
|
121
122
|
void Write3b(uint32_t x, uint8_t* output) {
|
122
|
-
|
123
|
+
GRPC_CHECK_LT(x, 16777216u);
|
123
124
|
output[0] = static_cast<uint8_t>(x >> 16);
|
124
125
|
output[1] = static_cast<uint8_t>(x >> 8);
|
125
126
|
output[2] = static_cast<uint8_t>(x);
|
@@ -206,9 +207,11 @@ class SerializeExtraBytesRequired {
|
|
206
207
|
|
207
208
|
class SerializeHeaderAndPayload {
|
208
209
|
public:
|
209
|
-
SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out
|
210
|
+
SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out,
|
211
|
+
SerializeReturn& serialize_return)
|
210
212
|
: out_(out),
|
211
|
-
extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes))
|
213
|
+
extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)),
|
214
|
+
serialize_return_(serialize_return) {}
|
212
215
|
|
213
216
|
void operator()(Http2DataFrame& frame) {
|
214
217
|
auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
|
@@ -219,6 +222,7 @@ class SerializeHeaderAndPayload {
|
|
219
222
|
.Serialize(hdr.begin());
|
220
223
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
221
224
|
out_.TakeAndAppend(frame.payload);
|
225
|
+
serialize_return_.should_reset_ping_clock = true;
|
222
226
|
}
|
223
227
|
|
224
228
|
void operator()(Http2HeaderFrame& frame) {
|
@@ -232,6 +236,7 @@ class SerializeHeaderAndPayload {
|
|
232
236
|
.Serialize(hdr.begin());
|
233
237
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
234
238
|
out_.TakeAndAppend(frame.payload);
|
239
|
+
serialize_return_.should_reset_ping_clock = true;
|
235
240
|
}
|
236
241
|
|
237
242
|
void operator()(Http2ContinuationFrame& frame) {
|
@@ -244,6 +249,7 @@ class SerializeHeaderAndPayload {
|
|
244
249
|
.Serialize(hdr.begin());
|
245
250
|
out_.AppendIndexed(Slice(std::move(hdr)));
|
246
251
|
out_.TakeAndAppend(frame.payload);
|
252
|
+
serialize_return_.should_reset_ping_clock = true;
|
247
253
|
}
|
248
254
|
|
249
255
|
void operator()(Http2RstStreamFrame& frame) {
|
@@ -311,6 +317,7 @@ class SerializeHeaderAndPayload {
|
|
311
317
|
}
|
312
318
|
Write31bits(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize);
|
313
319
|
out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
|
320
|
+
serialize_return_.should_reset_ping_clock = true;
|
314
321
|
}
|
315
322
|
|
316
323
|
void operator()(Http2SecurityFrame& frame) {
|
@@ -329,6 +336,7 @@ class SerializeHeaderAndPayload {
|
|
329
336
|
private:
|
330
337
|
SliceBuffer& out_;
|
331
338
|
MutableSlice extra_bytes_;
|
339
|
+
SerializeReturn& serialize_return_;
|
332
340
|
};
|
333
341
|
|
334
342
|
Http2Status StripPadding(const Http2FrameHeader& hdr, SliceBuffer& payload) {
|
@@ -642,23 +650,26 @@ std::string Http2FrameHeader::ToString() const {
|
|
642
650
|
", length=", length, "}");
|
643
651
|
}
|
644
652
|
|
645
|
-
|
653
|
+
SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
|
646
654
|
size_t buffer_needed = 0;
|
655
|
+
SerializeReturn serialize_return{/*should_reset_ping_clock=*/false};
|
647
656
|
for (auto& frame : frames) {
|
648
657
|
// Bytes needed for framing
|
649
658
|
buffer_needed += kFrameHeaderSize;
|
650
659
|
// Bytes needed for frame payload
|
651
660
|
buffer_needed += std::visit(SerializeExtraBytesRequired(), frame);
|
652
661
|
}
|
653
|
-
SerializeHeaderAndPayload serialize(buffer_needed, out);
|
662
|
+
SerializeHeaderAndPayload serialize(buffer_needed, out, serialize_return);
|
654
663
|
for (auto& frame : frames) {
|
655
664
|
std::visit(serialize, frame);
|
656
665
|
}
|
666
|
+
|
667
|
+
return serialize_return;
|
657
668
|
}
|
658
669
|
|
659
670
|
http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
660
671
|
const Http2FrameHeader& hdr, SliceBuffer payload) {
|
661
|
-
|
672
|
+
GRPC_CHECK(payload.Length() == hdr.length);
|
662
673
|
|
663
674
|
switch (static_cast<FrameType>(hdr.type)) {
|
664
675
|
case FrameType::kData:
|
@@ -688,9 +699,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
688
699
|
}
|
689
700
|
}
|
690
701
|
|
691
|
-
http2::Http2ErrorCode
|
702
|
+
http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(
|
703
|
+
const uint32_t error_code) {
|
692
704
|
if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
|
693
|
-
LOG(ERROR) << "
|
705
|
+
LOG(ERROR) << "RstFrameErrorCodeToHttp2ErrorCode: Invalid error code "
|
694
706
|
"received from RST_STREAM frame: "
|
695
707
|
<< error_code;
|
696
708
|
return http2::Http2ErrorCode::kInternalError;
|
@@ -698,11 +710,21 @@ http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
|
|
698
710
|
return static_cast<http2::Http2ErrorCode>(error_code);
|
699
711
|
}
|
700
712
|
|
713
|
+
uint32_t Http2ErrorCodeToRstFrameErrorCode(
|
714
|
+
const http2::Http2ErrorCode error_code) {
|
715
|
+
DCHECK_LE(static_cast<uint8_t>(error_code), http2::GetMaxHttp2ErrorCode());
|
716
|
+
return static_cast<uint32_t>(error_code);
|
717
|
+
}
|
718
|
+
|
719
|
+
size_t GetFrameMemoryUsage(const Http2Frame& frame) {
|
720
|
+
return MemoryUsageOf(frame);
|
721
|
+
}
|
722
|
+
|
701
723
|
///////////////////////////////////////////////////////////////////////////////
|
702
724
|
// GRPC Header
|
703
725
|
|
704
726
|
GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
|
705
|
-
|
727
|
+
GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
|
706
728
|
uint8_t buffer[kGrpcHeaderSizeInBytes];
|
707
729
|
payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
|
708
730
|
GrpcMessageHeader header;
|
@@ -224,6 +224,10 @@ struct Http2FrameHeader {
|
|
224
224
|
///////////////////////////////////////////////////////////////////////////////
|
225
225
|
// Parsing & serialization
|
226
226
|
|
227
|
+
struct SerializeReturn {
|
228
|
+
bool should_reset_ping_clock;
|
229
|
+
};
|
230
|
+
|
227
231
|
// Given a frame header and a payload, parse the payload into a frame and
|
228
232
|
// return it.
|
229
233
|
// If this function returns an error, that should be considered a connection
|
@@ -236,9 +240,13 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
|
|
236
240
|
|
237
241
|
// Serialize frame and append to out, leaves frames in an unknown state (may
|
238
242
|
// move things out of frames)
|
239
|
-
|
243
|
+
SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
|
240
244
|
|
241
|
-
http2::Http2ErrorCode
|
245
|
+
http2::Http2ErrorCode RstFrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
|
246
|
+
uint32_t Http2ErrorCodeToRstFrameErrorCode(http2::Http2ErrorCode error_code);
|
247
|
+
|
248
|
+
// Returns approximate memory usage of the frame.
|
249
|
+
size_t GetFrameMemoryUsage(const Http2Frame& frame);
|
242
250
|
|
243
251
|
///////////////////////////////////////////////////////////////////////////////
|
244
252
|
// GRPC Header
|
@@ -357,12 +365,18 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
|
|
357
365
|
"RFC9113: The initial value is 2^14 (16,384) octets. The value advertised"
|
358
366
|
" by an endpoint MUST be between this initial value and the maximum allowed"
|
359
367
|
" frame size (2^24)-1 or 16,777,215 octets), inclusive. ";
|
368
|
+
inline constexpr absl::string_view kSettingsTimeout =
|
369
|
+
"Settings timeout. The HTTP2 settings frame was not ACKed within the "
|
370
|
+
"timeout. Connection will be closed";
|
360
371
|
|
361
372
|
inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
|
362
373
|
inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
|
363
374
|
inline constexpr uint32_t kMinimumFrameSize = 16384;
|
364
375
|
inline constexpr uint32_t kMaximumFrameSize = 16777215;
|
365
376
|
|
377
|
+
// Default Initial Window Size as per RFC 9113 Section 6.5.2
|
378
|
+
inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
|
379
|
+
|
366
380
|
} // namespace RFC9113
|
367
381
|
} // namespace grpc_core
|
368
382
|
|
@@ -22,7 +22,6 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
#include <stdlib.h>
|
24
24
|
|
25
|
-
#include "absl/log/check.h"
|
26
25
|
#include "absl/status/status.h"
|
27
26
|
#include "absl/strings/str_format.h"
|
28
27
|
#include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
|
@@ -32,6 +31,7 @@
|
|
32
31
|
#include "src/core/lib/slice/slice_buffer.h"
|
33
32
|
#include "src/core/lib/transport/transport.h"
|
34
33
|
#include "src/core/telemetry/stats.h"
|
34
|
+
#include "src/core/util/grpc_check.h"
|
35
35
|
#include "src/core/util/status_helper.h"
|
36
36
|
|
37
37
|
absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
|
@@ -63,7 +63,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
|
|
63
63
|
|
64
64
|
hdr = GRPC_SLICE_MALLOC(header_size);
|
65
65
|
p = GRPC_SLICE_START_PTR(hdr);
|
66
|
-
|
66
|
+
GRPC_CHECK(write_bytes < (1 << 24));
|
67
67
|
*p++ = static_cast<uint8_t>(write_bytes >> 16);
|
68
68
|
*p++ = static_cast<uint8_t>(write_bytes >> 8);
|
69
69
|
*p++ = static_cast<uint8_t>(write_bytes);
|
@@ -24,11 +24,11 @@
|
|
24
24
|
#include <string.h>
|
25
25
|
|
26
26
|
#include "absl/base/attributes.h"
|
27
|
-
#include "absl/log/check.h"
|
28
27
|
#include "absl/status/status.h"
|
29
28
|
#include "absl/strings/str_format.h"
|
30
29
|
#include "absl/strings/string_view.h"
|
31
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;
|
@@ -134,7 +134,7 @@ grpc_error_handle grpc_chttp2_goaway_parser_parse(void* parser,
|
|
134
134
|
memcpy(p->debug_data + p->debug_pos, cur,
|
135
135
|
static_cast<size_t>(end - cur));
|
136
136
|
}
|
137
|
-
|
137
|
+
GRPC_CHECK((size_t)(end - cur) < UINT32_MAX - p->debug_pos);
|
138
138
|
p->debug_pos += static_cast<uint32_t>(end - cur);
|
139
139
|
p->state = GRPC_CHTTP2_GOAWAY_DEBUG;
|
140
140
|
if (is_last) {
|
@@ -161,7 +161,7 @@ void grpc_chttp2_goaway_append(
|
|
161
161
|
grpc_slice header = GRPC_SLICE_MALLOC(9 + 4 + 4);
|
162
162
|
uint8_t* p = GRPC_SLICE_START_PTR(header);
|
163
163
|
uint32_t frame_length;
|
164
|
-
|
164
|
+
GRPC_CHECK(GRPC_SLICE_LENGTH(debug_data) < UINT32_MAX - 4 - 4);
|
165
165
|
frame_length = 4 + 4 + static_cast<uint32_t> GRPC_SLICE_LENGTH(debug_data);
|
166
166
|
|
167
167
|
ztrace_collector->Append([last_stream_id, error_code, debug_data]() {
|
@@ -193,7 +193,7 @@ void grpc_chttp2_goaway_append(
|
|
193
193
|
*p++ = static_cast<uint8_t>(error_code >> 16);
|
194
194
|
*p++ = static_cast<uint8_t>(error_code >> 8);
|
195
195
|
*p++ = static_cast<uint8_t>(error_code);
|
196
|
-
|
196
|
+
GRPC_CHECK(p == GRPC_SLICE_END_PTR(header));
|
197
197
|
grpc_slice_buffer_add(slice_buffer, header);
|
198
198
|
grpc_slice_buffer_add(slice_buffer, debug_data);
|
199
199
|
}
|
@@ -26,7 +26,6 @@
|
|
26
26
|
#include <algorithm>
|
27
27
|
|
28
28
|
#include "absl/container/flat_hash_map.h"
|
29
|
-
#include "absl/log/check.h"
|
30
29
|
#include "absl/log/log.h"
|
31
30
|
#include "absl/status/status.h"
|
32
31
|
#include "absl/strings/str_format.h"
|
@@ -34,6 +33,7 @@
|
|
34
33
|
#include "src/core/ext/transport/chttp2/transport/ping_abuse_policy.h"
|
35
34
|
#include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
|
36
35
|
#include "src/core/lib/debug/trace.h"
|
36
|
+
#include "src/core/util/grpc_check.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);
|
@@ -89,7 +89,7 @@ grpc_error_handle grpc_chttp2_ping_parser_parse(void* parser,
|
|
89
89
|
}
|
90
90
|
|
91
91
|
if (p->byte == 8) {
|
92
|
-
|
92
|
+
GRPC_CHECK(is_last);
|
93
93
|
t->http2_ztrace_collector.Append(
|
94
94
|
grpc_core::H2PingTrace<true>{p->is_ack != 0, p->opaque_8bytes});
|
95
95
|
if (p->is_ack) {
|
@@ -22,7 +22,6 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
#include <stddef.h>
|
24
24
|
|
25
|
-
#include "absl/log/check.h"
|
26
25
|
#include "absl/log/log.h"
|
27
26
|
#include "absl/random/distributions.h"
|
28
27
|
#include "absl/status/status.h"
|
@@ -36,6 +35,7 @@
|
|
36
35
|
#include "src/core/ext/transport/chttp2/transport/ping_callbacks.h"
|
37
36
|
#include "src/core/lib/debug/trace.h"
|
38
37
|
#include "src/core/lib/experiments/experiments.h"
|
38
|
+
#include "src/core/util/grpc_check.h"
|
39
39
|
#include "src/core/util/shared_bit_gen.h"
|
40
40
|
#include "src/core/util/status_helper.h"
|
41
41
|
|
@@ -113,7 +113,7 @@ grpc_error_handle grpc_chttp2_rst_stream_parser_parse(void* parser,
|
|
113
113
|
s->call_tracer_wrapper.RecordIncomingBytes({framing_bytes, 0, 0});
|
114
114
|
|
115
115
|
if (p->byte == 4) {
|
116
|
-
|
116
|
+
GRPC_CHECK(is_last);
|
117
117
|
uint32_t reason = ((static_cast<uint32_t>(p->reason_bytes[0])) << 24) |
|
118
118
|
((static_cast<uint32_t>(p->reason_bytes[1])) << 16) |
|
119
119
|
((static_cast<uint32_t>(p->reason_bytes[2])) << 8) |
|
@@ -21,7 +21,6 @@
|
|
21
21
|
#include <grpc/support/port_platform.h>
|
22
22
|
#include <stddef.h>
|
23
23
|
|
24
|
-
#include "absl/log/check.h"
|
25
24
|
#include "absl/status/status.h"
|
26
25
|
#include "absl/strings/str_cat.h"
|
27
26
|
#include "absl/strings/str_format.h"
|
@@ -31,6 +30,7 @@
|
|
31
30
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
32
31
|
#include "src/core/ext/transport/chttp2/transport/stream_lists.h"
|
33
32
|
#include "src/core/telemetry/stats.h"
|
33
|
+
#include "src/core/util/grpc_check.h"
|
34
34
|
#include "src/core/util/time.h"
|
35
35
|
|
36
36
|
grpc_slice grpc_chttp2_window_update_create(
|
@@ -43,7 +43,7 @@ grpc_slice grpc_chttp2_window_update_create(
|
|
43
43
|
}
|
44
44
|
uint8_t* p = GRPC_SLICE_START_PTR(slice);
|
45
45
|
|
46
|
-
|
46
|
+
GRPC_CHECK(window_delta);
|
47
47
|
|
48
48
|
*p++ = 0;
|
49
49
|
*p++ = 0;
|
@@ -100,7 +100,7 @@ grpc_error_handle grpc_chttp2_window_update_parser_parse(
|
|
100
100
|
return GRPC_ERROR_CREATE(
|
101
101
|
absl::StrCat("invalid window update bytes: ", p->amount));
|
102
102
|
}
|
103
|
-
|
103
|
+
GRPC_CHECK(is_last);
|
104
104
|
|
105
105
|
t->http2_ztrace_collector.Append(grpc_core::H2WindowUpdateTrace<true>{
|
106
106
|
t->incoming_stream_id, received_update});
|
@@ -24,7 +24,6 @@
|
|
24
24
|
#include <cstddef>
|
25
25
|
#include <cstdint>
|
26
26
|
|
27
|
-
#include "absl/log/check.h"
|
28
27
|
#include "absl/log/log.h"
|
29
28
|
#include "src/core/call/metadata_batch.h"
|
30
29
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
@@ -33,6 +32,7 @@
|
|
33
32
|
#include "src/core/ext/transport/chttp2/transport/http2_status.h"
|
34
33
|
#include "src/core/lib/slice/slice.h"
|
35
34
|
#include "src/core/lib/slice/slice_buffer.h"
|
35
|
+
#include "src/core/util/grpc_check.h"
|
36
36
|
#include "src/core/util/shared_bit_gen.h"
|
37
37
|
|
38
38
|
// TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
|
@@ -88,7 +88,7 @@ class HeaderAssembler {
|
|
88
88
|
// The payload of the Http2HeaderFrame will be cleared in this function.
|
89
89
|
Http2Status AppendHeaderFrame(Http2HeaderFrame&& frame) {
|
90
90
|
// Validate input frame
|
91
|
-
|
91
|
+
GRPC_DCHECK_GT(frame.stream_id, 0u)
|
92
92
|
<< "RFC9113 : HEADERS frames MUST be associated with a stream.";
|
93
93
|
|
94
94
|
// Manage size constraints
|
@@ -145,7 +145,7 @@ class HeaderAssembler {
|
|
145
145
|
ASSEMBLER_LOG << "ReadMetadata " << buffer_.Length() << " Bytes.";
|
146
146
|
|
147
147
|
// Validate
|
148
|
-
|
148
|
+
GRPC_DCHECK_EQ(is_ready_, true);
|
149
149
|
|
150
150
|
// Generate the gRPC Metadata from buffer_
|
151
151
|
// RFC9113 : A receiver MUST terminate the connection with a connection
|
@@ -154,6 +154,14 @@ class HeaderAssembler {
|
|
154
154
|
// connection error (Section 5.4.1) of type COMPRESSION_ERROR.
|
155
155
|
Arena::PoolPtr<grpc_metadata_batch> metadata =
|
156
156
|
Arena::MakePooledForOverwrite<grpc_metadata_batch>();
|
157
|
+
// TODO(tjagtap) : [PH2][P5] : Currently the transport does not enforce
|
158
|
+
// setting allow_true_binary_metadata_ sent to the peer.
|
159
|
+
// Ideally Hpack code must validate and enforce this setting but it is not
|
160
|
+
// doing so now. Given that this is complex code and also common between
|
161
|
+
// CHTTP2 and PH2, we must do this as a standalone project with an
|
162
|
+
// experiment of its own. For now we just honour allow_true_binary_metadata_
|
163
|
+
// while writing frames for the peer on the write path. We do not enforce it
|
164
|
+
// on the read path.
|
157
165
|
parser.BeginFrame(
|
158
166
|
/*grpc_metadata_batch*/ metadata.get(), max_header_list_size_soft_limit,
|
159
167
|
max_header_list_size_hard_limit,
|
@@ -190,8 +198,12 @@ class HeaderAssembler {
|
|
190
198
|
// This value MUST be checked before calling ReadMetadata()
|
191
199
|
bool IsReady() const { return is_ready_; }
|
192
200
|
|
193
|
-
explicit HeaderAssembler(const uint32_t stream_id
|
194
|
-
|
201
|
+
explicit HeaderAssembler(const uint32_t stream_id,
|
202
|
+
const bool allow_true_binary_metadata_acked)
|
203
|
+
: header_in_progress_(false),
|
204
|
+
is_ready_(false),
|
205
|
+
allow_true_binary_metadata_acked_(allow_true_binary_metadata_acked),
|
206
|
+
stream_id_(stream_id) {}
|
195
207
|
|
196
208
|
~HeaderAssembler() = default;
|
197
209
|
|
@@ -209,6 +221,7 @@ class HeaderAssembler {
|
|
209
221
|
|
210
222
|
bool header_in_progress_;
|
211
223
|
bool is_ready_;
|
224
|
+
GRPC_UNUSED const bool allow_true_binary_metadata_acked_;
|
212
225
|
const uint32_t stream_id_;
|
213
226
|
SliceBuffer buffer_;
|
214
227
|
};
|
@@ -223,16 +236,17 @@ class HeaderDisassembler {
|
|
223
236
|
bool PrepareForSending(Arena::PoolPtr<grpc_metadata_batch>&& metadata,
|
224
237
|
HPackCompressor& encoder) {
|
225
238
|
// Validate disassembler state
|
226
|
-
|
239
|
+
GRPC_DCHECK(!is_done_);
|
227
240
|
// Prepare metadata for sending
|
228
|
-
return encoder.EncodeRawHeaders(*metadata.get(), buffer_
|
241
|
+
return encoder.EncodeRawHeaders(*metadata.get(), buffer_,
|
242
|
+
allow_true_binary_metadata_peer_);
|
229
243
|
}
|
230
244
|
|
231
245
|
Http2Frame GetNextFrame(const uint32_t max_frame_length,
|
232
246
|
bool& out_end_headers) {
|
233
247
|
if (buffer_.Length() == 0 || is_done_) {
|
234
|
-
|
235
|
-
|
248
|
+
GRPC_DCHECK(false) << "Calling code must check size using HasMoreData() "
|
249
|
+
"before GetNextFrame()";
|
236
250
|
}
|
237
251
|
out_end_headers = buffer_.Length() <= max_frame_length;
|
238
252
|
SliceBuffer temp;
|
@@ -260,11 +274,13 @@ class HeaderDisassembler {
|
|
260
274
|
// A separate HeaderDisassembler object MUST be made for Initial Metadata and
|
261
275
|
// Trailing Metadata
|
262
276
|
explicit HeaderDisassembler(const uint32_t stream_id,
|
263
|
-
const bool is_trailing_metadata
|
277
|
+
const bool is_trailing_metadata,
|
278
|
+
const bool allow_true_binary_metadata_peer)
|
264
279
|
: stream_id_(stream_id),
|
265
280
|
end_stream_(is_trailing_metadata),
|
266
281
|
did_send_header_frame_(false),
|
267
|
-
is_done_(false)
|
282
|
+
is_done_(false),
|
283
|
+
allow_true_binary_metadata_peer_(allow_true_binary_metadata_peer) {}
|
268
284
|
|
269
285
|
~HeaderDisassembler() = default;
|
270
286
|
|
@@ -280,7 +296,7 @@ class HeaderDisassembler {
|
|
280
296
|
const bool end_stream_;
|
281
297
|
bool did_send_header_frame_;
|
282
298
|
bool is_done_; // Protect against the same disassembler from being used twice
|
283
|
-
|
299
|
+
const bool allow_true_binary_metadata_peer_;
|
284
300
|
SliceBuffer buffer_;
|
285
301
|
};
|
286
302
|
|
@@ -25,7 +25,6 @@
|
|
25
25
|
#include <algorithm>
|
26
26
|
#include <cstdint>
|
27
27
|
|
28
|
-
#include "absl/log/check.h"
|
29
28
|
#include "absl/log/log.h"
|
30
29
|
#include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
|
31
30
|
#include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
|
@@ -36,6 +35,7 @@
|
|
36
35
|
#include "src/core/lib/surface/validate_metadata.h"
|
37
36
|
#include "src/core/lib/transport/timeout_encoding.h"
|
38
37
|
#include "src/core/util/crash.h"
|
38
|
+
#include "src/core/util/grpc_check.h"
|
39
39
|
|
40
40
|
namespace grpc_core {
|
41
41
|
|
@@ -61,7 +61,7 @@ static void FillHeader(uint8_t* p, uint8_t type, uint32_t id, size_t len,
|
|
61
61
|
// max_frame_size is derived from GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
62
62
|
// which has a max allowable value of 16777215 (see chttp_transport.cc).
|
63
63
|
// Thus, the following assert can be a debug assert.
|
64
|
-
|
64
|
+
GRPC_DCHECK_LE(len, 16777216u);
|
65
65
|
*p++ = static_cast<uint8_t>(len >> 16);
|
66
66
|
*p++ = static_cast<uint8_t>(len >> 8);
|
67
67
|
*p++ = static_cast<uint8_t>(len);
|
@@ -369,8 +369,10 @@ class HPackCompressor {
|
|
369
369
|
}
|
370
370
|
|
371
371
|
template <typename HeaderSet>
|
372
|
-
bool EncodeRawHeaders(const HeaderSet& headers, SliceBuffer& output
|
373
|
-
|
372
|
+
bool EncodeRawHeaders(const HeaderSet& headers, SliceBuffer& output,
|
373
|
+
bool allow_true_binary_metadata) {
|
374
|
+
hpack_encoder_detail::Encoder encoder(this, allow_true_binary_metadata,
|
375
|
+
output);
|
374
376
|
headers.Encode(&encoder);
|
375
377
|
return !encoder.saw_encoding_errors();
|
376
378
|
}
|
@@ -18,15 +18,15 @@
|
|
18
18
|
|
19
19
|
#include <algorithm>
|
20
20
|
|
21
|
-
#include "
|
21
|
+
#include "src/core/util/grpc_check.h"
|
22
22
|
|
23
23
|
namespace grpc_core {
|
24
24
|
|
25
25
|
uint32_t HPackEncoderTable::AllocateIndex(size_t element_size) {
|
26
|
-
|
26
|
+
GRPC_DCHECK_GE(element_size, 32u);
|
27
27
|
|
28
28
|
uint32_t new_index = tail_remote_index_ + table_elems_ + 1;
|
29
|
-
|
29
|
+
GRPC_DCHECK_LE(element_size, MaxEntrySize());
|
30
30
|
|
31
31
|
if (element_size > max_table_size_) {
|
32
32
|
while (table_size_ > 0) {
|
@@ -41,7 +41,7 @@ uint32_t HPackEncoderTable::AllocateIndex(size_t element_size) {
|
|
41
41
|
while (table_size_ + element_size > max_table_size_) {
|
42
42
|
EvictOne();
|
43
43
|
}
|
44
|
-
|
44
|
+
GRPC_CHECK(table_elems_ < elem_size_.size());
|
45
45
|
elem_size_[new_index % elem_size_.size()] =
|
46
46
|
static_cast<uint16_t>(element_size);
|
47
47
|
table_size_ += element_size;
|
@@ -70,17 +70,17 @@ bool HPackEncoderTable::SetMaxSize(uint32_t max_table_size) {
|
|
70
70
|
|
71
71
|
void HPackEncoderTable::EvictOne() {
|
72
72
|
tail_remote_index_++;
|
73
|
-
|
74
|
-
|
73
|
+
GRPC_CHECK_GT(tail_remote_index_, 0u);
|
74
|
+
GRPC_CHECK_GT(table_elems_, 0u);
|
75
75
|
auto removing_size = elem_size_[tail_remote_index_ % elem_size_.size()];
|
76
|
-
|
76
|
+
GRPC_CHECK(table_size_ >= removing_size);
|
77
77
|
table_size_ -= removing_size;
|
78
78
|
table_elems_--;
|
79
79
|
}
|
80
80
|
|
81
81
|
void HPackEncoderTable::Rebuild(uint32_t capacity) {
|
82
82
|
decltype(elem_size_) new_elem_size(capacity);
|
83
|
-
|
83
|
+
GRPC_CHECK_LE(table_elems_, capacity);
|
84
84
|
for (uint32_t i = 0; i < table_elems_; i++) {
|
85
85
|
uint32_t ofs = tail_remote_index_ + i + 1;
|
86
86
|
new_elem_size[ofs % capacity] = elem_size_[ofs % elem_size_.size()];
|
@@ -17,11 +17,11 @@
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
#include <stddef.h>
|
19
19
|
|
20
|
-
#include "absl/log/check.h"
|
21
20
|
#include "absl/strings/str_format.h"
|
22
21
|
#include "src/core/ext/transport/chttp2/transport/hpack_constants.h"
|
23
22
|
#include "src/core/lib/iomgr/error.h"
|
24
23
|
#include "src/core/lib/slice/slice.h"
|
24
|
+
#include "src/core/util/grpc_check.h"
|
25
25
|
#include "src/core/util/status_helper.h"
|
26
26
|
|
27
27
|
namespace grpc_core {
|
@@ -52,7 +52,7 @@ class MetadataSizeLimitExceededEncoder {
|
|
52
52
|
};
|
53
53
|
|
54
54
|
absl::Status MakeStreamError(absl::Status error) {
|
55
|
-
|
55
|
+
GRPC_DCHECK(!error.ok());
|
56
56
|
return grpc_error_set_int(std::move(error), StatusIntProperty::kStreamId, 0);
|
57
57
|
}
|
58
58
|
} // namespace
|
@@ -23,13 +23,13 @@
|
|
23
23
|
#include <string>
|
24
24
|
#include <utility>
|
25
25
|
|
26
|
-
#include "absl/log/check.h"
|
27
26
|
#include "absl/status/status.h"
|
28
27
|
#include "absl/strings/str_cat.h"
|
29
28
|
#include "absl/strings/string_view.h"
|
30
29
|
#include "src/core/call/metadata_batch.h"
|
31
30
|
#include "src/core/lib/surface/validate_metadata.h"
|
32
31
|
#include "src/core/util/crash.h"
|
32
|
+
#include "src/core/util/grpc_check.h"
|
33
33
|
#include "src/core/util/ref_counted.h"
|
34
34
|
#include "src/core/util/ref_counted_ptr.h"
|
35
35
|
|
@@ -191,7 +191,7 @@ class HpackParseResult {
|
|
191
191
|
|
192
192
|
static HpackParseResult InvalidMetadataError(ValidateMetadataResult result,
|
193
193
|
absl::string_view key) {
|
194
|
-
|
194
|
+
GRPC_DCHECK(result != ValidateMetadataResult::kOk);
|
195
195
|
HpackParseResult p{HpackParseStatus::kInvalidMetadata};
|
196
196
|
p.state_->key = std::string(key);
|
197
197
|
p.state_->validate_metadata_result = result;
|