grpc 1.60.2 → 1.61.0.pre2
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 +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -79,6 +79,7 @@
|
|
79
79
|
#include "src/core/lib/debug/stats.h"
|
80
80
|
#include "src/core/lib/debug/stats_data.h"
|
81
81
|
#include "src/core/lib/experiments/experiments.h"
|
82
|
+
#include "src/core/lib/gpr/string.h"
|
82
83
|
#include "src/core/lib/gpr/useful.h"
|
83
84
|
#include "src/core/lib/gprpp/bitset.h"
|
84
85
|
#include "src/core/lib/gprpp/crash.h"
|
@@ -162,10 +163,6 @@ static void read_action_locked(grpc_core::RefCountedPtr<grpc_chttp2_transport>,
|
|
162
163
|
static void continue_read_action_locked(
|
163
164
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t);
|
164
165
|
|
165
|
-
// Set a transport level setting, and push it to our peer
|
166
|
-
static void queue_setting_update(grpc_chttp2_transport* t,
|
167
|
-
grpc_chttp2_setting_id id, uint32_t value);
|
168
|
-
|
169
166
|
static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
170
167
|
grpc_error_handle error, bool tarpit);
|
171
168
|
|
@@ -342,7 +339,7 @@ void ForEachContextListEntryExecute(void* arg, Timestamps* ts,
|
|
342
339
|
}
|
343
340
|
|
344
341
|
HttpAnnotation::HttpAnnotation(
|
345
|
-
Type type,
|
342
|
+
Type type, gpr_timespec time,
|
346
343
|
absl::optional<chttp2::TransportFlowControl::Stats> transport_stats,
|
347
344
|
absl::optional<chttp2::StreamFlowControl::Stats> stream_stats)
|
348
345
|
: CallTracerAnnotationInterface::Annotation(
|
@@ -367,7 +364,7 @@ std::string HttpAnnotation::ToString() const {
|
|
367
364
|
default:
|
368
365
|
absl::StrAppend(&s, "Unknown");
|
369
366
|
}
|
370
|
-
absl::StrAppend(&s, " time: ", time_
|
367
|
+
absl::StrAppend(&s, " time: ", gpr_format_timespec(time_));
|
371
368
|
if (transport_stats_.has_value()) {
|
372
369
|
absl::StrAppend(&s, " transport:[", transport_stats_->ToString(), "]");
|
373
370
|
}
|
@@ -503,10 +500,8 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
503
500
|
if (max_requests_per_read.has_value()) {
|
504
501
|
t->max_requests_per_read =
|
505
502
|
grpc_core::Clamp(*max_requests_per_read, 1, 10000);
|
506
|
-
} else if (grpc_core::IsChttp2BatchRequestsEnabled()) {
|
507
|
-
t->max_requests_per_read = 32;
|
508
503
|
} else {
|
509
|
-
t->max_requests_per_read =
|
504
|
+
t->max_requests_per_read = 32;
|
510
505
|
}
|
511
506
|
|
512
507
|
if (channel_args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
@@ -523,8 +518,8 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
523
518
|
|
524
519
|
t->ack_pings = channel_args.GetBool("grpc.http2.ack_pings").value_or(true);
|
525
520
|
|
526
|
-
t->allow_tarpit =
|
527
|
-
|
521
|
+
t->allow_tarpit =
|
522
|
+
channel_args.GetBool(GRPC_ARG_HTTP_ALLOW_TARPIT).value_or(true);
|
528
523
|
t->min_tarpit_duration_ms =
|
529
524
|
channel_args
|
530
525
|
.GetDurationFromIntMillis(GRPC_ARG_HTTP_TARPIT_MIN_DURATION_MS)
|
@@ -551,93 +546,54 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
551
546
|
t->max_header_list_size_soft_limit = soft_limit;
|
552
547
|
}
|
553
548
|
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
}
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
{true, true}},
|
585
|
-
{GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY,
|
586
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA,
|
587
|
-
1,
|
588
|
-
0,
|
589
|
-
1,
|
590
|
-
{true, true}},
|
591
|
-
{GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES,
|
592
|
-
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE,
|
593
|
-
-1,
|
594
|
-
5,
|
595
|
-
INT32_MAX,
|
596
|
-
{true, true}}};
|
597
|
-
|
598
|
-
for (size_t i = 0; i < GPR_ARRAY_SIZE(settings_map); i++) {
|
599
|
-
const auto& setting = settings_map[i];
|
600
|
-
if (setting.availability[is_client]) {
|
601
|
-
const int value = channel_args.GetInt(setting.channel_arg_name)
|
602
|
-
.value_or(setting.default_value);
|
603
|
-
if (value >= 0) {
|
604
|
-
const int clamped_value =
|
605
|
-
grpc_core::Clamp(value, setting.min, setting.max);
|
606
|
-
queue_setting_update(t, setting.setting_id, clamped_value);
|
607
|
-
if (setting.setting_id == GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS) {
|
608
|
-
t->max_concurrent_streams_policy.SetTarget(clamped_value);
|
609
|
-
}
|
610
|
-
} else if (setting.setting_id ==
|
611
|
-
GRPC_CHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE) {
|
612
|
-
// Set value to 1.25 * soft limit if this is larger than
|
613
|
-
// `DEFAULT_MAX_HEADER_LIST_SIZE` and
|
614
|
-
// `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
|
615
|
-
const int soft_limit = channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE)
|
616
|
-
.value_or(setting.default_value);
|
617
|
-
const int value = (soft_limit >= 0 && soft_limit < (INT_MAX / 1.25))
|
618
|
-
? static_cast<int>(soft_limit * 1.25)
|
619
|
-
: soft_limit;
|
620
|
-
if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
|
621
|
-
queue_setting_update(
|
622
|
-
t, setting.setting_id,
|
623
|
-
grpc_core::Clamp(value, setting.min, setting.max));
|
624
|
-
}
|
625
|
-
}
|
626
|
-
} else if (channel_args.Contains(setting.channel_arg_name)) {
|
627
|
-
gpr_log(GPR_DEBUG, "%s is not available on %s",
|
628
|
-
std::string(setting.channel_arg_name).c_str(),
|
629
|
-
is_client ? "clients" : "servers");
|
549
|
+
int value;
|
550
|
+
if (!is_client) {
|
551
|
+
value = channel_args.GetInt(GRPC_ARG_MAX_CONCURRENT_STREAMS).value_or(-1);
|
552
|
+
if (value >= 0) {
|
553
|
+
t->settings.mutable_local().SetMaxConcurrentStreams(value);
|
554
|
+
t->max_concurrent_streams_policy.SetTarget(value);
|
555
|
+
}
|
556
|
+
} else if (channel_args.Contains(GRPC_ARG_MAX_CONCURRENT_STREAMS)) {
|
557
|
+
gpr_log(GPR_DEBUG, "%s is not available on clients",
|
558
|
+
GRPC_ARG_MAX_CONCURRENT_STREAMS);
|
559
|
+
}
|
560
|
+
value =
|
561
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER).value_or(-1);
|
562
|
+
if (value >= 0) {
|
563
|
+
t->settings.mutable_local().SetHeaderTableSize(value);
|
564
|
+
}
|
565
|
+
value = channel_args.GetInt(GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE).value_or(-1);
|
566
|
+
if (value >= 0) {
|
567
|
+
t->settings.mutable_local().SetMaxHeaderListSize(value);
|
568
|
+
} else {
|
569
|
+
// Set value to 1.25 * soft limit if this is larger than
|
570
|
+
// `DEFAULT_MAX_HEADER_LIST_SIZE` and
|
571
|
+
// `GRPC_ARG_ABSOLUTE_MAX_METADATA_SIZE` is not set.
|
572
|
+
const int soft_limit =
|
573
|
+
channel_args.GetInt(GRPC_ARG_MAX_METADATA_SIZE).value_or(-1);
|
574
|
+
const int value = (soft_limit >= 0 && soft_limit < (INT_MAX / 1.25))
|
575
|
+
? static_cast<int>(soft_limit * 1.25)
|
576
|
+
: soft_limit;
|
577
|
+
if (value > DEFAULT_MAX_HEADER_LIST_SIZE) {
|
578
|
+
t->settings.mutable_local().SetMaxHeaderListSize(value);
|
630
579
|
}
|
631
580
|
}
|
581
|
+
value = channel_args.GetInt(GRPC_ARG_HTTP2_MAX_FRAME_SIZE).value_or(-1);
|
582
|
+
if (value >= 0) {
|
583
|
+
t->settings.mutable_local().SetMaxFrameSize(value);
|
584
|
+
}
|
585
|
+
value =
|
586
|
+
channel_args.GetInt(GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES).value_or(-1);
|
587
|
+
if (value >= 0) {
|
588
|
+
t->settings.mutable_local().SetInitialWindowSize(value);
|
589
|
+
}
|
590
|
+
value = channel_args.GetInt(GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY).value_or(-1);
|
591
|
+
if (value >= 0) {
|
592
|
+
t->settings.mutable_local().SetAllowTrueBinaryMetadata(value != 0);
|
593
|
+
}
|
632
594
|
|
633
595
|
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
634
|
-
|
635
|
-
&grpc_chttp2_settings_parameters
|
636
|
-
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
637
|
-
queue_setting_update(
|
638
|
-
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
639
|
-
grpc_core::Clamp(INT_MAX, static_cast<int>(sp->min_value),
|
640
|
-
static_cast<int>(sp->max_value)));
|
596
|
+
t->settings.mutable_local().SetPreferredReceiveCryptoMessageSize(INT_MAX);
|
641
597
|
}
|
642
598
|
|
643
599
|
t->ping_on_rst_stream_percent = grpc_core::Clamp(
|
@@ -647,7 +603,7 @@ static void read_channel_args(grpc_chttp2_transport* t,
|
|
647
603
|
|
648
604
|
t->max_concurrent_streams_overload_protection =
|
649
605
|
channel_args.GetBool(GRPC_ARG_MAX_CONCURRENT_STREAMS_OVERLOAD_PROTECTION)
|
650
|
-
.value_or(
|
606
|
+
.value_or(true);
|
651
607
|
}
|
652
608
|
|
653
609
|
static void init_keepalive_pings_if_enabled_locked(
|
@@ -711,33 +667,22 @@ grpc_chttp2_transport::grpc_chttp2_transport(
|
|
711
667
|
grpc_slice_from_copied_string(GRPC_CHTTP2_CLIENT_CONNECT_STRING));
|
712
668
|
}
|
713
669
|
grpc_slice_buffer_init(&qbuf);
|
714
|
-
// copy in initial settings to all setting sets
|
715
|
-
size_t i;
|
716
|
-
int j;
|
717
|
-
for (i = 0; i < GRPC_CHTTP2_NUM_SETTINGS; i++) {
|
718
|
-
for (j = 0; j < GRPC_NUM_SETTING_SETS; j++) {
|
719
|
-
settings[j][i] = grpc_chttp2_settings_parameters[i].default_value;
|
720
|
-
}
|
721
|
-
}
|
722
670
|
grpc_chttp2_goaway_parser_init(&goaway_parser);
|
723
671
|
|
724
672
|
// configure http2 the way we like it
|
725
673
|
if (is_client) {
|
726
|
-
|
727
|
-
|
674
|
+
settings.mutable_local().SetEnablePush(false);
|
675
|
+
settings.mutable_local().SetMaxConcurrentStreams(0);
|
728
676
|
}
|
729
|
-
|
730
|
-
|
731
|
-
queue_setting_update(this,
|
732
|
-
GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA, 1);
|
677
|
+
settings.mutable_local().SetMaxHeaderListSize(DEFAULT_MAX_HEADER_LIST_SIZE);
|
678
|
+
settings.mutable_local().SetAllowTrueBinaryMetadata(true);
|
733
679
|
|
734
680
|
read_channel_args(this, channel_args, is_client);
|
735
681
|
|
736
682
|
// Initially allow *UP TO* MAX_CONCURRENT_STREAMS incoming before we start
|
737
683
|
// blanket cancelling them.
|
738
684
|
num_incoming_streams_before_settings_ack =
|
739
|
-
settings
|
740
|
-
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS];
|
685
|
+
settings.local().max_concurrent_streams();
|
741
686
|
|
742
687
|
grpc_core::ExecCtx exec_ctx;
|
743
688
|
combiner->Run(
|
@@ -1127,9 +1072,7 @@ static void write_action(grpc_chttp2_transport* t) {
|
|
1127
1072
|
// Choose max_frame_size as the prefered rx crypto frame size indicated by the
|
1128
1073
|
// peer.
|
1129
1074
|
int max_frame_size =
|
1130
|
-
t->settings
|
1131
|
-
[GRPC_PEER_SETTINGS]
|
1132
|
-
[GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE];
|
1075
|
+
t->settings.peer().preferred_receive_crypto_message_size();
|
1133
1076
|
// Note: max frame size is 0 if the remote peer does not support adjusting the
|
1134
1077
|
// sending frame size.
|
1135
1078
|
if (max_frame_size == 0) {
|
@@ -1206,23 +1149,6 @@ static void write_action_end_locked(
|
|
1206
1149
|
grpc_chttp2_end_write(t.get(), error);
|
1207
1150
|
}
|
1208
1151
|
|
1209
|
-
// Dirties an HTTP2 setting to be sent out next time a writing path occurs.
|
1210
|
-
// If the change needs to occur immediately, manually initiate a write.
|
1211
|
-
static void queue_setting_update(grpc_chttp2_transport* t,
|
1212
|
-
grpc_chttp2_setting_id id, uint32_t value) {
|
1213
|
-
const grpc_chttp2_setting_parameters* sp =
|
1214
|
-
&grpc_chttp2_settings_parameters[id];
|
1215
|
-
uint32_t use_value = grpc_core::Clamp(value, sp->min_value, sp->max_value);
|
1216
|
-
if (use_value != value) {
|
1217
|
-
gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
|
1218
|
-
value, use_value);
|
1219
|
-
}
|
1220
|
-
if (use_value != t->settings[GRPC_LOCAL_SETTINGS][id]) {
|
1221
|
-
t->settings[GRPC_LOCAL_SETTINGS][id] = use_value;
|
1222
|
-
t->dirtied_local_settings = true;
|
1223
|
-
}
|
1224
|
-
}
|
1225
|
-
|
1226
1152
|
// Cancel out streams that haven't yet started if we have received a GOAWAY
|
1227
1153
|
static void cancel_unstarted_streams(grpc_chttp2_transport* t,
|
1228
1154
|
grpc_error_handle error, bool tarpit) {
|
@@ -1321,9 +1247,7 @@ static void maybe_start_some_streams(grpc_chttp2_transport* t) {
|
|
1321
1247
|
// start streams where we have free grpc_chttp2_stream ids and free
|
1322
1248
|
// * concurrency
|
1323
1249
|
while (t->next_stream_id <= MAX_CLIENT_STREAM_ID &&
|
1324
|
-
t->stream_map.size() <
|
1325
|
-
t->settings[GRPC_PEER_SETTINGS]
|
1326
|
-
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] &&
|
1250
|
+
t->stream_map.size() < t->settings.peer().max_concurrent_streams() &&
|
1327
1251
|
grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) {
|
1328
1252
|
// safe since we can't (legally) be parsing this stream yet
|
1329
1253
|
GRPC_CHTTP2_IF_TRACING(gpr_log(
|
@@ -1510,7 +1434,7 @@ static void perform_stream_op_locked(void* stream_op,
|
|
1510
1434
|
if (op->send_initial_metadata) {
|
1511
1435
|
if (s->call_tracer) {
|
1512
1436
|
s->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
|
1513
|
-
grpc_core::HttpAnnotation::Type::kStart,
|
1437
|
+
grpc_core::HttpAnnotation::Type::kStart, gpr_now(GPR_CLOCK_REALTIME),
|
1514
1438
|
s->t->flow_control.stats(), s->flow_control.stats()));
|
1515
1439
|
}
|
1516
1440
|
if (t->is_client && t->channelz_socket != nullptr) {
|
@@ -2708,21 +2632,19 @@ void grpc_chttp2_act_on_flowctl_action(
|
|
2708
2632
|
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL, []() {});
|
2709
2633
|
WithUrgency(t, action.send_initial_window_update(),
|
2710
2634
|
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2711
|
-
|
2712
|
-
|
2713
|
-
action.initial_window_size());
|
2714
|
-
});
|
2715
|
-
WithUrgency(t, action.send_max_frame_size_update(),
|
2716
|
-
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2717
|
-
queue_setting_update(t, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
2718
|
-
action.max_frame_size());
|
2635
|
+
t->settings.mutable_local().SetInitialWindowSize(
|
2636
|
+
action.initial_window_size());
|
2719
2637
|
});
|
2638
|
+
WithUrgency(
|
2639
|
+
t, action.send_max_frame_size_update(),
|
2640
|
+
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2641
|
+
t->settings.mutable_local().SetMaxFrameSize(action.max_frame_size());
|
2642
|
+
});
|
2720
2643
|
if (t->enable_preferred_rx_crypto_frame_advertisement) {
|
2721
2644
|
WithUrgency(
|
2722
2645
|
t, action.preferred_rx_crypto_frame_size_update(),
|
2723
2646
|
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, [t, &action]() {
|
2724
|
-
|
2725
|
-
t, GRPC_CHTTP2_SETTINGS_GRPC_PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE,
|
2647
|
+
t->settings.mutable_local().SetPreferredReceiveCryptoMessageSize(
|
2726
2648
|
action.preferred_rx_crypto_frame_size());
|
2727
2649
|
});
|
2728
2650
|
}
|
@@ -2975,6 +2897,7 @@ static void next_bdp_ping_timer_expired_locked(
|
|
2975
2897
|
grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
|
2976
2898
|
GRPC_UNUSED grpc_error_handle error) {
|
2977
2899
|
GPR_DEBUG_ASSERT(error.ok());
|
2900
|
+
GPR_ASSERT(t->next_bdp_ping_timer_handle != TaskHandle::kInvalid);
|
2978
2901
|
t->next_bdp_ping_timer_handle = TaskHandle::kInvalid;
|
2979
2902
|
if (t->flow_control.bdp_estimator()->accumulator() == 0) {
|
2980
2903
|
// Block the bdp ping till we receive more data.
|
@@ -113,14 +113,14 @@ class HttpAnnotation : public CallTracerAnnotationInterface::Annotation {
|
|
113
113
|
};
|
114
114
|
|
115
115
|
HttpAnnotation(
|
116
|
-
Type type,
|
116
|
+
Type type, gpr_timespec time,
|
117
117
|
absl::optional<chttp2::TransportFlowControl::Stats> transport_stats,
|
118
118
|
absl::optional<chttp2::StreamFlowControl::Stats> stream_stats);
|
119
119
|
|
120
120
|
std::string ToString() const override;
|
121
121
|
|
122
122
|
Type http_type() const { return type_; }
|
123
|
-
|
123
|
+
gpr_timespec time() const { return time_; }
|
124
124
|
absl::optional<chttp2::TransportFlowControl::Stats> transport_stats() const {
|
125
125
|
return transport_stats_;
|
126
126
|
}
|
@@ -130,7 +130,7 @@ class HttpAnnotation : public CallTracerAnnotationInterface::Annotation {
|
|
130
130
|
|
131
131
|
private:
|
132
132
|
const Type type_;
|
133
|
-
const
|
133
|
+
const gpr_timespec time_;
|
134
134
|
absl::optional<chttp2::TransportFlowControl::Stats> transport_stats_;
|
135
135
|
absl::optional<chttp2::StreamFlowControl::Stats> stream_stats_;
|
136
136
|
};
|
@@ -104,16 +104,7 @@ TransportFlowControl::TransportFlowControl(absl::string_view name,
|
|
104
104
|
MemoryOwner* memory_owner)
|
105
105
|
: memory_owner_(memory_owner),
|
106
106
|
enable_bdp_probe_(enable_bdp_probe),
|
107
|
-
bdp_estimator_(name)
|
108
|
-
pid_controller_(PidController::Args()
|
109
|
-
.set_gain_p(4)
|
110
|
-
.set_gain_i(8)
|
111
|
-
.set_gain_d(0)
|
112
|
-
.set_initial_control_value(TargetLogBdp())
|
113
|
-
.set_min_control_value(-1)
|
114
|
-
.set_max_control_value(25)
|
115
|
-
.set_integral_range(10)),
|
116
|
-
last_pid_update_(Timestamp::Now()) {}
|
107
|
+
bdp_estimator_(name) {}
|
117
108
|
|
118
109
|
uint32_t TransportFlowControl::DesiredAnnounceSize(bool writing_anyway) const {
|
119
110
|
const uint32_t target_announced_window =
|
@@ -184,41 +175,6 @@ FlowControlAction TransportFlowControl::UpdateAction(FlowControlAction action) {
|
|
184
175
|
return action;
|
185
176
|
}
|
186
177
|
|
187
|
-
// Take in a target and modifies it based on the memory pressure of the system
|
188
|
-
static double AdjustForMemoryPressure(double memory_pressure, double target) {
|
189
|
-
// do not increase window under heavy memory pressure.
|
190
|
-
static const double kLowMemPressure = 0.1;
|
191
|
-
static const double kZeroTarget = 22;
|
192
|
-
static const double kHighMemPressure = 0.8;
|
193
|
-
static const double kMaxMemPressure = 0.9;
|
194
|
-
if (memory_pressure < kLowMemPressure && target < kZeroTarget) {
|
195
|
-
target = (target - kZeroTarget) * memory_pressure / kLowMemPressure +
|
196
|
-
kZeroTarget;
|
197
|
-
} else if (memory_pressure > kHighMemPressure) {
|
198
|
-
target *= 1 - std::min(1.0, (memory_pressure - kHighMemPressure) /
|
199
|
-
(kMaxMemPressure - kHighMemPressure));
|
200
|
-
}
|
201
|
-
return target;
|
202
|
-
}
|
203
|
-
|
204
|
-
double TransportFlowControl::TargetLogBdp() {
|
205
|
-
return AdjustForMemoryPressure(
|
206
|
-
memory_owner_->is_valid()
|
207
|
-
? memory_owner_->GetPressureInfo().pressure_control_value
|
208
|
-
: 0.0,
|
209
|
-
1 + log2(bdp_estimator_.EstimateBdp()));
|
210
|
-
}
|
211
|
-
|
212
|
-
double TransportFlowControl::SmoothLogBdp(double value) {
|
213
|
-
Timestamp now = Timestamp::Now();
|
214
|
-
double bdp_error = value - pid_controller_.last_control_value();
|
215
|
-
const double dt = (now - last_pid_update_).seconds();
|
216
|
-
last_pid_update_ = now;
|
217
|
-
// Limit dt to 100ms
|
218
|
-
const double kMaxDt = 0.1;
|
219
|
-
return pid_controller_.Update(bdp_error, dt > kMaxDt ? kMaxDt : dt);
|
220
|
-
}
|
221
|
-
|
222
178
|
double
|
223
179
|
TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
|
224
180
|
const {
|
@@ -274,18 +230,14 @@ TransportFlowControl::TargetInitialWindowSizeBasedOnMemoryPressureAndBdp()
|
|
274
230
|
}
|
275
231
|
|
276
232
|
void TransportFlowControl::UpdateSetting(
|
277
|
-
|
278
|
-
|
233
|
+
absl::string_view name, int64_t* desired_value, uint32_t new_desired_value,
|
234
|
+
FlowControlAction* action,
|
279
235
|
FlowControlAction& (FlowControlAction::*set)(FlowControlAction::Urgency,
|
280
236
|
uint32_t)) {
|
281
|
-
new_desired_value =
|
282
|
-
Clamp(new_desired_value, grpc_chttp2_settings_parameters[id].min_value,
|
283
|
-
grpc_chttp2_settings_parameters[id].max_value);
|
284
237
|
if (new_desired_value != *desired_value) {
|
285
238
|
if (grpc_flowctl_trace.enabled()) {
|
286
239
|
gpr_log(GPR_INFO, "[flowctl] UPDATE SETTING %s from %" PRId64 " to %d",
|
287
|
-
|
288
|
-
new_desired_value);
|
240
|
+
std::string(name).c_str(), *desired_value, new_desired_value);
|
289
241
|
}
|
290
242
|
// Reaching zero can only happen for initial window size, and if it occurs
|
291
243
|
// we really want to wake up writes and ensure all the queued stream
|
@@ -323,10 +275,8 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
|
|
323
275
|
// TODO(ncteisen): experiment with setting target to be huge under low
|
324
276
|
// memory pressure.
|
325
277
|
uint32_t target = static_cast<uint32_t>(RoundUpToPowerOf2(
|
326
|
-
Clamp(
|
327
|
-
|
328
|
-
: pow(2, SmoothLogBdp(TargetLogBdp())),
|
329
|
-
0.0, static_cast<double>(kMaxInitialWindowSize))));
|
278
|
+
Clamp(TargetInitialWindowSizeBasedOnMemoryPressureAndBdp(), 0.0,
|
279
|
+
static_cast<double>(kMaxInitialWindowSize))));
|
330
280
|
if (target < kMinPositiveInitialWindowSize) target = 0;
|
331
281
|
if (g_test_only_transport_target_window_estimates_mocker != nullptr) {
|
332
282
|
// Hook for simulating unusual flow control situations in tests.
|
@@ -336,13 +286,15 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
|
|
336
286
|
}
|
337
287
|
// Though initial window 'could' drop to 0, we keep the floor at
|
338
288
|
// kMinInitialWindowSize
|
339
|
-
UpdateSetting(
|
340
|
-
&target_initial_window_size_,
|
341
|
-
|
289
|
+
UpdateSetting(Http2Settings::initial_window_size_name(),
|
290
|
+
&target_initial_window_size_,
|
291
|
+
std::min(target, Http2Settings::max_initial_window_size()),
|
292
|
+
&action, &FlowControlAction::set_send_initial_window_update);
|
342
293
|
// we target the max of BDP or bandwidth in microseconds.
|
343
|
-
UpdateSetting(
|
344
|
-
target,
|
345
|
-
|
294
|
+
UpdateSetting(Http2Settings::max_frame_size_name(), &target_frame_size_,
|
295
|
+
Clamp(target, Http2Settings::min_max_frame_size(),
|
296
|
+
Http2Settings::max_max_frame_size()),
|
297
|
+
&action, &FlowControlAction::set_send_max_frame_size_update);
|
346
298
|
|
347
299
|
if (IsTcpFrameSizeTuningEnabled()) {
|
348
300
|
// Advertise PREFERRED_RECEIVE_CRYPTO_FRAME_SIZE to peer. By advertising
|
@@ -352,10 +304,11 @@ FlowControlAction TransportFlowControl::PeriodicUpdate() {
|
|
352
304
|
// Clamp(target_frame_size_ * 2, 16384, 0x7fffffff). In the future, this
|
353
305
|
// maybe updated to a different function of the memory pressure.
|
354
306
|
UpdateSetting(
|
355
|
-
|
307
|
+
Http2Settings::preferred_receive_crypto_message_size_name(),
|
356
308
|
&target_preferred_rx_crypto_frame_size_,
|
357
|
-
Clamp(static_cast<unsigned int>(target_frame_size_ * 2),
|
358
|
-
|
309
|
+
Clamp(static_cast<unsigned int>(target_frame_size_ * 2),
|
310
|
+
Http2Settings::min_preferred_receive_crypto_message_size(),
|
311
|
+
Http2Settings::max_preferred_receive_crypto_message_size()),
|
359
312
|
&action,
|
360
313
|
&FlowControlAction::set_preferred_rx_crypto_frame_size_update);
|
361
314
|
}
|
@@ -422,23 +375,9 @@ FlowControlAction StreamFlowControl::UpdateAction(FlowControlAction action) {
|
|
422
375
|
}
|
423
376
|
// min_progress_size_ > 0 means we have a reader ready to read.
|
424
377
|
if (min_progress_size_ > 0) {
|
425
|
-
if (
|
426
|
-
|
427
|
-
|
428
|
-
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
429
|
-
}
|
430
|
-
} else {
|
431
|
-
// If we're into initial window to receive that data we should wake up
|
432
|
-
// and send an update.
|
433
|
-
if (announced_window_delta_ < 0) {
|
434
|
-
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
435
|
-
} else if (announced_window_delta_ == 0 &&
|
436
|
-
tfc_->queued_init_window() == 0) {
|
437
|
-
// Special case when initial window size is zero, meaning that
|
438
|
-
// announced_window_delta cannot become negative (it may already be so
|
439
|
-
// however).
|
440
|
-
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
441
|
-
}
|
378
|
+
if (announced_window_delta_ <=
|
379
|
+
-static_cast<int64_t>(tfc_->sent_init_window()) / 2) {
|
380
|
+
urgency = FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
|
442
381
|
}
|
443
382
|
}
|
444
383
|
action.set_send_stream_update(urgency);
|
@@ -40,7 +40,6 @@
|
|
40
40
|
#include "src/core/lib/gprpp/time.h"
|
41
41
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
42
42
|
#include "src/core/lib/transport/bdp_estimator.h"
|
43
|
-
#include "src/core/lib/transport/pid_controller.h"
|
44
43
|
|
45
44
|
extern grpc_core::TraceFlag grpc_flowctl_trace;
|
46
45
|
|
@@ -330,10 +329,8 @@ class TransportFlowControl final {
|
|
330
329
|
}
|
331
330
|
|
332
331
|
private:
|
333
|
-
double TargetLogBdp();
|
334
|
-
double SmoothLogBdp(double value);
|
335
332
|
double TargetInitialWindowSizeBasedOnMemoryPressureAndBdp() const;
|
336
|
-
static void UpdateSetting(
|
333
|
+
static void UpdateSetting(absl::string_view name, int64_t* desired_value,
|
337
334
|
uint32_t new_desired_value,
|
338
335
|
FlowControlAction* action,
|
339
336
|
FlowControlAction& (FlowControlAction::*set)(
|
@@ -359,10 +356,6 @@ class TransportFlowControl final {
|
|
359
356
|
// bdp estimation
|
360
357
|
BdpEstimator bdp_estimator_;
|
361
358
|
|
362
|
-
// pid controller
|
363
|
-
PidController pid_controller_;
|
364
|
-
Timestamp last_pid_update_;
|
365
|
-
|
366
359
|
int64_t remote_window_ = kDefaultWindow;
|
367
360
|
int64_t target_initial_window_size_ = kDefaultWindow;
|
368
361
|
int64_t target_frame_size_ = kDefaultFrameSize;
|