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
@@ -47,7 +47,8 @@ namespace grpc_core {
|
|
47
47
|
|
48
48
|
namespace {
|
49
49
|
|
50
|
-
class ServerConfigSelectorFilter final
|
50
|
+
class ServerConfigSelectorFilter final
|
51
|
+
: public ImplementChannelFilter<ServerConfigSelectorFilter> {
|
51
52
|
public:
|
52
53
|
~ServerConfigSelectorFilter() override;
|
53
54
|
|
@@ -60,8 +61,16 @@ class ServerConfigSelectorFilter final : public ChannelFilter {
|
|
60
61
|
static absl::StatusOr<ServerConfigSelectorFilter> Create(
|
61
62
|
const ChannelArgs& args, ChannelFilter::Args);
|
62
63
|
|
63
|
-
|
64
|
-
|
64
|
+
class Call {
|
65
|
+
public:
|
66
|
+
absl::Status OnClientInitialMetadata(ClientMetadata& md,
|
67
|
+
ServerConfigSelectorFilter* filter);
|
68
|
+
static const NoInterceptor OnServerInitialMetadata;
|
69
|
+
static const NoInterceptor OnServerTrailingMetadata;
|
70
|
+
static const NoInterceptor OnClientToServerMessage;
|
71
|
+
static const NoInterceptor OnServerToClientMessage;
|
72
|
+
static const NoInterceptor OnFinalize;
|
73
|
+
};
|
65
74
|
|
66
75
|
absl::StatusOr<RefCountedPtr<ServerConfigSelector>> config_selector() {
|
67
76
|
MutexLock lock(&state_->mu);
|
@@ -130,25 +139,28 @@ ServerConfigSelectorFilter::~ServerConfigSelectorFilter() {
|
|
130
139
|
}
|
131
140
|
}
|
132
141
|
|
133
|
-
|
134
|
-
|
135
|
-
auto sel = config_selector();
|
136
|
-
if (!sel.ok()) return
|
137
|
-
auto call_config =
|
138
|
-
sel.value()->GetCallConfig(call_args.client_initial_metadata.get());
|
142
|
+
absl::Status ServerConfigSelectorFilter::Call::OnClientInitialMetadata(
|
143
|
+
ClientMetadata& md, ServerConfigSelectorFilter* filter) {
|
144
|
+
auto sel = filter->config_selector();
|
145
|
+
if (!sel.ok()) return sel.status();
|
146
|
+
auto call_config = sel.value()->GetCallConfig(&md);
|
139
147
|
if (!call_config.ok()) {
|
140
|
-
|
141
|
-
absl::UnavailableError(StatusToString(call_config.status()))));
|
142
|
-
return std::move(r);
|
148
|
+
return absl::UnavailableError(StatusToString(call_config.status()));
|
143
149
|
}
|
144
150
|
auto* service_config_call_data =
|
145
151
|
GetContext<Arena>()->New<ServiceConfigCallData>(
|
146
152
|
GetContext<Arena>(), GetContext<grpc_call_context_element>());
|
147
153
|
service_config_call_data->SetServiceConfig(
|
148
154
|
std::move(call_config->service_config), call_config->method_configs);
|
149
|
-
return
|
155
|
+
return absl::OkStatus();
|
150
156
|
}
|
151
157
|
|
158
|
+
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerInitialMetadata;
|
159
|
+
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerTrailingMetadata;
|
160
|
+
const NoInterceptor ServerConfigSelectorFilter::Call::OnClientToServerMessage;
|
161
|
+
const NoInterceptor ServerConfigSelectorFilter::Call::OnServerToClientMessage;
|
162
|
+
const NoInterceptor ServerConfigSelectorFilter::Call::OnFinalize;
|
163
|
+
|
152
164
|
} // namespace
|
153
165
|
|
154
166
|
const grpc_channel_filter kServerConfigSelectorFilter =
|
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
#include <grpc/support/log.h>
|
40
40
|
|
41
|
-
#include "src/core/ext/filters/client_channel/resolver/xds/
|
41
|
+
#include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver_attributes.h"
|
42
42
|
#include "src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h"
|
43
43
|
#include "src/core/lib/channel/channel_stack.h"
|
44
44
|
#include "src/core/lib/channel/context.h"
|
@@ -58,6 +58,9 @@
|
|
58
58
|
namespace grpc_core {
|
59
59
|
|
60
60
|
TraceFlag grpc_stateful_session_filter_trace(false, "stateful_session_filter");
|
61
|
+
const NoInterceptor StatefulSessionFilter::Call::OnClientToServerMessage;
|
62
|
+
const NoInterceptor StatefulSessionFilter::Call::OnServerToClientMessage;
|
63
|
+
const NoInterceptor StatefulSessionFilter::Call::OnFinalize;
|
61
64
|
|
62
65
|
UniqueTypeName XdsOverrideHostAttribute::TypeName() {
|
63
66
|
static UniqueTypeName::Factory kFactory("xds_override_host");
|
@@ -103,7 +106,7 @@ void MaybeUpdateServerInitialMetadata(
|
|
103
106
|
bool cluster_changed, absl::string_view actual_cluster,
|
104
107
|
absl::string_view cookie_address_list,
|
105
108
|
XdsOverrideHostAttribute* override_host_attribute,
|
106
|
-
ServerMetadata
|
109
|
+
ServerMetadata& server_initial_metadata) {
|
107
110
|
// If cookie doesn't need to change, do nothing.
|
108
111
|
if (cookie_address_list == override_host_attribute->actual_address_list() &&
|
109
112
|
!cluster_changed) {
|
@@ -121,7 +124,7 @@ void MaybeUpdateServerInitialMetadata(
|
|
121
124
|
parts.emplace_back(
|
122
125
|
absl::StrCat("Max-Age=", cookie_config->ttl.as_timespec().tv_sec));
|
123
126
|
}
|
124
|
-
server_initial_metadata
|
127
|
+
server_initial_metadata.Append(
|
125
128
|
"set-cookie", Slice::FromCopiedString(absl::StrJoin(parts, "; ")),
|
126
129
|
[](absl::string_view error, const Slice&) {
|
127
130
|
Crash(absl::StrCat("ERROR ADDING set-cookie METADATA: ", error));
|
@@ -168,12 +171,11 @@ absl::string_view GetClusterToUse(
|
|
168
171
|
return absl::StripPrefix(arena_allocated_cluster, kClusterPrefix);
|
169
172
|
}
|
170
173
|
|
171
|
-
std::string GetCookieValue(const
|
174
|
+
std::string GetCookieValue(const ClientMetadata& client_initial_metadata,
|
172
175
|
absl::string_view cookie_name) {
|
173
176
|
// Check to see if the cookie header is present.
|
174
177
|
std::string buffer;
|
175
|
-
auto header_value =
|
176
|
-
client_initial_metadata->GetStringValue("cookie", &buffer);
|
178
|
+
auto header_value = client_initial_metadata.GetStringValue("cookie", &buffer);
|
177
179
|
if (!header_value.has_value()) return "";
|
178
180
|
// Parse cookie header.
|
179
181
|
std::vector<absl::string_view> values;
|
@@ -193,13 +195,14 @@ std::string GetCookieValue(const ClientMetadataHandle& client_initial_metadata,
|
|
193
195
|
}
|
194
196
|
|
195
197
|
bool IsConfiguredPath(absl::string_view configured_path,
|
196
|
-
const
|
198
|
+
const ClientMetadata& client_initial_metadata) {
|
197
199
|
// No path configured meaning all paths match
|
198
200
|
if (configured_path.empty()) {
|
199
201
|
return true;
|
200
202
|
}
|
201
203
|
// Check to see if the configured path matches the request path.
|
202
|
-
Slice* path_slice =
|
204
|
+
const Slice* path_slice =
|
205
|
+
client_initial_metadata.get_pointer(HttpPathMetadata());
|
203
206
|
GPR_ASSERT(path_slice != nullptr);
|
204
207
|
absl::string_view path = path_slice->as_string_view();
|
205
208
|
// Matching criteria from
|
@@ -218,9 +221,8 @@ bool IsConfiguredPath(absl::string_view configured_path,
|
|
218
221
|
}
|
219
222
|
} // namespace
|
220
223
|
|
221
|
-
|
222
|
-
|
223
|
-
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
224
|
+
void StatefulSessionFilter::Call::OnClientInitialMetadata(
|
225
|
+
ClientMetadata& md, StatefulSessionFilter* filter) {
|
224
226
|
// Get config.
|
225
227
|
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
226
228
|
GetContext<
|
@@ -229,62 +231,57 @@ ArenaPromise<ServerMetadataHandle> StatefulSessionFilter::MakeCallPromise(
|
|
229
231
|
GPR_ASSERT(service_config_call_data != nullptr);
|
230
232
|
auto* method_params = static_cast<StatefulSessionMethodParsedConfig*>(
|
231
233
|
service_config_call_data->GetMethodParsedConfig(
|
232
|
-
service_config_parser_index_));
|
234
|
+
filter->service_config_parser_index_));
|
233
235
|
GPR_ASSERT(method_params != nullptr);
|
234
|
-
|
235
|
-
GPR_ASSERT(
|
236
|
-
if (!
|
237
|
-
!IsConfiguredPath(
|
238
|
-
|
239
|
-
return next_promise_factory(std::move(call_args));
|
236
|
+
cookie_config_ = method_params->GetConfig(filter->index_);
|
237
|
+
GPR_ASSERT(cookie_config_ != nullptr);
|
238
|
+
if (!cookie_config_->name.has_value() ||
|
239
|
+
!IsConfiguredPath(cookie_config_->path, md)) {
|
240
|
+
return;
|
240
241
|
}
|
241
242
|
// Base64-decode cookie value.
|
242
|
-
std::string cookie_value =
|
243
|
-
GetCookieValue(call_args.client_initial_metadata, *cookie_config->name);
|
243
|
+
std::string cookie_value = GetCookieValue(md, *cookie_config_->name);
|
244
244
|
// Cookie format is "host;cluster"
|
245
245
|
std::pair<absl::string_view, absl::string_view> host_cluster =
|
246
246
|
absl::StrSplit(cookie_value, absl::MaxSplits(';', 1));
|
247
|
-
absl::string_view cookie_address_list;
|
248
247
|
// Allocate the string on the arena, so that it has the right lifetime.
|
249
248
|
if (!host_cluster.first.empty()) {
|
250
|
-
|
249
|
+
cookie_address_list_ = AllocateStringOnArena(host_cluster.first);
|
251
250
|
}
|
252
251
|
// Set override host attribute.
|
253
|
-
|
252
|
+
override_host_attribute_ =
|
254
253
|
GetContext<Arena>()->ManagedNew<XdsOverrideHostAttribute>(
|
255
|
-
|
256
|
-
service_config_call_data->SetCallAttribute(
|
254
|
+
cookie_address_list_);
|
255
|
+
service_config_call_data->SetCallAttribute(override_host_attribute_);
|
257
256
|
// Check if the cluster override is valid, and apply it if necessary.
|
258
257
|
// Note that cluster_name will point to an arena-allocated string
|
259
258
|
// that will still be alive when we see the server initial metadata.
|
260
259
|
// If the cluster name is empty, that means we cannot use a
|
261
260
|
// cluster override (i.e., the route uses a cluster specifier plugin).
|
262
|
-
|
261
|
+
cluster_name_ =
|
263
262
|
GetClusterToUse(host_cluster.second, service_config_call_data);
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
return md;
|
287
|
-
});
|
263
|
+
cluster_changed_ = cluster_name_ != host_cluster.second;
|
264
|
+
perform_filtering_ = true;
|
265
|
+
}
|
266
|
+
|
267
|
+
void StatefulSessionFilter::Call::OnServerInitialMetadata(ServerMetadata& md) {
|
268
|
+
if (!perform_filtering_) return;
|
269
|
+
// Add cookie to server initial metadata if needed.
|
270
|
+
MaybeUpdateServerInitialMetadata(cookie_config_, cluster_changed_,
|
271
|
+
cluster_name_, cookie_address_list_,
|
272
|
+
override_host_attribute_, md);
|
273
|
+
}
|
274
|
+
|
275
|
+
void StatefulSessionFilter::Call::OnServerTrailingMetadata(ServerMetadata& md) {
|
276
|
+
if (!perform_filtering_) return;
|
277
|
+
// If we got a Trailers-Only response, then add the
|
278
|
+
// cookie to the trailing metadata instead of the
|
279
|
+
// initial metadata.
|
280
|
+
if (md.get(GrpcTrailersOnly()).value_or(false)) {
|
281
|
+
MaybeUpdateServerInitialMetadata(cookie_config_, cluster_changed_,
|
282
|
+
cluster_name_, cookie_address_list_,
|
283
|
+
override_host_attribute_, md);
|
284
|
+
}
|
288
285
|
}
|
289
286
|
|
290
287
|
void StatefulSessionFilterRegister(CoreConfiguration::Builder* builder) {
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#include "absl/status/statusor.h"
|
27
27
|
#include "absl/strings/string_view.h"
|
28
28
|
|
29
|
+
#include "src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h"
|
29
30
|
#include "src/core/lib/channel/channel_args.h"
|
30
31
|
#include "src/core/lib/channel/channel_fwd.h"
|
31
32
|
#include "src/core/lib/channel/promise_based_filter.h"
|
@@ -68,16 +69,32 @@ class XdsOverrideHostAttribute
|
|
68
69
|
};
|
69
70
|
|
70
71
|
// A filter to provide cookie-based stateful session affinity.
|
71
|
-
class StatefulSessionFilter
|
72
|
+
class StatefulSessionFilter
|
73
|
+
: public ImplementChannelFilter<StatefulSessionFilter> {
|
72
74
|
public:
|
73
75
|
static const grpc_channel_filter kFilter;
|
74
76
|
|
75
77
|
static absl::StatusOr<StatefulSessionFilter> Create(
|
76
78
|
const ChannelArgs& args, ChannelFilter::Args filter_args);
|
77
79
|
|
78
|
-
|
79
|
-
|
80
|
-
|
80
|
+
class Call {
|
81
|
+
public:
|
82
|
+
void OnClientInitialMetadata(ClientMetadata& md,
|
83
|
+
StatefulSessionFilter* filter);
|
84
|
+
void OnServerInitialMetadata(ServerMetadata& md);
|
85
|
+
void OnServerTrailingMetadata(ServerMetadata& md);
|
86
|
+
static const NoInterceptor OnClientToServerMessage;
|
87
|
+
static const NoInterceptor OnServerToClientMessage;
|
88
|
+
static const NoInterceptor OnFinalize;
|
89
|
+
|
90
|
+
private:
|
91
|
+
const StatefulSessionMethodParsedConfig::CookieConfig* cookie_config_;
|
92
|
+
XdsOverrideHostAttribute* override_host_attribute_;
|
93
|
+
absl::string_view cluster_name_;
|
94
|
+
absl::string_view cookie_address_list_;
|
95
|
+
bool cluster_changed_;
|
96
|
+
bool perform_filtering_ = false;
|
97
|
+
};
|
81
98
|
|
82
99
|
private:
|
83
100
|
explicit StatefulSessionFilter(ChannelFilter::Args filter_args);
|
@@ -25,7 +25,7 @@
|
|
25
25
|
#include "src/core/lib/gpr/useful.h"
|
26
26
|
|
27
27
|
// in order of preference
|
28
|
-
static const char* const supported_versions[] = {"
|
28
|
+
static const char* const supported_versions[] = {"h2"};
|
29
29
|
|
30
30
|
int grpc_chttp2_is_alpn_version_supported(const char* version, size_t size) {
|
31
31
|
size_t i;
|
@@ -177,9 +177,9 @@ void Chttp2Connector::OnHandshakeDone(void* arg, grpc_error_handle error) {
|
|
177
177
|
grpc_chttp2_transport_start_reading(self->result_->transport,
|
178
178
|
args->read_buffer,
|
179
179
|
&self->on_receive_settings_, nullptr);
|
180
|
-
RefCountedPtr<Chttp2Connector> cc = self->Ref();
|
181
180
|
self->timer_handle_ = self->event_engine_->RunAfter(
|
182
|
-
self->args_.deadline - Timestamp::Now(),
|
181
|
+
self->args_.deadline - Timestamp::Now(),
|
182
|
+
[self = self->RefAsSubclass<Chttp2Connector>()] {
|
183
183
|
ApplicationCallbackExecCtx callback_exec_ctx;
|
184
184
|
ExecCtx exec_ctx;
|
185
185
|
self->OnTimeout();
|
@@ -617,8 +617,17 @@ void Chttp2ServerListener::ActiveConnection::Start(
|
|
617
617
|
RefCountedPtr<HandshakingState> handshaking_state_ref;
|
618
618
|
listener_ = std::move(listener);
|
619
619
|
{
|
620
|
-
|
621
|
-
if (shutdown_)
|
620
|
+
ReleasableMutexLock lock(&mu_);
|
621
|
+
if (shutdown_) {
|
622
|
+
lock.Release();
|
623
|
+
// If the Connection is already shutdown at this point, it implies the
|
624
|
+
// owning Chttp2ServerListener and all associated ActiveConnections have
|
625
|
+
// been orphaned. The generated endpoints need to be shutdown here to
|
626
|
+
// ensure the tcp connections are closed appropriately.
|
627
|
+
grpc_endpoint_shutdown(endpoint, absl::OkStatus());
|
628
|
+
grpc_endpoint_destroy(endpoint);
|
629
|
+
return;
|
630
|
+
}
|
622
631
|
// Hold a ref to HandshakingState to allow starting the handshake outside
|
623
632
|
// the critical region.
|
624
633
|
handshaking_state_ref = handshaking_state_->Ref();
|