grpc 1.60.0 → 1.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +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 +67 -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/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
@@ -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;
|