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
@@ -34,6 +34,7 @@
|
|
34
34
|
#include <grpc/event_engine/event_engine.h>
|
35
35
|
#include <grpc/slice_buffer.h>
|
36
36
|
#include <grpc/support/log.h>
|
37
|
+
#include <grpc/support/time.h>
|
37
38
|
|
38
39
|
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
39
40
|
#include "src/core/ext/transport/chttp2/transport/context_list_entry.h"
|
@@ -217,15 +218,12 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
|
|
217
218
|
":peer_initwin=%d:t_win=%" PRId64 ":s_win=%d:s_delta=%" PRId64 "]",
|
218
219
|
std::string(t->peer_string.as_string_view()).c_str(), t, s->id, staller,
|
219
220
|
s->flow_controlled_buffer.length, s->flow_controlled_bytes_flowed,
|
220
|
-
t->settings
|
221
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
|
221
|
+
t->settings.acked().initial_window_size(),
|
222
222
|
t->flow_control.remote_window(),
|
223
223
|
static_cast<uint32_t>(std::max(
|
224
|
-
int64_t{0},
|
225
|
-
|
226
|
-
|
227
|
-
t->settings[GRPC_PEER_SETTINGS]
|
228
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
|
224
|
+
int64_t{0}, s->flow_control.remote_window_delta() +
|
225
|
+
static_cast<int64_t>(
|
226
|
+
t->settings.peer().initial_window_size()))),
|
229
227
|
s->flow_control.remote_window_delta());
|
230
228
|
}
|
231
229
|
}
|
@@ -265,23 +263,13 @@ class WriteContext {
|
|
265
263
|
}
|
266
264
|
|
267
265
|
void FlushSettings() {
|
268
|
-
|
269
|
-
t_->
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
t_->
|
275
|
-
[GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS] =
|
276
|
-
t_->max_concurrent_streams_policy.AdvertiseValue();
|
277
|
-
grpc_slice_buffer_add(
|
278
|
-
t_->outbuf.c_slice_buffer(),
|
279
|
-
grpc_chttp2_settings_create(t_->settings[GRPC_SENT_SETTINGS],
|
280
|
-
t_->settings[GRPC_LOCAL_SETTINGS],
|
281
|
-
t_->force_send_settings,
|
282
|
-
GRPC_CHTTP2_NUM_SETTINGS));
|
283
|
-
if (grpc_core::IsSettingsTimeoutEnabled() &&
|
284
|
-
t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
|
266
|
+
t_->settings.mutable_local().SetMaxConcurrentStreams(
|
267
|
+
t_->max_concurrent_streams_policy.AdvertiseValue());
|
268
|
+
auto update = t_->settings.MaybeSendUpdate();
|
269
|
+
if (update.has_value()) {
|
270
|
+
grpc_core::Http2Frame frame(std::move(*update));
|
271
|
+
Serialize(absl::Span<grpc_core::Http2Frame>(&frame, 1), t_->outbuf);
|
272
|
+
if (t_->keepalive_timeout != grpc_core::Duration::Infinity()) {
|
285
273
|
GPR_ASSERT(
|
286
274
|
t_->settings_ack_watchdog ==
|
287
275
|
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid);
|
@@ -294,9 +282,6 @@ class WriteContext {
|
|
294
282
|
grpc_chttp2_settings_timeout(std::move(t));
|
295
283
|
});
|
296
284
|
}
|
297
|
-
t_->force_send_settings = false;
|
298
|
-
t_->dirtied_local_settings = false;
|
299
|
-
t_->sent_local_settings = true;
|
300
285
|
t_->flow_control.FlushedSettings();
|
301
286
|
t_->max_concurrent_streams_policy.FlushedSettings();
|
302
287
|
grpc_core::global_stats().IncrementHttp2SettingsWrites();
|
@@ -336,8 +321,7 @@ class WriteContext {
|
|
336
321
|
|
337
322
|
void EnactHpackSettings() {
|
338
323
|
t_->hpack_compressor.SetMaxTableSize(
|
339
|
-
t_->settings
|
340
|
-
[GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
|
324
|
+
t_->settings.peer().header_table_size());
|
341
325
|
}
|
342
326
|
|
343
327
|
void UpdateStreamsNoLongerStalled() {
|
@@ -410,17 +394,14 @@ class DataSendContext {
|
|
410
394
|
return static_cast<uint32_t>(std::max(
|
411
395
|
int64_t{0},
|
412
396
|
s_->flow_control.remote_window_delta() +
|
413
|
-
static_cast<int64_t>(
|
414
|
-
t_->settings[GRPC_PEER_SETTINGS]
|
415
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
|
397
|
+
static_cast<int64_t>(t_->settings.peer().initial_window_size())));
|
416
398
|
}
|
417
399
|
|
418
400
|
uint32_t max_outgoing() const {
|
419
401
|
return grpc_core::Clamp<uint32_t>(
|
420
402
|
std::min<int64_t>(
|
421
|
-
{t_->settings
|
422
|
-
|
423
|
-
stream_remote_window(), t_->flow_control.remote_window(),
|
403
|
+
{t_->settings.peer().max_frame_size(), stream_remote_window(),
|
404
|
+
t_->flow_control.remote_window(),
|
424
405
|
grpc_core::IsWriteSizeCapEnabled()
|
425
406
|
? static_cast<int64_t>(write_context_->target_write_size())
|
426
407
|
: std::numeric_limits<uint32_t>::max()}),
|
@@ -494,14 +475,10 @@ class StreamWriteContext {
|
|
494
475
|
grpc_core::HPackCompressor::EncodeHeaderOptions{
|
495
476
|
s_->id, // stream_id
|
496
477
|
false, // is_eof
|
497
|
-
t_->settings
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
t_->settings
|
502
|
-
[GRPC_PEER_SETTINGS]
|
503
|
-
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE], // max_frame_size
|
504
|
-
&s_->stats.outgoing // stats
|
478
|
+
t_->settings.peer()
|
479
|
+
.allow_true_binary_metadata(), // use_true_binary_metadata
|
480
|
+
t_->settings.peer().max_frame_size(), // max_frame_size
|
481
|
+
&s_->stats.outgoing // stats
|
505
482
|
},
|
506
483
|
*s_->send_initial_metadata, t_->outbuf.c_slice_buffer());
|
507
484
|
grpc_chttp2_reset_ping_clock(t_);
|
@@ -517,7 +494,7 @@ class StreamWriteContext {
|
|
517
494
|
if (s_->call_tracer) {
|
518
495
|
s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
|
519
496
|
grpc_core::HttpAnnotation::Type::kHeadWritten,
|
520
|
-
|
497
|
+
gpr_now(GPR_CLOCK_REALTIME), s_->t->flow_control.stats(),
|
521
498
|
s_->flow_control.stats()));
|
522
499
|
}
|
523
500
|
}
|
@@ -596,14 +573,8 @@ class StreamWriteContext {
|
|
596
573
|
}
|
597
574
|
t_->hpack_compressor.EncodeHeaders(
|
598
575
|
grpc_core::HPackCompressor::EncodeHeaderOptions{
|
599
|
-
s_->id, true,
|
600
|
-
t_->settings
|
601
|
-
[GRPC_PEER_SETTINGS]
|
602
|
-
[GRPC_CHTTP2_SETTINGS_GRPC_ALLOW_TRUE_BINARY_METADATA] !=
|
603
|
-
0,
|
604
|
-
t_->settings[GRPC_PEER_SETTINGS]
|
605
|
-
[GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
|
606
|
-
&s_->stats.outgoing},
|
576
|
+
s_->id, true, t_->settings.peer().allow_true_binary_metadata(),
|
577
|
+
t_->settings.peer().max_frame_size(), &s_->stats.outgoing},
|
607
578
|
*s_->send_trailing_metadata, t_->outbuf.c_slice_buffer());
|
608
579
|
}
|
609
580
|
write_context_->IncTrailingMetadataWrites();
|
@@ -649,7 +620,7 @@ class StreamWriteContext {
|
|
649
620
|
absl::OkStatus());
|
650
621
|
if (s_->call_tracer) {
|
651
622
|
s_->call_tracer->RecordAnnotation(grpc_core::HttpAnnotation(
|
652
|
-
grpc_core::HttpAnnotation::Type::kEnd,
|
623
|
+
grpc_core::HttpAnnotation::Type::kEnd, gpr_now(GPR_CLOCK_REALTIME),
|
653
624
|
s_->t->flow_control.stats(), s_->flow_control.stats()));
|
654
625
|
}
|
655
626
|
}
|
@@ -734,9 +705,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
|
|
734
705
|
t->keepalive_timeout != grpc_core::Duration::Infinity()) {
|
735
706
|
// Set ping timeout after finishing write so we don't measure our own send
|
736
707
|
// time.
|
737
|
-
const auto timeout =
|
738
|
-
? t->ping_timeout
|
739
|
-
: t->keepalive_timeout;
|
708
|
+
const auto timeout = t->ping_timeout;
|
740
709
|
auto id = t->ping_callbacks.OnPingTimeout(
|
741
710
|
timeout, t->event_engine.get(), [t = t->Ref()] {
|
742
711
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
@@ -750,8 +719,7 @@ void grpc_chttp2_end_write(grpc_chttp2_transport* t, grpc_error_handle error) {
|
|
750
719
|
id.value());
|
751
720
|
}
|
752
721
|
|
753
|
-
if (
|
754
|
-
t->keepalive_incoming_data_wanted &&
|
722
|
+
if (t->keepalive_incoming_data_wanted &&
|
755
723
|
t->keepalive_timeout < t->ping_timeout &&
|
756
724
|
t->keepalive_ping_timeout_handle !=
|
757
725
|
grpc_event_engine::experimental::EventEngine::TaskHandle::
|
@@ -16,31 +16,183 @@
|
|
16
16
|
|
17
17
|
#include "src/core/ext/transport/inproc/inproc_transport.h"
|
18
18
|
|
19
|
+
#include <atomic>
|
20
|
+
|
21
|
+
#include <grpc/grpc.h>
|
19
22
|
#include <grpc/support/log.h>
|
20
23
|
|
21
24
|
#include "src/core/ext/transport/inproc/legacy_inproc_transport.h"
|
22
25
|
#include "src/core/lib/experiments/experiments.h"
|
23
26
|
#include "src/core/lib/gprpp/crash.h"
|
27
|
+
#include "src/core/lib/promise/promise.h"
|
28
|
+
#include "src/core/lib/promise/try_seq.h"
|
29
|
+
#include "src/core/lib/surface/server.h"
|
30
|
+
#include "src/core/lib/transport/transport.h"
|
24
31
|
|
25
32
|
namespace grpc_core {
|
26
33
|
|
27
34
|
namespace {
|
35
|
+
class InprocServerTransport final : public RefCounted<InprocServerTransport>,
|
36
|
+
public Transport,
|
37
|
+
public ServerTransport {
|
38
|
+
public:
|
39
|
+
void SetAcceptor(Acceptor* acceptor) override {
|
40
|
+
acceptor_ = acceptor;
|
41
|
+
ConnectionState expect = ConnectionState::kInitial;
|
42
|
+
state_.compare_exchange_strong(expect, ConnectionState::kReady,
|
43
|
+
std::memory_order_acq_rel,
|
44
|
+
std::memory_order_acquire);
|
45
|
+
MutexLock lock(&state_tracker_mu_);
|
46
|
+
state_tracker_.SetState(GRPC_CHANNEL_READY, absl::OkStatus(),
|
47
|
+
"accept function set");
|
48
|
+
}
|
49
|
+
|
50
|
+
void Orphan() override { Unref(); }
|
51
|
+
|
52
|
+
FilterStackTransport* filter_stack_transport() override { return nullptr; }
|
53
|
+
ClientTransport* client_transport() override { return nullptr; }
|
54
|
+
ServerTransport* server_transport() override { return this; }
|
55
|
+
absl::string_view GetTransportName() const override { return "inproc"; }
|
56
|
+
void SetPollset(grpc_stream*, grpc_pollset*) override {}
|
57
|
+
void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
|
58
|
+
void PerformOp(grpc_transport_op* op) override {
|
59
|
+
gpr_log(GPR_INFO, "inproc server op: %s",
|
60
|
+
grpc_transport_op_string(op).c_str());
|
61
|
+
if (op->start_connectivity_watch != nullptr) {
|
62
|
+
MutexLock lock(&state_tracker_mu_);
|
63
|
+
state_tracker_.AddWatcher(op->start_connectivity_watch_state,
|
64
|
+
std::move(op->start_connectivity_watch));
|
65
|
+
}
|
66
|
+
if (op->stop_connectivity_watch != nullptr) {
|
67
|
+
MutexLock lock(&state_tracker_mu_);
|
68
|
+
state_tracker_.RemoveWatcher(op->stop_connectivity_watch);
|
69
|
+
}
|
70
|
+
if (op->set_accept_stream) {
|
71
|
+
Crash("set_accept_stream not supported on inproc transport");
|
72
|
+
}
|
73
|
+
}
|
74
|
+
grpc_endpoint* GetEndpoint() override { return nullptr; }
|
75
|
+
|
76
|
+
void Disconnect(absl::Status error) {
|
77
|
+
if (disconnecting_.exchange(true, std::memory_order_relaxed)) return;
|
78
|
+
disconnect_error_ = std::move(error);
|
79
|
+
state_.store(ConnectionState::kDisconnected, std::memory_order_relaxed);
|
80
|
+
MutexLock lock(&state_tracker_mu_);
|
81
|
+
state_tracker_.SetState(GRPC_CHANNEL_SHUTDOWN, disconnect_error_,
|
82
|
+
"inproc transport disconnected");
|
83
|
+
}
|
84
|
+
|
85
|
+
absl::StatusOr<CallInitiator> AcceptCall(ClientMetadata& md) {
|
86
|
+
switch (state_.load(std::memory_order_acquire)) {
|
87
|
+
case ConnectionState::kInitial:
|
88
|
+
return absl::InternalError(
|
89
|
+
"inproc transport hasn't started accepting calls");
|
90
|
+
case ConnectionState::kDisconnected:
|
91
|
+
return absl::UnavailableError("inproc transport is disconnected");
|
92
|
+
case ConnectionState::kReady:
|
93
|
+
break;
|
94
|
+
}
|
95
|
+
return acceptor_->CreateCall(md, acceptor_->CreateArena());
|
96
|
+
}
|
97
|
+
|
98
|
+
private:
|
99
|
+
enum class ConnectionState : uint8_t { kInitial, kReady, kDisconnected };
|
100
|
+
|
101
|
+
std::atomic<ConnectionState> state_{ConnectionState::kInitial};
|
102
|
+
std::atomic<bool> disconnecting_{false};
|
103
|
+
Acceptor* acceptor_;
|
104
|
+
absl::Status disconnect_error_;
|
105
|
+
Mutex state_tracker_mu_;
|
106
|
+
ConnectivityStateTracker state_tracker_ ABSL_GUARDED_BY(state_tracker_mu_){
|
107
|
+
"inproc_server_transport", GRPC_CHANNEL_CONNECTING};
|
108
|
+
};
|
109
|
+
|
110
|
+
class InprocClientTransport final : public Transport, public ClientTransport {
|
111
|
+
public:
|
112
|
+
void StartCall(CallHandler call_handler) override {
|
113
|
+
call_handler.SpawnGuarded(
|
114
|
+
"pull_initial_metadata",
|
115
|
+
TrySeq(
|
116
|
+
call_handler.PullClientInitialMetadata(),
|
117
|
+
[server_transport = server_transport_,
|
118
|
+
call_handler](ClientMetadataHandle md) {
|
119
|
+
auto call_initiator = server_transport->AcceptCall(*md);
|
120
|
+
if (!call_initiator.ok()) return call_initiator.status();
|
121
|
+
ForwardCall(call_handler, std::move(*call_initiator),
|
122
|
+
std::move(md));
|
123
|
+
return absl::OkStatus();
|
124
|
+
},
|
125
|
+
ImmediateOkStatus()));
|
126
|
+
}
|
127
|
+
|
128
|
+
void Orphan() override { delete this; }
|
129
|
+
|
130
|
+
OrphanablePtr<Transport> GetServerTransport() {
|
131
|
+
return OrphanablePtr<Transport>(server_transport_->Ref().release());
|
132
|
+
}
|
133
|
+
|
134
|
+
FilterStackTransport* filter_stack_transport() override { return nullptr; }
|
135
|
+
ClientTransport* client_transport() override { return this; }
|
136
|
+
ServerTransport* server_transport() override { return nullptr; }
|
137
|
+
absl::string_view GetTransportName() const override { return "inproc"; }
|
138
|
+
void SetPollset(grpc_stream*, grpc_pollset*) override {}
|
139
|
+
void SetPollsetSet(grpc_stream*, grpc_pollset_set*) override {}
|
140
|
+
void PerformOp(grpc_transport_op*) override { Crash("unimplemented"); }
|
141
|
+
grpc_endpoint* GetEndpoint() override { return nullptr; }
|
142
|
+
|
143
|
+
private:
|
144
|
+
~InprocClientTransport() override {
|
145
|
+
server_transport_->Disconnect(
|
146
|
+
absl::UnavailableError("Client transport closed"));
|
147
|
+
}
|
148
|
+
|
149
|
+
RefCountedPtr<InprocServerTransport> server_transport_ =
|
150
|
+
MakeRefCounted<InprocServerTransport>();
|
151
|
+
};
|
152
|
+
|
28
153
|
bool UsePromiseBasedTransport() {
|
29
154
|
if (!IsPromiseBasedInprocTransportEnabled()) return false;
|
30
|
-
|
31
|
-
|
32
|
-
"Promise based inproc transport requested but promise based client "
|
33
|
-
"calls are disabled: using legacy implementation.");
|
34
|
-
return false;
|
35
|
-
}
|
36
|
-
if (!IsPromiseBasedServerCallEnabled()) {
|
37
|
-
gpr_log(GPR_ERROR,
|
38
|
-
"Promise based inproc transport requested but promise based server "
|
39
|
-
"calls are disabled: using legacy implementation.");
|
40
|
-
return false;
|
41
|
-
}
|
155
|
+
GPR_ASSERT(IsPromiseBasedClientCallEnabled());
|
156
|
+
GPR_ASSERT(IsPromiseBasedServerCallEnabled());
|
42
157
|
return true;
|
43
158
|
}
|
159
|
+
|
160
|
+
RefCountedPtr<Channel> MakeLameChannel(absl::string_view why,
|
161
|
+
absl::Status error) {
|
162
|
+
gpr_log(GPR_ERROR, "%s: %s", std::string(why).c_str(),
|
163
|
+
std::string(error.message()).c_str());
|
164
|
+
intptr_t integer;
|
165
|
+
grpc_status_code status = GRPC_STATUS_INTERNAL;
|
166
|
+
if (grpc_error_get_int(error, StatusIntProperty::kRpcStatus, &integer)) {
|
167
|
+
status = static_cast<grpc_status_code>(integer);
|
168
|
+
}
|
169
|
+
return RefCountedPtr<Channel>(Channel::FromC(grpc_lame_client_channel_create(
|
170
|
+
nullptr, status, std::string(why).c_str())));
|
171
|
+
}
|
172
|
+
|
173
|
+
RefCountedPtr<Channel> MakeInprocChannel(Server* server,
|
174
|
+
ChannelArgs client_channel_args) {
|
175
|
+
auto client_transport = MakeOrphanable<InprocClientTransport>();
|
176
|
+
auto server_transport = client_transport->GetServerTransport();
|
177
|
+
auto error =
|
178
|
+
server->SetupTransport(server_transport.get(), nullptr,
|
179
|
+
server->channel_args()
|
180
|
+
.Remove(GRPC_ARG_MAX_CONNECTION_IDLE_MS)
|
181
|
+
.Remove(GRPC_ARG_MAX_CONNECTION_AGE_MS),
|
182
|
+
nullptr);
|
183
|
+
if (!error.ok()) {
|
184
|
+
return MakeLameChannel("Failed to create server channel", std::move(error));
|
185
|
+
}
|
186
|
+
std::ignore = server_transport.release(); // consumed by SetupTransport
|
187
|
+
auto channel = Channel::Create(
|
188
|
+
"inproc",
|
189
|
+
client_channel_args.Set(GRPC_ARG_DEFAULT_AUTHORITY, "inproc.authority"),
|
190
|
+
GRPC_CLIENT_DIRECT_CHANNEL, client_transport.release());
|
191
|
+
if (!channel.ok()) {
|
192
|
+
return MakeLameChannel("Failed to create client channel", channel.status());
|
193
|
+
}
|
194
|
+
return std::move(*channel);
|
195
|
+
}
|
44
196
|
} // namespace
|
45
197
|
|
46
198
|
} // namespace grpc_core
|
@@ -48,8 +200,15 @@ bool UsePromiseBasedTransport() {
|
|
48
200
|
grpc_channel* grpc_inproc_channel_create(grpc_server* server,
|
49
201
|
const grpc_channel_args* args,
|
50
202
|
void* reserved) {
|
203
|
+
grpc_core::ApplicationCallbackExecCtx app_exec_ctx;
|
204
|
+
grpc_core::ExecCtx exec_ctx;
|
51
205
|
if (!grpc_core::UsePromiseBasedTransport()) {
|
52
206
|
return grpc_legacy_inproc_channel_create(server, args, reserved);
|
53
207
|
}
|
54
|
-
grpc_core::
|
208
|
+
return grpc_core::MakeInprocChannel(grpc_core::Server::FromC(server),
|
209
|
+
grpc_core::CoreConfiguration::Get()
|
210
|
+
.channel_args_preconditioning()
|
211
|
+
.PreconditionChannelArgs(args))
|
212
|
+
.release()
|
213
|
+
->c_ptr();
|
55
214
|
}
|