grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -27,6 +27,7 @@
|
|
27
27
|
#include <string>
|
28
28
|
|
29
29
|
#include "absl/strings/string_view.h"
|
30
|
+
#include "absl/types/optional.h"
|
30
31
|
|
31
32
|
#include <grpc/event_engine/memory_allocator.h>
|
32
33
|
#include <grpc/impl/codegen/grpc_types.h>
|
@@ -34,7 +35,6 @@
|
|
34
35
|
|
35
36
|
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
36
37
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
37
|
-
#include "src/core/ext/transport/chttp2/transport/frame_data.h"
|
38
38
|
#include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
|
39
39
|
#include "src/core/ext/transport/chttp2/transport/frame_ping.h"
|
40
40
|
#include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
|
@@ -48,8 +48,6 @@
|
|
48
48
|
#include "src/core/lib/debug/trace.h"
|
49
49
|
#include "src/core/lib/gprpp/bitset.h"
|
50
50
|
#include "src/core/lib/gprpp/debug_location.h"
|
51
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
52
|
-
#include "src/core/lib/gprpp/orphanable.h"
|
53
51
|
#include "src/core/lib/gprpp/ref_counted.h"
|
54
52
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
55
53
|
#include "src/core/lib/gprpp/time.h"
|
@@ -60,10 +58,11 @@
|
|
60
58
|
#include "src/core/lib/iomgr/timer.h"
|
61
59
|
#include "src/core/lib/resource_quota/arena.h"
|
62
60
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
63
|
-
#include "src/core/lib/
|
61
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
64
62
|
#include "src/core/lib/transport/connectivity_state.h"
|
65
63
|
#include "src/core/lib/transport/metadata_batch.h"
|
66
64
|
#include "src/core/lib/transport/transport.h"
|
65
|
+
#include "src/core/lib/transport/transport_fwd.h"
|
67
66
|
#include "src/core/lib/transport/transport_impl.h"
|
68
67
|
|
69
68
|
namespace grpc_core {
|
@@ -229,76 +228,6 @@ typedef struct grpc_chttp2_write_cb {
|
|
229
228
|
struct grpc_chttp2_write_cb* next;
|
230
229
|
} grpc_chttp2_write_cb;
|
231
230
|
|
232
|
-
namespace grpc_core {
|
233
|
-
|
234
|
-
class Chttp2IncomingByteStream : public ByteStream {
|
235
|
-
public:
|
236
|
-
Chttp2IncomingByteStream(grpc_chttp2_transport* transport,
|
237
|
-
grpc_chttp2_stream* stream, uint32_t frame_size,
|
238
|
-
uint32_t flags);
|
239
|
-
|
240
|
-
void Orphan() override;
|
241
|
-
|
242
|
-
bool Next(size_t max_size_hint, grpc_closure* on_complete) override;
|
243
|
-
grpc_error_handle Pull(grpc_slice* slice) override;
|
244
|
-
void Shutdown(grpc_error_handle error) override;
|
245
|
-
|
246
|
-
// TODO(roth): When I converted this class to C++, I wanted to make it
|
247
|
-
// inherit from RefCounted or InternallyRefCounted instead of continuing
|
248
|
-
// to use its own custom ref-counting code. However, that would require
|
249
|
-
// using multiple inheritance, which sucks in general. And to make matters
|
250
|
-
// worse, it causes problems with our New<> and Delete<> wrappers.
|
251
|
-
// Specifically, unless RefCounted is first in the list of parent classes,
|
252
|
-
// it will see a different value of the address of the object than the one
|
253
|
-
// we actually allocated, in which case gpr_free() will be called on a
|
254
|
-
// different address than the one we got from gpr_malloc(), thus causing a
|
255
|
-
// crash. Given the fragility of depending on that, as well as a desire to
|
256
|
-
// avoid multiple inheritance in general, I've decided to leave this
|
257
|
-
// alone for now. We can revisit this once we're able to link against
|
258
|
-
// libc++, at which point we can eliminate New<> and Delete<> and
|
259
|
-
// switch to std::shared_ptr<>.
|
260
|
-
void Ref() { refs_.Ref(); }
|
261
|
-
void Unref() {
|
262
|
-
if (GPR_UNLIKELY(refs_.Unref())) {
|
263
|
-
delete this;
|
264
|
-
}
|
265
|
-
}
|
266
|
-
|
267
|
-
void PublishError(grpc_error_handle error);
|
268
|
-
|
269
|
-
grpc_error_handle Push(const grpc_slice& slice, grpc_slice* slice_out);
|
270
|
-
|
271
|
-
grpc_error_handle Finished(grpc_error_handle error, bool reset_on_error);
|
272
|
-
|
273
|
-
uint32_t remaining_bytes() const { return remaining_bytes_; }
|
274
|
-
|
275
|
-
private:
|
276
|
-
static void NextLocked(void* arg, grpc_error_handle error_ignored);
|
277
|
-
static void OrphanLocked(void* arg, grpc_error_handle error_ignored);
|
278
|
-
|
279
|
-
grpc_chttp2_transport* transport_; // Immutable.
|
280
|
-
grpc_chttp2_stream* stream_; // Immutable.
|
281
|
-
|
282
|
-
RefCount refs_;
|
283
|
-
|
284
|
-
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
285
|
-
* Accessed only by application thread when stream->pending_byte_stream ==
|
286
|
-
* true */
|
287
|
-
uint32_t remaining_bytes_;
|
288
|
-
|
289
|
-
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
290
|
-
* Accessed only by application thread when stream->pending_byte_stream ==
|
291
|
-
* true */
|
292
|
-
struct {
|
293
|
-
grpc_closure closure;
|
294
|
-
size_t max_size_hint;
|
295
|
-
grpc_closure* on_complete;
|
296
|
-
} next_action_;
|
297
|
-
grpc_closure destroy_action_;
|
298
|
-
};
|
299
|
-
|
300
|
-
} // namespace grpc_core
|
301
|
-
|
302
231
|
typedef enum {
|
303
232
|
GRPC_CHTTP2_KEEPALIVE_STATE_WAITING,
|
304
233
|
GRPC_CHTTP2_KEEPALIVE_STATE_PINGING,
|
@@ -427,11 +356,7 @@ struct grpc_chttp2_transport {
|
|
427
356
|
/** parser for goaway frames */
|
428
357
|
grpc_chttp2_goaway_parser goaway_parser;
|
429
358
|
|
430
|
-
grpc_core::
|
431
|
-
grpc_core::chttp2::TransportFlowControlBase,
|
432
|
-
grpc_core::chttp2::TransportFlowControl,
|
433
|
-
grpc_core::chttp2::TransportFlowControlDisabled>
|
434
|
-
flow_control;
|
359
|
+
grpc_core::chttp2::TransportFlowControl flow_control;
|
435
360
|
/** initial window change. This is tracked as we parse settings frames from
|
436
361
|
* the remote peer. If there is a positive delta, then we will make all
|
437
362
|
* streams readable since they may have become unstalled */
|
@@ -565,19 +490,16 @@ struct grpc_chttp2_stream {
|
|
565
490
|
bool* sent_trailing_metadata_op = nullptr;
|
566
491
|
grpc_closure* send_trailing_metadata_finished = nullptr;
|
567
492
|
|
568
|
-
grpc_core::OrphanablePtr<grpc_core::ByteStream> fetching_send_message;
|
569
|
-
uint32_t fetched_send_message_length = 0;
|
570
|
-
grpc_slice fetching_slice = grpc_empty_slice();
|
571
493
|
int64_t next_message_end_offset;
|
572
494
|
int64_t flow_controlled_bytes_written = 0;
|
573
495
|
int64_t flow_controlled_bytes_flowed = 0;
|
574
|
-
grpc_closure
|
575
|
-
grpc_closure* fetching_send_message_finished = nullptr;
|
496
|
+
grpc_closure* send_message_finished = nullptr;
|
576
497
|
|
577
498
|
grpc_metadata_batch* recv_initial_metadata;
|
578
499
|
grpc_closure* recv_initial_metadata_ready = nullptr;
|
579
500
|
bool* trailing_metadata_available = nullptr;
|
580
|
-
|
501
|
+
absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
|
502
|
+
uint32_t* recv_message_flags = nullptr;
|
581
503
|
bool* call_failed_before_recv_message = nullptr;
|
582
504
|
grpc_closure* recv_message_ready = nullptr;
|
583
505
|
grpc_metadata_batch* recv_trailing_metadata;
|
@@ -614,22 +536,7 @@ struct grpc_chttp2_stream {
|
|
614
536
|
grpc_metadata_batch initial_metadata_buffer;
|
615
537
|
grpc_metadata_batch trailing_metadata_buffer;
|
616
538
|
|
617
|
-
grpc_slice_buffer frame_storage;
|
618
|
-
|
619
|
-
grpc_closure* on_next = nullptr; /* protected by t combiner */
|
620
|
-
bool pending_byte_stream = false; /* protected by t combiner */
|
621
|
-
// cached length of buffer to be used by the transport thread in cases where
|
622
|
-
// stream->pending_byte_stream == true. The value is saved before
|
623
|
-
// application threads are allowed to modify
|
624
|
-
// unprocessed_incoming_frames_buffer
|
625
|
-
size_t unprocessed_incoming_frames_buffer_cached_length = 0;
|
626
|
-
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
627
|
-
* Accessed only by application thread when stream->pending_byte_stream ==
|
628
|
-
* true */
|
629
|
-
grpc_slice_buffer unprocessed_incoming_frames_buffer;
|
630
|
-
grpc_closure reset_byte_stream;
|
631
|
-
grpc_error_handle byte_stream_error =
|
632
|
-
GRPC_ERROR_NONE; /* protected by t combiner */
|
539
|
+
grpc_slice_buffer frame_storage; /* protected by t combiner */
|
633
540
|
bool received_last_frame = false; /* protected by t combiner */
|
634
541
|
|
635
542
|
grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture();
|
@@ -638,22 +545,13 @@ struct grpc_chttp2_stream {
|
|
638
545
|
grpc_error_handle forced_close_error = GRPC_ERROR_NONE;
|
639
546
|
/** how many header frames have we received? */
|
640
547
|
uint8_t header_frames_received = 0;
|
641
|
-
/** parsing state for data frames */
|
642
|
-
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
643
|
-
* Accessed only by application thread when stream->pending_byte_stream ==
|
644
|
-
* true */
|
645
|
-
grpc_chttp2_data_parser data_parser;
|
646
548
|
/** number of bytes received - reset at end of parse thread execution */
|
647
549
|
int64_t received_bytes = 0;
|
648
550
|
|
649
551
|
bool sent_initial_metadata = false;
|
650
552
|
bool sent_trailing_metadata = false;
|
651
553
|
|
652
|
-
grpc_core::
|
653
|
-
grpc_core::chttp2::StreamFlowControlBase,
|
654
|
-
grpc_core::chttp2::StreamFlowControl,
|
655
|
-
grpc_core::chttp2::StreamFlowControlDisabled>
|
656
|
-
flow_control;
|
554
|
+
grpc_core::chttp2::StreamFlowControl flow_control;
|
657
555
|
|
658
556
|
grpc_slice_buffer flow_controlled_buffer;
|
659
557
|
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include <string>
|
25
25
|
|
26
26
|
#include "absl/base/attributes.h"
|
27
|
+
#include "absl/status/status.h"
|
27
28
|
#include "absl/strings/str_cat.h"
|
28
29
|
#include "absl/strings/str_format.h"
|
29
30
|
|
@@ -46,11 +47,11 @@
|
|
46
47
|
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
47
48
|
#include "src/core/lib/channel/channelz.h"
|
48
49
|
#include "src/core/lib/debug/trace.h"
|
49
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
50
50
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
51
51
|
#include "src/core/lib/gprpp/time.h"
|
52
52
|
#include "src/core/lib/iomgr/error.h"
|
53
53
|
#include "src/core/lib/transport/bdp_estimator.h"
|
54
|
+
#include "src/core/lib/transport/error_utils.h"
|
54
55
|
#include "src/core/lib/transport/http2_errors.h"
|
55
56
|
#include "src/core/lib/transport/metadata_batch.h"
|
56
57
|
#include "src/core/lib/transport/transport.h"
|
@@ -74,6 +75,10 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
|
|
74
75
|
const grpc_slice& slice,
|
75
76
|
int is_last);
|
76
77
|
|
78
|
+
static char get_utf8_safe_char(char c) {
|
79
|
+
return static_cast<unsigned char>(c) < 128 ? c : 32;
|
80
|
+
}
|
81
|
+
|
77
82
|
grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
78
83
|
const grpc_slice& slice) {
|
79
84
|
const uint8_t* beg = GRPC_SLICE_START_PTR(slice);
|
@@ -113,10 +118,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
113
118
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
114
119
|
"Connect string mismatch: expected '%c' (%d) got '%c' (%d) "
|
115
120
|
"at byte %d",
|
116
|
-
|
121
|
+
get_utf8_safe_char(
|
122
|
+
GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state]),
|
117
123
|
static_cast<int>(static_cast<uint8_t>(
|
118
124
|
GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state])),
|
119
|
-
*cur, static_cast<int>(*cur),
|
125
|
+
get_utf8_safe_char(*cur), static_cast<int>(*cur),
|
126
|
+
t->deframe_state));
|
120
127
|
}
|
121
128
|
++cur;
|
122
129
|
// NOLINTNEXTLINE(bugprone-misplaced-widening-cast)
|
@@ -197,12 +204,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
197
204
|
t->incoming_stream_id |= (static_cast<uint32_t>(*cur));
|
198
205
|
t->deframe_state = GRPC_DTS_FRAME;
|
199
206
|
err = init_frame_parser(t);
|
200
|
-
if (err
|
207
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
201
208
|
return err;
|
202
209
|
}
|
203
210
|
if (t->incoming_frame_size == 0) {
|
204
211
|
err = parse_frame_slice(t, grpc_empty_slice(), 1);
|
205
|
-
if (err
|
212
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
206
213
|
return err;
|
207
214
|
}
|
208
215
|
t->incoming_stream = nullptr;
|
@@ -211,10 +218,9 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
211
218
|
return GRPC_ERROR_NONE;
|
212
219
|
}
|
213
220
|
goto dts_fh_0; /* loop */
|
214
|
-
} else if (t->
|
215
|
-
t->
|
216
|
-
|
217
|
-
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
|
221
|
+
} else if (t->incoming_frame_size >
|
222
|
+
t->settings[GRPC_ACKED_SETTINGS]
|
223
|
+
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
|
218
224
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
219
225
|
absl::StrFormat("Frame size %d is larger than max frame size %d",
|
220
226
|
t->incoming_frame_size,
|
@@ -233,7 +239,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
233
239
|
grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
|
234
240
|
static_cast<size_t>(end - beg)),
|
235
241
|
1);
|
236
|
-
if (err
|
242
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
237
243
|
return err;
|
238
244
|
}
|
239
245
|
t->deframe_state = GRPC_DTS_FH_0;
|
@@ -246,7 +252,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
246
252
|
grpc_slice_sub_no_ref(slice, cur_offset,
|
247
253
|
cur_offset + t->incoming_frame_size),
|
248
254
|
1);
|
249
|
-
if (err
|
255
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
250
256
|
return err;
|
251
257
|
}
|
252
258
|
cur += t->incoming_frame_size;
|
@@ -258,7 +264,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
|
|
258
264
|
grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
|
259
265
|
static_cast<size_t>(end - beg)),
|
260
266
|
0);
|
261
|
-
if (err
|
267
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
262
268
|
return err;
|
263
269
|
}
|
264
270
|
t->incoming_frame_size -= static_cast<uint32_t>(end - cur);
|
@@ -378,7 +384,7 @@ void grpc_chttp2_parsing_become_skip_parser(grpc_chttp2_transport* t) {
|
|
378
384
|
|
379
385
|
static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
|
380
386
|
// Update BDP accounting since we have received a data frame.
|
381
|
-
grpc_core::BdpEstimator* bdp_est = t->flow_control
|
387
|
+
grpc_core::BdpEstimator* bdp_est = t->flow_control.bdp_estimator();
|
382
388
|
if (bdp_est) {
|
383
389
|
if (t->bdp_ping_blocked) {
|
384
390
|
t->bdp_ping_blocked = false;
|
@@ -389,17 +395,21 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
|
|
389
395
|
}
|
390
396
|
grpc_chttp2_stream* s =
|
391
397
|
grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
|
392
|
-
|
398
|
+
absl::Status status;
|
393
399
|
grpc_core::chttp2::FlowControlAction action;
|
394
400
|
if (s == nullptr) {
|
395
|
-
|
396
|
-
|
401
|
+
grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext upd(
|
402
|
+
&t->flow_control);
|
403
|
+
status = upd.RecvData(t->incoming_frame_size);
|
404
|
+
action = upd.MakeAction();
|
397
405
|
} else {
|
398
|
-
|
399
|
-
|
406
|
+
grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
|
407
|
+
&s->flow_control);
|
408
|
+
status = upd.RecvData(t->incoming_frame_size);
|
409
|
+
action = upd.MakeAction();
|
400
410
|
}
|
401
411
|
grpc_chttp2_act_on_flowctl_action(action, t, s);
|
402
|
-
if (
|
412
|
+
if (!status.ok()) {
|
403
413
|
goto error_handler;
|
404
414
|
}
|
405
415
|
if (s == nullptr) {
|
@@ -407,33 +417,29 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
|
|
407
417
|
}
|
408
418
|
s->received_bytes += t->incoming_frame_size;
|
409
419
|
s->stats.incoming.framing_bytes += 9;
|
410
|
-
if (
|
420
|
+
if (s->read_closed) {
|
411
421
|
return init_non_header_skip_frame_parser(t);
|
412
422
|
}
|
413
|
-
|
414
|
-
|
415
|
-
&s->data_parser, t->incoming_frame_flags, s->id, s);
|
416
|
-
}
|
423
|
+
status =
|
424
|
+
grpc_chttp2_data_parser_begin_frame(t->incoming_frame_flags, s->id, s);
|
417
425
|
error_handler:
|
418
|
-
|
419
|
-
if (err == GRPC_ERROR_NONE) {
|
426
|
+
if (status.ok()) {
|
420
427
|
t->incoming_stream = s;
|
421
428
|
/* t->parser = grpc_chttp2_data_parser_parse;*/
|
422
429
|
t->parser = grpc_chttp2_data_parser_parse;
|
423
|
-
t->parser_data =
|
430
|
+
t->parser_data = nullptr;
|
424
431
|
t->ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
|
425
432
|
return GRPC_ERROR_NONE;
|
426
|
-
} else if (
|
433
|
+
} else if (s != nullptr) {
|
427
434
|
/* handle stream errors by closing the stream */
|
428
|
-
|
429
|
-
|
430
|
-
}
|
435
|
+
grpc_chttp2_mark_stream_closed(t, s, true, false,
|
436
|
+
absl_status_to_grpc_error(status));
|
431
437
|
grpc_chttp2_add_rst_stream_to_next_write(t, t->incoming_stream_id,
|
432
438
|
GRPC_HTTP2_PROTOCOL_ERROR,
|
433
439
|
&s->stats.outgoing);
|
434
440
|
return init_non_header_skip_frame_parser(t);
|
435
441
|
} else {
|
436
|
-
return
|
442
|
+
return absl_status_to_grpc_error(status);
|
437
443
|
}
|
438
444
|
}
|
439
445
|
|
@@ -562,6 +568,10 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
|
|
562
568
|
gpr_log(GPR_ERROR, "too many header frames received");
|
563
569
|
return init_header_skip_frame_parser(t, priority_type);
|
564
570
|
}
|
571
|
+
if (frame_type == HPackParser::LogInfo::kTrailers && !t->header_eof) {
|
572
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
573
|
+
"Trailing metadata frame received without an end-o-stream");
|
574
|
+
}
|
565
575
|
t->hpack_parser.BeginFrame(
|
566
576
|
incoming_metadata_buffer,
|
567
577
|
t->settings[GRPC_ACKED_SETTINGS]
|
@@ -576,7 +586,7 @@ static grpc_error_handle init_window_update_frame_parser(
|
|
576
586
|
grpc_error_handle err = grpc_chttp2_window_update_parser_begin_frame(
|
577
587
|
&t->simple.window_update, t->incoming_frame_size,
|
578
588
|
t->incoming_frame_flags);
|
579
|
-
if (err
|
589
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
580
590
|
if (t->incoming_stream_id != 0) {
|
581
591
|
grpc_chttp2_stream* s = t->incoming_stream =
|
582
592
|
grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
|
@@ -593,7 +603,7 @@ static grpc_error_handle init_window_update_frame_parser(
|
|
593
603
|
static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
|
594
604
|
grpc_error_handle err = grpc_chttp2_ping_parser_begin_frame(
|
595
605
|
&t->simple.ping, t->incoming_frame_size, t->incoming_frame_flags);
|
596
|
-
if (err
|
606
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
597
607
|
t->parser = grpc_chttp2_ping_parser_parse;
|
598
608
|
t->parser_data = &t->simple.ping;
|
599
609
|
return GRPC_ERROR_NONE;
|
@@ -602,7 +612,7 @@ static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
|
|
602
612
|
static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
|
603
613
|
grpc_error_handle err = grpc_chttp2_rst_stream_parser_begin_frame(
|
604
614
|
&t->simple.rst_stream, t->incoming_frame_size, t->incoming_frame_flags);
|
605
|
-
if (err
|
615
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
606
616
|
grpc_chttp2_stream* s = t->incoming_stream =
|
607
617
|
grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
|
608
618
|
if (!t->incoming_stream) {
|
@@ -617,7 +627,7 @@ static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
|
|
617
627
|
static grpc_error_handle init_goaway_parser(grpc_chttp2_transport* t) {
|
618
628
|
grpc_error_handle err = grpc_chttp2_goaway_parser_begin_frame(
|
619
629
|
&t->goaway_parser, t->incoming_frame_size, t->incoming_frame_flags);
|
620
|
-
if (err
|
630
|
+
if (!GRPC_ERROR_IS_NONE(err)) return err;
|
621
631
|
t->parser = grpc_chttp2_goaway_parser_parse;
|
622
632
|
t->parser_data = &t->goaway_parser;
|
623
633
|
return GRPC_ERROR_NONE;
|
@@ -632,7 +642,7 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
|
|
632
642
|
grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
|
633
643
|
&t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
|
634
644
|
t->settings[GRPC_PEER_SETTINGS]);
|
635
|
-
if (err
|
645
|
+
if (!GRPC_ERROR_IS_NONE(err)) {
|
636
646
|
return err;
|
637
647
|
}
|
638
648
|
if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
|
@@ -641,6 +651,9 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
|
|
641
651
|
t->hpack_parser.hpack_table()->SetMaxBytes(
|
642
652
|
t->settings[GRPC_ACKED_SETTINGS]
|
643
653
|
[GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
|
654
|
+
t->flow_control.SetAckedInitialWindow(
|
655
|
+
t->settings[GRPC_ACKED_SETTINGS]
|
656
|
+
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
|
644
657
|
t->sent_local_settings = false;
|
645
658
|
}
|
646
659
|
t->parser = grpc_chttp2_settings_parser_parse;
|
@@ -654,7 +667,7 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
|
|
654
667
|
grpc_chttp2_stream* s = t->incoming_stream;
|
655
668
|
grpc_error_handle err = t->parser(t->parser_data, t, s, slice, is_last);
|
656
669
|
intptr_t unused;
|
657
|
-
if (GPR_LIKELY(err
|
670
|
+
if (GPR_LIKELY(GRPC_ERROR_IS_NONE(err))) {
|
658
671
|
return err;
|
659
672
|
} else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, &unused)) {
|
660
673
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
@@ -20,12 +20,10 @@
|
|
20
20
|
|
21
21
|
#include <grpc/support/log.h>
|
22
22
|
|
23
|
-
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
|
24
23
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
25
24
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
26
25
|
#include "src/core/lib/debug/trace.h"
|
27
26
|
#include "src/core/lib/gprpp/bitset.h"
|
28
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
29
27
|
|
30
28
|
static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
|
31
29
|
switch (id) {
|
@@ -189,7 +187,6 @@ void grpc_chttp2_list_remove_waiting_for_concurrency(grpc_chttp2_transport* t,
|
|
189
187
|
|
190
188
|
void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport* t,
|
191
189
|
grpc_chttp2_stream* s) {
|
192
|
-
GPR_ASSERT(t->flow_control->flow_control_enabled());
|
193
190
|
stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
|
194
191
|
}
|
195
192
|
|
@@ -205,7 +202,6 @@ void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport* t,
|
|
205
202
|
|
206
203
|
void grpc_chttp2_list_add_stalled_by_stream(grpc_chttp2_transport* t,
|
207
204
|
grpc_chttp2_stream* s) {
|
208
|
-
GPR_ASSERT(t->flow_control->flow_control_enabled());
|
209
205
|
stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_STREAM);
|
210
206
|
}
|
211
207
|
|
@@ -22,7 +22,6 @@
|
|
22
22
|
#include <stddef.h>
|
23
23
|
|
24
24
|
#include <algorithm>
|
25
|
-
#include <memory>
|
26
25
|
#include <string>
|
27
26
|
|
28
27
|
#include "absl/types/optional.h"
|
@@ -50,7 +49,6 @@
|
|
50
49
|
#include "src/core/lib/debug/stats.h"
|
51
50
|
#include "src/core/lib/debug/trace.h"
|
52
51
|
#include "src/core/lib/gprpp/debug_location.h"
|
53
|
-
#include "src/core/lib/gprpp/manual_constructor.h"
|
54
52
|
#include "src/core/lib/gprpp/ref_counted.h"
|
55
53
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
56
54
|
#include "src/core/lib/gprpp/time.h"
|
@@ -220,14 +218,14 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
220
218
|
s->flow_controlled_buffer.length, s->flow_controlled_bytes_flowed,
|
221
219
|
t->settings[GRPC_ACKED_SETTINGS]
|
222
220
|
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
|
223
|
-
t->flow_control
|
221
|
+
t->flow_control.remote_window(),
|
224
222
|
static_cast<uint32_t>(std::max(
|
225
223
|
int64_t(0),
|
226
|
-
s->flow_control
|
224
|
+
s->flow_control.remote_window_delta() +
|
227
225
|
static_cast<int64_t>(
|
228
226
|
t->settings[GRPC_PEER_SETTINGS]
|
229
227
|
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
|
230
|
-
s->flow_control
|
228
|
+
s->flow_control.remote_window_delta());
|
231
229
|
}
|
232
230
|
}
|
233
231
|
|
@@ -304,7 +302,7 @@ class WriteContext {
|
|
304
302
|
|
305
303
|
void FlushWindowUpdates() {
|
306
304
|
uint32_t transport_announce =
|
307
|
-
t_->flow_control
|
305
|
+
t_->flow_control.MaybeSendUpdate(t_->outbuf.count > 0);
|
308
306
|
if (transport_announce) {
|
309
307
|
grpc_transport_one_way_stats throwaway_stats;
|
310
308
|
grpc_slice_buffer_add(
|
@@ -331,7 +329,7 @@ class WriteContext {
|
|
331
329
|
void UpdateStreamsNoLongerStalled() {
|
332
330
|
grpc_chttp2_stream* s;
|
333
331
|
while (grpc_chttp2_list_pop_stalled_by_transport(t_, &s)) {
|
334
|
-
if (t_->closed_with_error
|
332
|
+
if (GRPC_ERROR_IS_NONE(t_->closed_with_error) &&
|
335
333
|
grpc_chttp2_list_add_writable_stream(t_, s)) {
|
336
334
|
if (!s->refcount->refs.RefIfNonZero()) {
|
337
335
|
grpc_chttp2_list_remove_writable_stream(t_, s);
|
@@ -392,7 +390,7 @@ class DataSendContext {
|
|
392
390
|
uint32_t stream_remote_window() const {
|
393
391
|
return static_cast<uint32_t>(std::max(
|
394
392
|
int64_t(0),
|
395
|
-
s_->flow_control
|
393
|
+
s_->flow_control.remote_window_delta() +
|
396
394
|
static_cast<int64_t>(
|
397
395
|
t_->settings[GRPC_PEER_SETTINGS]
|
398
396
|
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
|
@@ -402,7 +400,7 @@ class DataSendContext {
|
|
402
400
|
return static_cast<uint32_t>(std::min(
|
403
401
|
t_->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
|
404
402
|
static_cast<uint32_t>(std::min(int64_t(stream_remote_window()),
|
405
|
-
t_->flow_control
|
403
|
+
t_->flow_control.remote_window()))));
|
406
404
|
}
|
407
405
|
|
408
406
|
bool AnyOutgoing() const { return max_outgoing() > 0; }
|
@@ -411,12 +409,11 @@ class DataSendContext {
|
|
411
409
|
uint32_t send_bytes = static_cast<uint32_t>(
|
412
410
|
std::min(size_t(max_outgoing()), s_->flow_controlled_buffer.length));
|
413
411
|
is_last_frame_ = send_bytes == s_->flow_controlled_buffer.length &&
|
414
|
-
s_->fetching_send_message == nullptr &&
|
415
412
|
s_->send_trailing_metadata != nullptr &&
|
416
413
|
s_->send_trailing_metadata->empty();
|
417
414
|
grpc_chttp2_encode_data(s_->id, &s_->flow_controlled_buffer, send_bytes,
|
418
415
|
is_last_frame_, &s_->stats.outgoing, &t_->outbuf);
|
419
|
-
|
416
|
+
sfc_upd_.SentData(send_bytes);
|
420
417
|
s_->sending_bytes += send_bytes;
|
421
418
|
}
|
422
419
|
|
@@ -436,6 +433,8 @@ class DataSendContext {
|
|
436
433
|
WriteContext* write_context_;
|
437
434
|
grpc_chttp2_transport* t_;
|
438
435
|
grpc_chttp2_stream* s_;
|
436
|
+
grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext sfc_upd_{
|
437
|
+
&s_->flow_control};
|
439
438
|
const size_t sending_bytes_before_;
|
440
439
|
bool is_last_frame_ = false;
|
441
440
|
};
|
@@ -445,11 +444,9 @@ class StreamWriteContext {
|
|
445
444
|
StreamWriteContext(WriteContext* write_context, grpc_chttp2_stream* s)
|
446
445
|
: write_context_(write_context), t_(write_context->transport()), s_(s) {
|
447
446
|
GRPC_CHTTP2_IF_TRACING(
|
448
|
-
gpr_log(GPR_INFO, "W:%p %s[%d] im-(sent,send)=(%d,%d)
|
447
|
+
gpr_log(GPR_INFO, "W:%p %s[%d] im-(sent,send)=(%d,%d)", t_,
|
449
448
|
t_->is_client ? "CLIENT" : "SERVER", s->id,
|
450
|
-
s->sent_initial_metadata, s->send_initial_metadata != nullptr
|
451
|
-
(int)(s->flow_control->local_window_delta() -
|
452
|
-
s->flow_control->announced_window_delta())));
|
449
|
+
s->sent_initial_metadata, s->send_initial_metadata != nullptr));
|
453
450
|
}
|
454
451
|
|
455
452
|
void FlushInitialMetadata() {
|
@@ -462,8 +459,7 @@ class StreamWriteContext {
|
|
462
459
|
// trailing metadata. This results in a Trailers-Only response,
|
463
460
|
// which is required for retries, as per:
|
464
461
|
// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#when-retries-are-valid
|
465
|
-
if (!t_->is_client && s_->
|
466
|
-
s_->flow_controlled_buffer.length == 0 &&
|
462
|
+
if (!t_->is_client && s_->flow_controlled_buffer.length == 0 &&
|
467
463
|
s_->send_trailing_metadata != nullptr &&
|
468
464
|
is_default_initial_metadata(s_->send_initial_metadata)) {
|
469
465
|
ConvertInitialMetadataToTrailingMetadata();
|
@@ -495,8 +491,10 @@ class StreamWriteContext {
|
|
495
491
|
}
|
496
492
|
|
497
493
|
void FlushWindowUpdates() {
|
494
|
+
if (s_->read_closed) return;
|
495
|
+
|
498
496
|
/* send any window updates */
|
499
|
-
const uint32_t stream_announce = s_->flow_control
|
497
|
+
const uint32_t stream_announce = s_->flow_control.MaybeSendUpdate();
|
500
498
|
if (stream_announce == 0) return;
|
501
499
|
|
502
500
|
grpc_slice_buffer_add(
|
@@ -516,7 +514,7 @@ class StreamWriteContext {
|
|
516
514
|
DataSendContext data_send_context(write_context_, t_, s_);
|
517
515
|
|
518
516
|
if (!data_send_context.AnyOutgoing()) {
|
519
|
-
if (t_->flow_control
|
517
|
+
if (t_->flow_control.remote_window() <= 0) {
|
520
518
|
report_stall(t_, s_, "transport");
|
521
519
|
grpc_chttp2_list_add_stalled_by_transport(t_, s_);
|
522
520
|
} else if (data_send_context.stream_remote_window() <= 0) {
|
@@ -547,7 +545,6 @@ class StreamWriteContext {
|
|
547
545
|
if (!s_->sent_initial_metadata) return;
|
548
546
|
|
549
547
|
if (s_->send_trailing_metadata == nullptr) return;
|
550
|
-
if (s_->fetching_send_message != nullptr) return;
|
551
548
|
if (s_->flow_controlled_buffer.length != 0) return;
|
552
549
|
|
553
550
|
GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "sending trailing_metadata"));
|
@@ -635,7 +632,7 @@ grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
|
635
632
|
ctx.FlushQueuedBuffers();
|
636
633
|
ctx.EnactHpackSettings();
|
637
634
|
|
638
|
-
if (t->flow_control
|
635
|
+
if (t->flow_control.remote_window() > 0) {
|
639
636
|
ctx.UpdateStreamsNoLongerStalled();
|
640
637
|
}
|
641
638
|
|